首页 > 代码库 > c#之 简单stmp/pop邮件服务(一)—— 发送邮件

c#之 简单stmp/pop邮件服务(一)—— 发送邮件

c#的邮件服务,主要有两种。

一种是利用JMail组件,进行收发。

另一种是利用vs自带的stmp/pop3邮件服务,来实现。

我将要讲解的是利用stmp/pop3邮件服务。原因无它。vs自己就有,无需安装插件之类。

 

首先,我们要添加stmp/pop3邮件服务类的命名空间:

using System.Net.Mail;

 

接下来,我给出源代码,并给出详细注释!是一个邮件发送函数,已测试成功。

如果你只想用,而不想理解那么多细节,那么在最后面,我给出了一个比较精简的发送邮箱函数(点击此处链接),希望,对你有帮助!

  

 /// <summary>
        /// 邮件发送
        /// </summary>
        /// <param name="strTo">收信对象邮箱</param>
        /// <param name="strSubject">邮件主题</param>
        /// <param name="strBody">邮件内容</param>
        public static bool SendEmail(string strTo, string strSubject, string strBody)
        {
           string strSmtpServer = "smtp.163.com"; //163邮件服务器
            string strFrom = "*****@163.com"; //用户邮箱
            string strFromPass = "****";//用户密码

          

            //string strSmtpServer = "smtp.qq.com"; //qq邮件服务器
             //string strSmtpServer = "202.108.3.190"; //新浪邮件服务器


            SmtpClient client = new SmtpClient(strSmtpServer);//创建邮箱服务器对象           

            client.UseDefaultCredentials = false;//获取或设置是否使用默认凭据访问 Web 代理服务器
            client.Credentials = new System.Net.NetworkCredential(strFrom, strFromPass);//创建用户对象
            client.DeliveryMethod = SmtpDeliveryMethod.Network;//投递方式

 

            MailMessage message = new MailMessage();    //创建邮件对象
            message.From = new MailAddress(strFrom);    //发信人地址
            message.To.Add(strTo);                      //添加收信人地址
            message.Subject = strSubject;               //邮件主题
            message.Body = strBody;                     //邮件内容

 

//当然,你也把上面五条语句简化为如下:

//MailMessage message = new MailMessage(strFrom, strto, strSubject, strBody);

            //添加附件,要注意的是,发送附件可能会慢点,耐心等下!
            //Attachment attachment = new Attachment("e://a.xls");   //创建附件对象,括号内参数为要添加的附件所在的地址 
           // message.Attachments.Add(attachment);                      //添加到邮件


            message.BodyEncoding = System.Text.Encoding.UTF8;//获取或设置用于邮件正文的编码

            message.IsBodyHtml = true;//取得或设定值,指出电子邮件的主体是否为 HTML
            if (!string.IsNullOrEmpty(strBody))//判断邮件内容是否为空
            {
                try
                {
                    client.Send(message);//发送

                    MessageBox.Show("发送成功!");
                    return true;
                }
                catch(Exception ex)
                {
                    MessageBox.Show("发送失败:"+ex.Message);
                    return false;
                }
            }
            else
            {
                MessageBox.Show("不能发送空信息!");
                return false;
            }       

 }

 

这里,再举一个调用该函数的例子:

 SendEmail("*****@qq.com","测试", "发送成功!");

 

这里还要说明下邮件服务的一些细节,对于发邮件而言是stmp协议,而要接收邮件把stmp改成pop就可以,在以后的文章中,

将介绍到如何接收邮件:

1.qq邮箱

邮件服务器:smtp.qq.com

但要注意一点,qq的stmp/pop3服务必须开启才能连接,开启方法详见:

http://service.mail.qq.com/cgi-bin/help?subtype=1&&no=308&&id=26

2.163邮箱

邮件服务器:smtp.163.com

3.新浪邮箱

邮件服务器:202.108.3.190

对于想设置为新浪邮箱的服务器的朋友,有三点要注意下:

1.服务器名设置不能用stmp.sina.com, 而是用它的ip地址,不信,你试试。

2.它的stmp/pos3功能要手动开启,方法同qq一样,这里就不重复了。

3.它不能发送qq邮件

 

下面是上面代码的精简版:

/// <summary>
        /// 邮件发送
        /// </summary>
        /// <param name="strTo">收信对象邮箱</param>
        /// <param name="strSubject">邮件主题</param>
        /// <param name="strBody">邮件内容</param>

 public static bool SendEmail2(string strto, string strSubject, string strBody)
        {
            string strSmtpServer = "smtp.163.com"; //163邮件服务器
            string strFrom = "*******@163.com";
            string strFromPass = "*******";


            SmtpClient client = new SmtpClient(strSmtpServer);
            client.Credentials = new System.Net.NetworkCredential(strFrom, strFromPass);
            client.DeliveryMethod = SmtpDeliveryMethod.Network;

            MailMessage message = new MailMessage(strFrom, strto, strSubject, strBody);
          
            //添加附件,要注意的是,发送附件可能会慢点,耐心等下!
            //Attachment attachment = new Attachment("e://a.xls");   //创建附件对象,括号内参数为要添加的附件所在的地址 
            //message.Attachments.Add(attachment);                      //添加到邮件    
       
            try
                {
                    client.Send(message);
                      MessageBox.Show("发送成功!");

                    return true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("发送失败:" + ex.Message);
                    return false;
                }
       
        }

【引用】http://blog.csdn.net/kkfdsa132/article/details/5388228