之所以提到system.net.mail这个空间的学习,是最近在学习发邮件的程序。
发邮件程序的学习让我学到了不少知识。原来发网络邮件首先需要很多种协议,我知道的有SMTP/POP3/MIME等。其中如果你的OS用的不是Vista或者win7,那只要你安装了IIS,就可以利用本地的SMTP服务器写发送邮件的程序了。
Vista和win7的操作系统的IIS没有SMTP,我找了半天最后查到没有的。还有SMTP只能写发送邮件的程序,如果想接受邮件,就要换种协议的服务器了。
发送邮件程序要用到system.net.mail这个空间的各种类。下面主要介绍下:
System.Net.Mail 命名空间包含用于将电子邮件发送到简单邮件传输协议 (SMTP) 服务器进行传送的类。主要用到的有以下几个类:MailAddress/MailMessage/SmtpClient,还有委托即所说的代理函数SendCompletedEventHandler。
以下程序是通过我验证可行的代码,但是我用的是163的SMTP的服务器,由于win7系统的IIS没有SMTP服务,所以本地的虚拟SMTP服务器不能用。
namespace MailTest
{
class Program
{
static bool mailSent = false;
private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
String token = (string)e.UserState;
if (e.Cancelled)
{
Console.WriteLine("[{0}] Send canceled.", token);
}
if (e.Error != null)
{
Console.WriteLine("[{0}] {1}", token, e.Error.ToString());
}
else
{
Console.WriteLine("Message sent.");
}
mailSent = true;
}
public static void Main(string[] args)
{
MailMessage mail = new MailMessage();
mail.From = new MailAddress("mailaddress1", "displayname");
mail.To.Add("mailaddress2");
mail.Priority = MailPriority.High;
mail.Subject = "subject";
mail.Body = "message,first mail test!";
SmtpClient client = new SmtpClient("smtp.163.com");
client.Credentials = new NetworkCredential("mailaddressname", "password");
client.Send(mail);
client.SendCompleted +=new SendCompletedEventHandler(SendCompletedCallback);
Console.WriteLine("Sending message... press c to cancel mail. Press any other key to exit.");
string answer = Console.ReadLine();
if (answer.StartsWith("c") && mailSent == false)
{
client.SendAsyncCancel();
}
Console.WriteLine("Goodbye.");
}
}
}
除了上述适用smtp.163.com的服务器外,其实还可以使用本地的SMTP服务器,首先按照如下设置下本地的SMTP服务:
这样就设置完了,图中遮掩的部分是本地的ip地址。
以下代码是利用本地的SMTP服务器完成的邮件发送功能。
string strHostIP = "";
IPHostEntry oIPHost = Dns.GetHostEntry("");
if (oIPHost.AddressList.Length > 0)
strHostIP = oIPHost.AddressList[0].ToString();
MailMessage mm = new MailMessage();
mm.From = new MailAddress("FromMailAddress", "youdisplayname");
mm.To.Add(new MailAddress("ToMailAdddress"));
mm.Subject = "Mail Test subject!";
mm.Body = "mail test body";
SmtpClient client = new SmtpClient(strHostIP);
client.Send(mm);
这样就完成了,接下来利用pop3试试收邮件的功能。