这个就不写很多不同类的属性和方法了。其中涉及的类有MailMessage类,SmtpClient类
其实可有还有相关的Attachment类:表示电子邮件的附件
以下是我看的一本书中的实例,我也就直接贴实例代码了:
一共三个窗体:Form1,frmSend,frmReceive
首先是Form1窗体:
后台代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace EmailSendAndReceive
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void 邮件发送ToolStripMenuItem_Click(object sender, EventArgs e)
{
frmSend frmsend = new frmSend();
frmsend.MdiParent = this;
frmsend.Show();
}
private void 邮件接收ToolStripMenuItem_Click(object sender, EventArgs e)
{
frmReceive frmreceive = new frmReceive();
frmreceive.MdiParent = this;
frmreceive.Show();
}
}
}
其次是邮件发送窗体:
后台代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Mail;
namespace EmailSendAndReceive
{
public partial class frmSend : Form
{
public frmSend()
{
InitializeComponent();
}
//对邮件内容进行编码
public static string Base64Encode(string str)
{
return Convert.ToBase64String(Encoding.UTF8.GetBytes(str));
}
private void btnSend_Click(object sender, EventArgs e)
{
try
{
MailAddress from = new MailAddress(txtSend.Text); //设置邮件发送人
MailAddress to = new MailAddress(txtTo.Text); //设置邮件接收人
MailMessage message = new MailMessage(from, to); //实例化一个MaileMessage类对象
message.Subject = Base64Encode(txtSubject.Text); //设置发送邮件的主题
message.Body = Base64Encode(txtContent.Text); //设置发送邮件的内容
//实例化SmtpClient邮件发送类对象
SmtpClient client = new SmtpClient(txtServer.Text, Convert.ToInt32(txtPort.Text));
//设置用于验证发件人身份的凭据
client.Credentials = new System.Net.NetworkCredential(txtName.Text, txtPwd.Text);
//发送邮件
client.Send(message);
MessageBox.Show("发送成功");
}
catch
{
MessageBox.Show("发送失败!");
}
}
}
}
最后是邮件接收窗体:
后台代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace EmailSendAndReceive
{
public partial class frmReceive : Form
{
public frmReceive()
{
InitializeComponent();
}
public static string strserver; //存储邮件服务器
public static string pwd; //存储用户登录邮箱的密码
public static int k; //存储邮件数目
public static TcpClient tcpclient; //实例化TcpClient对象,用来建立客户端连接
public static StreamReader sreader; //通过流读取邮件内容
public static string strRet; //存储邮件内容
//向服务器发送命令
private string SendPopCmd(TcpClient tcpclient, string strCmd)
{
Byte[] arrCmd;
string strRet;
Stream stream;
stream = tcpclient.GetStream();
strCmd = strCmd + "\r\n";
arrCmd = Encoding.Default.GetBytes(strCmd.ToCharArray());
stream.Write(arrCmd, 0, strCmd.Length);
strRet = sreader.ReadLine();
return strRet;
}
//该方法用来对获得连接的用户身份进行验证
private string Logon(TcpClient tcpclient, string user, string pass)
{
string strRet; //存储用户登录信息
strRet = SendPopCmd(tcpclient, "user " + user); //向登录服务器发送用户名
strRet = SendPopCmd(tcpclient, "pass " + pass); //想登录服务器发送密码
return strRet;
}
//获取登录邮箱的各种信息
private string[] StaticMailBox(TcpClient tcpclient)
{
string strRet;
strRet = SendPopCmd(tcpclient, "stat"); //向服务器发送信息返回邮箱的统计资料
if (JudgeString(strRet) != "+OK")
{
return "-ERR -ERR".Split(" ".ToCharArray());
}
else
{
string[] arrRet = strRet.Split(" ".ToCharArray());
return arrRet;
}
}
//判断返回的字符串信息,如果是“+OK”,证明登录成功,否则登录失败
private string JudgeString(string strCheck)
{
if (strCheck.Substring(0, 3) != "+OK")
{
return "-ERR";
}
else
return "+OK";
}
//根据输入的邮件编号读取邮件信息
private string[] PopMail(TcpClient tcpclient, int i)
{
string strRet;
string[] arrRet = new string[20];
bool strBody = false;
string[] arrTemp;
//获取由参数标识的邮件的全部文本
strRet = SendPopCmd(tcpclient, "retr " + i.ToString());
if (JudgeString(strRet) != "+OK")
{
return "-ERR -ERR".Split(" ".ToCharArray());
}
arrRet[0] = "+OK";
while (sreader.Peek() != 46)
{
strRet = sreader.ReadLine();
arrTemp = strRet.Split(":".ToCharArray());
if (strRet == "")
strBody = true; //现在开始接收 Body 的信息
if (arrTemp[0].ToLower() == "date")
arrRet[1] = arrTemp[1]; //信件的发送日期
if (arrTemp[0].ToLower() == "from")
arrRet[2] = (arrTemp[1].Substring(arrTemp[1].LastIndexOf("<") + 1)).Replace(">", " "); //发信人
if (arrTemp[0].ToLower() == "to")
arrRet[3] = (arrTemp[1].Substring(arrTemp[1].LastIndexOf("<") + 1)).Replace(">", " "); //收信人
if (arrTemp[0].ToLower() == "subject")
arrRet[4] = arrTemp[1].ToString(); //主题
if (strBody)
arrRet[5] = arrRet[5] + strRet + "\n";
}
return arrRet;
}
//对读取的邮件内容进行Base64编码
public static string Base64Decode(string str)
{
return Encoding.UTF8.GetString(Convert.FromBase64String(str));
}
//“登录”按钮事件
private void btnLogin_Click(object sender, EventArgs e)
{
string user = txtMail.Text;
string pass = txtPwd.Text;
string[] arrRet;
pwd = pass;
strserver = txtPOP.Text;
tcpclient = new TcpClient();
try
{
tcpclient.Connect(strserver, 110); //连接远程主机
//初始化StreamReader对象,以便以流的形式读取远程主机中的内容
sreader = new StreamReader(tcpclient.GetStream(), Encoding.Default);
sreader.ReadLine();
strRet = Logon(tcpclient, user, pass); //登录远程主机
if (JudgeString(strRet) != "+OK")
{
MessageBox.Show("用户名或密码不匹配");
return;
}
arrRet = StaticMailBox(tcpclient); //获取远程主机中指定用户的邮件信息
if (arrRet[0] != "+OK")
{
MessageBox.Show("出错了!");
return;
}
richTextBox1.AppendText("当前用户:" + user + "\n");
richTextBox1.AppendText("邮箱中共有:" + arrRet[1] + "封邮件" + "\n");
richTextBox1.AppendText("共占:" + arrRet[2] + "Byte");
k = Convert.ToInt32(arrRet[1]);
txtPOP.ReadOnly = txtMail.ReadOnly = txtPwd.ReadOnly = true;
btnLogin.Enabled = false;
btnReceive.Enabled = true;
MessageBox.Show("登录成功!");
}
catch
{
MessageBox.Show("连接服务器失败!");
}
}
//“退出”按钮事件
private void btnExit_Click(object sender, EventArgs e)
{
tcpclient.Close(); //关闭远程主机连接
}
//“接收”邮件按钮事件
private void btnReceive_Click(object sender, EventArgs e)
{
try
{
if (txtNum.Text != "")
{
if (Convert.ToInt32(txtNum.Text) > k || Convert.ToInt32(txtNum.Text) <= 0)
{
MessageBox.Show("输入的索引错误");
}
else
{
richTextBox1.Clear();
string[] arrRets;
//获得远程主机上指定邮件的相关信息,存储到一个string类型的数组中
arrRets = PopMail(tcpclient, Convert.ToInt32(txtNum.Text));
richTextBox1.AppendText("当前是第" + txtNum.Text + "封信" + "\n");
richTextBox1.AppendText("邮件日期:" + arrRets[1] + "\n");
richTextBox1.AppendText("发信人:" + arrRets[2] + "\n");
richTextBox1.AppendText("收信人:" + arrRets[3] + "\n");
richTextBox1.AppendText("邮件主题:" + Base64Decode(arrRets[4]) + "\n");
richTextBox1.AppendText("邮件内容:" + Base64Decode(arrRets[5]));
}
}
else
{
MessageBox.Show("邮件索引错误");
}
}
catch
{
}
}
private void txtPwd_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
btnLogin.Focus();
}
private void txtPOP_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
txtMail.Focus();
}
private void txtMail_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
txtPwd.Focus();
}
private void txtNum_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
btnReceive.Focus();
}
private void frmReceive_FormClosed(object sender, FormClosedEventArgs e)
{
try
{
tcpclient.Close();
}
catch { }
}
}
}