昨天使用了.Net通過smtp發送郵件的方式發送了一封郵件到自己的QQ郵箱,但是發送成功后并沒有提示郵箱收到新的郵件,而且去收件箱里面也沒有新增的郵件。
這讓本人覺得奇怪,所以就覺得是否被當作垃圾郵件過濾了,所以就點擊垃圾箱看看,果真如此,QQ郵箱過濾了,當作垃圾郵件處理。
所以馬上在網上找了一下,終于找到了方法了。
問題所在:
對方郵箱服務器判斷:對于來歷不明的軟件發的郵件,郵箱服務器都可能認為是垃圾郵件,直接把它過濾掉,這是郵件接收方的過濾條件,我們無法改變的事實。
解決方法:
1.要使用自定義驗證機制的system.net.mail類發送。不要用system.web.mail類發送,通常后者發送的郵件都會被當垃圾郵件,這是跟驗證機制和有關。
2.要聲明郵件地址和頭信息(msg.Headers.Add("X-Mailer", "Microsoft Outlook ExPRess 6.00.2900.2869");披上outlook的馬甲)
3.特殊情況,就是可能有些服務器在你已經披上合法的馬甲后還是會當作垃圾郵箱處理,如網易,那是因為你的郵件內容可能存在一些,敏感的字眼,或者違法的信息導致的。
發送郵件的代碼:
/// <summary> /// 發送郵件 /// </summary> /// <param name="Subject">主題</param> /// <param name="Body">郵件內容</param> /// <param name="To">對方郵箱</param> /// <param name="MailFrom">發件人</param> /// <param name="MailFromName">郵件顯示發送人的名稱</param> /// <param name="MailDomain">服務器地址</param> /// <param name="MailServerUserName">用戶名和密碼</param> /// <param name="MailServerPassWord">密碼</param> /// <returns></returns> public bool Send(string Subject, string Body, string To, string MailFrom, string MailFromName, string MailDomain, string MailServerUserName, string MailServerPassWord) { try { MailMessage msg = new MailMessage(); msg.From = new MailAddress(MailFrom, MailFromName); msg.To.Add(new MailAddress(To, To)); msg.Subject = Subject; msg.Body = Body; msg.IsBodyHtml = true; msg.Priority = MailPriority.Normal; msg.SubjectEncoding = System.Text.Encoding.UTF8; msg.BodyEncoding = System.Text.Encoding.UTF8; //不被當作垃圾郵件的關鍵代碼--Begin msg.Headers.Add("X-Priority", "3"); msg.Headers.Add("X-MSMail-Priority", "Normal"); msg.Headers.Add("X-Mailer", "Microsoft Outlook Express 6.00.2900.2869"); //本文以outlook名義發送郵件,不會被當作垃圾郵件 msg.Headers.Add("X-MimeOLE", "Produced By Microsoft MimeOLE V6.00.2900.2869"); msg.Headers.Add("ReturnRece然后再試著發一封郵件到QQ郵箱,到126郵箱都可以接收。
新聞熱點
疑難解答