郵箱發(fā)送今天終于解決了,從不會到會用了3個晚上才終于解決了,有好多問題都不是代碼的問題,而是郵箱的設置上的問題。下面我一一的講解一下。
1.郵箱發(fā)送的原理,我使用圖片來解釋
左邊的[email protected]是發(fā)送的郵箱(下面我就是用a郵箱指代),右邊的[email protected]是接收的郵箱(下面我就是用b郵箱指代)。
1)、郵箱a發(fā)送到他自己的smtp服務器上,如:郵箱a是Outlook上注冊的郵箱,那么郵箱a的郵件就發(fā)送到outlook上的smtp服務器上
2)、通過smtp服務器的通訊規(guī)則,進行傳送到郵箱b的smtp服務器上,有smtp服務器再發(fā)送到存儲設備上,再發(fā)送到pop3服務器上,最后發(fā)給郵箱b
注:最主要的是1),在這里主要講解發(fā)送。
2.下面是發(fā)送郵件的類
using System;using System.Linq;using System.Net.Mail;using System.Text;namespace Micua.Infrastructure.Utility{ /// <summary> /// 郵件發(fā)送助手類 /// </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 = "發(fā)送的郵箱"; private readonly static string SmtpDisplayName = "測試郵箱123"; private readonly static string SmtpPassWord = "授權碼的位置"; /// <summary> /// 發(fā)送郵件到指定收件人 /// </summary> /// <remarks> /// 2013-11-18 18:55 Created By iceStone /// </remarks> /// <param name="to">收件人地址</param> /// <param name="subject">主題</param> /// <param name="mailBody">正文內(nèi)容(支持HTML)</param> /// <param name="copyTos">抄送地址列表</param> /// <returns>是否發(fā)送成功</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> /// 發(fā)送郵件到指定收件人 /// </summary> /// <remarks> /// 2013-11-18 18:55 Created By iceStone /// </remarks> /// <param name="tos">收件人地址列表</param> /// <param name="subject">主題</param> /// <param name="mailBody">正文內(nèi)容(支持HTML)</param> /// <param name="ccs">抄送地址列表</param> /// <param name="bccs">密件抄送地址列表</param> /// <param name="priority">此郵件的優(yōu)先級</param> /// <param name="attachments">附件列表</param> /// <returns>是否發(fā)送成功</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; //創(chuàng)建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)); } //創(chuàng)建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 //{ //發(fā)送郵件 client.Send(message); //client.SendAsync(message,DateTime.Now.ToString()); //client.Dispose(); //message.Dispose(); return true; //} //catch (Exception) //{ // throw; //} } }}
主要是改前面的幾個私有靜態(tài)變量,下面我仔細講解一下,我以網(wǎng)易郵箱為例,自己隨便編個郵箱([email protected],授權碼:ceshi123)
private readonly static string SmtpServer = "smtp的服務器地址";
填寫smtp的地址,如:網(wǎng)易的smtp服務器地址是smtp.163.comprivate readonly static int SmtpServerPort = 25;
這個不用改,這個是端口號private readonly static bool SmtpEnableSsl = false;
這個不用改,如果設置為true的話,上面的端口號就要改,改成好像是465,這個我不確定private readonly static string SmtpUsername = "發(fā)送的郵箱";
發(fā)送的郵箱,如:網(wǎng)易的郵箱[email protected] readonly static string SmtpDisplayName = "測試郵箱123";
這個地方自己可以隨便設置一下,看看是什么效果private readonly static string SmtpPassword = "授權碼的位置";
這個最重要,我最后花了大量的時間就在這上面,授權碼就是第三方客戶端登錄時需要輸入的,首先就需要在郵箱里進行設置,這個和代碼就沒有什么關系了,下面我重點講解。
最后在調(diào)用這個類就可以了。
3.如何有郵箱的授權碼
比如網(wǎng)易郵箱:你可以百度一下,也可以按照我的大致思路進行設置,不同的郵箱有不同的設置,基本上就是登錄網(wǎng)頁郵箱,點擊設置,找到有關于smtp服務的設置,就可以了。
注:QQ郵箱的我進行設置,但是不行,我使用的是網(wǎng)易的可以,不知道別的行不行,大家可以試一下,有什么不懂得可以給我留言,如果大家知道如何設置qq郵箱的,可以給我說一下,讓我也學習一下,謝謝大家了。希望這篇文章對你有所幫助。
|
新聞熱點
疑難解答