• C#使用SmtpClient发送邮件


     

    目的:写一个可发送邮件的DLL。

    原理: 

      例如A使用163邮箱发送邮件给B(qq邮箱)。首先A会把邮件通过SMTP(Simple Mail Transfer Protocol)协议传输到163的Smtp服务器上,163的Smtp服务器会根据B的邮箱账号,把邮件通过Smtp协议发给QQ邮箱的Smtp服务器。QQ的Smtp服务器接收到邮件消息后会将之存储在QQ邮箱的邮件存储设备上。当B登陆QQ邮箱后,如果有新邮件,POP3服务器就会从QQ邮箱的邮件存储设备上读出邮件并通过POP3/IMAP服务发送给邮件客户端的B。

      原理图

      

     

    使用的对象
          smtpClient类:允许应用程序使用简单邮件传输协议 (SMTP) 发送电子邮件。

          MailAddress类:MailAddress类表示电子邮件的地址。该类结合SmtpClient类或MailMessage类使用,其实例存储了电子邮件的地址信息。  

          MailMessage 类:MailMessage类是.NET Framework中管理邮件的专用类,表示可以使用SmtpClient类发送的电子邮件。MailMessage 类的实例表示一个电子邮件的所有内容,并用SmtpClient类来传输到SMTP服务器。若要指定电子邮件的发件人、收件人和内容,可以使用 MailMessage类的关联属性。 

          NetworkCredential类:为基于密码的身份验证方案(如基本、简要、NTLM 和 Kerberos 身份验证)提供凭据。

     

    代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Mail;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
                sendingMail();
                Console.ReadLine();
            }
            public static string sendingMail()
            {
                string smtpService = "smtp.qq.com";
                string sendEmail = "xxx@qq.com";
                string sendpwd = "*******";
    
    
                //确定smtp服务器地址 实例化一个Smtp客户端
                SmtpClient smtpclient = new SmtpClient();
                smtpclient.Host = smtpService;
                //smtpClient.Port = "";//qq邮箱可以不用端口
    
                //确定发件地址与收件地址
                MailAddress sendAddress = new MailAddress(sendEmail);
                MailAddress receiveAddress = new MailAddress("XXXXXX@qq.com");
    
                //构造一个Email的Message对象 内容信息
                MailMessage mailMessage = new MailMessage(sendAddress, receiveAddress);
                mailMessage.Subject = "测试邮件" + DateTime.Now;
                mailMessage.SubjectEncoding = System.Text.Encoding.UTF8;
                mailMessage.Body = "测试邮件发送成功!!!";
                mailMessage.BodyEncoding = System.Text.Encoding.UTF8;
    
                //邮件发送方式  通过网络发送到smtp服务器
                smtpclient.DeliveryMethod = SmtpDeliveryMethod.Network;
    
                //如果服务器支持安全连接,则将安全连接设为true
                smtpclient.EnableSsl = true;
                try
                {
                    //是否使用默认凭据,若为false,则使用自定义的证书,就是下面的networkCredential实例对象
                    smtpclient.UseDefaultCredentials = false;
    
                    //指定邮箱账号和密码,需要注意的是,这个密码是你在QQ邮箱设置里开启服务的时候给你的那个授权码
                    NetworkCredential networkCredential = new NetworkCredential(sendEmail, sendpwd);
                    smtpclient.Credentials = networkCredential;
    
                    //发送邮件
                    smtpclient.Send(mailMessage);
                    Console.WriteLine("发送邮件成功");
    
                }
                catch (System.Net.Mail.SmtpException ex) { Console.WriteLine(ex.Message, "发送邮件出错"); }
                return "DLL调用成功!";
            }
        }
    }

    遇到的问题

          1.报错:

             解决办法:将安全连接设为true,如:smtpclient.EnableSsl = true;

          2.报错:mail from address must be same as authorization user

           解决办法:QQ邮箱设置里开启服务。如图:

           

    最后测试该方法成功,结果如图:

     

     

    更多详尽的资料可参考这个地址:http://blog.csdn.net/liyanwwww/article/details/5507498

  • 相关阅读:
    98.公共汽车
    100.选菜(动态规划)01背包
    102.愤怒的LJF
    96.老鼠的旅行(动态规划)
    95.(01背包)之小吃
    94.Txx考试
    93.数字三角形W(深搜)
    POJ 3352 Road Construction (边双连通分量)
    POJ 3114 Countries in War(强联通分量+Tarjan)
    POJ 3592 Instantaneous Transference(强联通分量 Tarjan)
  • 原文地址:https://www.cnblogs.com/AaronBear/p/8549648.html
Copyright © 2020-2023  润新知