System.Net.Mail空间的学习

之所以提到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试试收邮件的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值