1. 程式人生 > >C# QQ郵箱發郵件

C# QQ郵箱發郵件

前提準備:

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);
        }