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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM