郵箱發送今天終於解決了,從不會到會用了3個晚上才終於解決了,有好多問題都不是代碼的問題,而是郵箱的設置上的問題。下麵我一一的講解一下。 1.郵箱發送的原理,我使用圖片來解釋 左邊的[email protected]是發送的郵箱(下麵我就是用a郵箱指代),右邊的[email protected]是接收
郵箱發送今天終於解決了,從不會到會用了3個晚上才終於解決了,有好多問題都不是代碼的問題,而是郵箱的設置上的問題。下麵我一一的講解一下。
1.郵箱發送的原理,我使用圖片來解釋
左邊的[email protected]是發送的郵箱(下麵我就是用a郵箱指代),右邊的[email protected]是接收的郵箱(下麵我就是用b郵箱指代)。
1)、郵箱a發送到他自己的smtp伺服器上,如:郵箱a是outlook上註冊的郵箱,那麼郵箱a的郵件就發送到outlook上的smtp伺服器上
2)、通過smtp伺服器的通訊規則,進行傳送到郵箱b的smtp伺服器上,有smtp伺服器再發送到存儲設備上,再發送到pop3伺服器上,最後發給郵箱b
註:最主要的是1),在這裡主要講解發送。
2.下麵是發送郵件的類
using System; using System.Linq; using System.Net.Mail; using System.Text; namespace Micua.Infrastructure.Utility { /// <summary> /// 郵件發送助手類 /// </summary> /// <remarks> /// 2013-11-18 18:56 Created By iceStone /// </remarks> public static class MailHelper { private readonly static string SmtpServer = "smtp的伺服器地址"; //smtp.wedn.net private readonly static int SmtpServerPort = 25; private readonly static bool SmtpEnableSsl = false; private readonly static string SmtpUsername = "發送的郵箱"; private readonly static string SmtpDisplayName = "測試郵箱123"; private readonly static string SmtpPassword = "授權碼的位置"; /// <summary> /// 發送郵件到指定收件人 /// </summary> /// <remarks> /// 2013-11-18 18:55 Created By iceStone /// </remarks> /// <param name="to">收件人地址</param> /// <param name="subject">主題</param> /// <param name="mailBody">正文內容(支持HTML)</param> /// <param name="copyTos">抄送地址列表</param> /// <returns>是否發送成功</returns> public static bool Send(string to, string subject, string mailBody, params string[] copyTos) { return Send(new[] { to }, subject, mailBody, copyTos, new string[] { }, MailPriority.Normal); } /// <summary> /// 發送郵件到指定收件人 /// </summary> /// <remarks> /// 2013-11-18 18:55 Created By iceStone /// </remarks> /// <param name="tos">收件人地址列表</param> /// <param name="subject">主題</param> /// <param name="mailBody">正文內容(支持HTML)</param> /// <param name="ccs">抄送地址列表</param> /// <param name="bccs">密件抄送地址列表</param> /// <param name="priority">此郵件的優先順序</param> /// <param name="attachments">附件列表</param> /// <returns>是否發送成功</returns> /// <exception cref="System.ArgumentNullException">attachments</exception> public static bool Send(string[] tos, string subject, string mailBody, string[] ccs, string[] bccs, MailPriority priority, params Attachment[] attachments) { if (attachments == null) throw new ArgumentNullException("attachments"); if (tos.Length == 0) return false; //創建Email實體 var message = new MailMessage(); message.From = new MailAddress(SmtpUsername, SmtpDisplayName); message.Subject = subject; message.Body = mailBody; message.BodyEncoding = Encoding.UTF8; message.IsBodyHtml = true; message.Priority = priority; //插入附件 foreach (var attachment in attachments) { message.Attachments.Add(attachment); } //插入收件人地址,抄送地址和密件抄送地址 foreach (var to in tos.Where(c => !string.IsNullOrEmpty(c))) { message.To.Add(new MailAddress(to)); } foreach (var cc in ccs.Where(c => !string.IsNullOrEmpty(c))) { message.CC.Add(new MailAddress(cc)); } foreach (var bcc in bccs.Where(c => !string.IsNullOrEmpty(c))) { message.CC.Add(new MailAddress(bcc)); } //創建SMTP客戶端 var client = new SmtpClient { Host = SmtpServer, Credentials = new System.Net.NetworkCredential(SmtpUsername, SmtpPassword), DeliveryMethod = SmtpDeliveryMethod.Network, EnableSsl = SmtpEnableSsl, Port = SmtpServerPort }; //client.SendCompleted += Client_SendCompleted; //try //{ //發送郵件 client.Send(message); //client.SendAsync(message,DateTime.Now.ToString()); //client.Dispose(); //message.Dispose(); return true; //} //catch (Exception) //{ // throw; //} } } }
主要是改前面的幾個私有靜態變數,下麵我仔細講解一下,我以網易郵箱為例,自己隨便編個郵箱([email protected],授權碼:ceshi123)
private readonly static string SmtpServer = "smtp的伺服器地址";
填寫smtp的地址,如:網易的smtp伺服器地址是smtp.163.com private readonly static int SmtpServerPort = 25;
這個不用改,這個是埠號 private readonly static bool SmtpEnableSsl = false;
這個不用改,如果設置為true的話,上面的埠號就要改,改成好像是465,這個我不確定 private readonly static string SmtpUsername = "發送的郵箱";
發送的郵箱,如:網易的郵箱[email protected] private readonly static string SmtpDisplayName = "測試郵箱123";
這個地方自己可以隨便設置一下,看看是什麼效果 private readonly static string SmtpPassword = "授權碼的位置";
這個最重要,我最後花了大量的時間就在這上面,授權碼就是第三方客戶端登錄時需要輸入的,首先就需要在郵箱里進行設置,這個和代碼就沒有什麼關係了,下麵我重點講解。
最後在調用這個類就可以了。
3.如何有郵箱的授權碼
比如網易郵箱:你可以百度一下,也可以按照我的大致思路進行設置,不同的郵箱有不同的設置,基本上就是登錄網頁郵箱,點擊設置,找到有關於smtp服務的設置,就可以了。
註:qq郵箱的我進行設置,但是不行,我使用的是網易的可以,不知道別的行不行,大家可以試一下,有什麼不懂得可以給我留言,如果大家知道如何設置qq郵箱的,可以給我說一下,讓我也學習一下,謝謝大家了。希望這篇文章對你有所幫助。