C# QQ郵箱發郵件
阿新 • • 發佈:2019-02-20
前提準備:
QQ郵箱開通 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務
使用STMP服務開通時給的授權密碼。
引數配置:
<emailsmtp>smtp.qq.com</emailsmtp>
<emailport>587</emailport>
<emailfrom>[email protected]</emailfrom>
<emailusername>[email protected]</emailusername>
<emailpassword>tlbgkqvozsccchgi</emailpassword>
程式碼:
public void sendMail(string smtpHost, int smtpPort, MailPriority level, string userName, string pwd, string nickName, string strfrom, string strto, string cc, string bcc, string subj, string bodys, string attchmentFiles) { SmtpClient smtp = new SmtpClient(); //例項化一個SmtpClient smtp.DeliveryMethod = SmtpDeliveryMethod.Network; //將smtp的出站方式設為 Network smtp.EnableSsl = true; //smtp伺服器是否啟用SSL加密 smtp.Host = smtpHost; //指定 smtp 伺服器地址 smtp.Port = smtpPort; //指定 smtp 伺服器的埠,預設是25,如果採用預設埠,可省去 #region //如果你的SMTP伺服器不需要身份認證,則使用下面的方式,不過,目前基本沒有不需要認證的了 //smtp.UseDefaultCredentials = true; #endregion //如果需要認證,則用下面的方式 smtp.Credentials = new NetworkCredential(userName, pwd); MailMessage mMailMessage = new MailMessage(); //例項化一個郵件類 mMailMessage.Priority = level; //郵件的優先順序,分為 Low, Normal, High,通常用 Normal即可 #region 發件人 //收件方看到的郵件來源; //第一個引數是發信人郵件地址 //第二引數是發信人顯示的名稱 //第三個引數是第二個引數所使用的編碼,如果指定不正確,則對方收到後顯示亂碼 //936是簡體中文的codepage值 //注:上面的郵件來源,一定要和你登入郵箱的帳號一致,否則會認證失敗 mMailMessage.From = new MailAddress(strfrom, nickName, Encoding.GetEncoding(936)); //ReplyTo 表示對方回覆郵件時預設的接收地址,即:你用一個郵箱發信,但卻用另一個來收信 //後兩個引數的意義,同 From 的意義 //mm.ReplyTo = new MailAddress("[email protected]", "我的接收郵箱", Encoding.GetEncoding(936)); //from必填,sender為使用,顯示發件人地址是from //mm.Sender = new MailAddress("[email protected]", "郵件傳送者", Encoding.GetEncoding(936)); #endregion #region 抄送者 //郵件的抄送者,支援群發,多個郵件地址之間用半形逗號分開 if (!string.IsNullOrEmpty(cc)) { mMailMessage.CC.Add(cc); } //當然也可以用全地址,如下: //mm.CC.Add(new MailAddress("[email protected]", "抄送者A", Encoding.GetEncoding(936))); //mm.CC.Add(new MailAddress("[email protected]", "抄送者B", Encoding.GetEncoding(936))); //mm.CC.Add(new MailAddress("[email protected]", "抄送者C", Encoding.GetEncoding(936))); #endregion #region 密送者 //郵件的密送者,支援群發,多個郵件地址之間用半形逗號分開 if (!string.IsNullOrEmpty(bcc)) { mMailMessage.Bcc.Add(bcc); } //當然也可以用全地址,如下: //可以任意設定,此資訊包含在郵件頭中,但並不會驗證有效性,也不會顯示給收件人 //說實話,我不知道有啥實際作用,大家可不理會,也可不寫此項 //mm.Bcc.Add(new MailAddress("[email protected]", "密送者D", Encoding.GetEncoding(936))); //mm.Bcc.Add(new MailAddress("[email protected]", "密送者E", Encoding.GetEncoding(936))); #endregion #region 接收者 //郵件的接收者,支援群發,多個地址之間用半形逗號分開 mMailMessage.To.Add(strto); //當然也可以用全地址新增 //mm.To.Add(new MailAddress("[email protected]", "接收者g", Encoding.GetEncoding(936))); //mm.To.Add(new MailAddress("[email protected]", "接收者h", Encoding.GetEncoding(936))); #endregion #region 標題 mMailMessage.Subject = subj; //郵件標題 // 這裡非常重要,如果你的郵件標題包含中文,這裡一定要指定,否則對方收到的極有可能是亂碼。 // 936是簡體中文的pagecode,如果是英文標題,這句可以忽略不用 mMailMessage.SubjectEncoding = Encoding.GetEncoding(936); #endregion #region 正文 //郵件正文是否是HTML格式 mMailMessage.IsBodyHtml = true; //郵件正文的編碼,設定不正確,接收者會收到亂碼 mMailMessage.BodyEncoding = Encoding.GetEncoding(936); //郵件正文 mMailMessage.Body = bodys; // Guid.NewGuid() 防止重複內容,被SMTP伺服器拒絕接收郵件 //mm.Body = mm.Body + Guid.NewGuid(); #endregion #region 附件 //新增附件,第二個引數,表示附件的檔案型別,可以不用指定 //mm.Attachments.Add(new Attachment(@"d:a.doc", System.Net.Mime.MediaTypeNames.Application.Rtf)); //可以新增多個附件 //mMailMessage.Attachments.Add(new Attachment(@"d:b.doc")); if (!string.IsNullOrEmpty(attchmentFiles)) { m_Attachments = null;//clear foreach (string file in attchmentFiles.Split(',')) { if (file != "") { //AddAttachment(file);Error mMailMessage.Attachments.Add(new Attachment(@file)); } } if (m_Attachments != null && m_Attachments.Count > 0) { foreach (Attachment attachment in m_Attachments) mMailMessage.Attachments.Add(attachment); } } #endregion smtp.Send(mMailMessage); //smtp.SendAsync(mMailMessage, null); }