C# 用SMTP加上GMail實作自動發信功能(在2016/05/05實測OK)

C# 用SMTP加上GMail實作自動發信功能(在2016/05/05實測OK)

C# 用SMTP加上GMail實作自動發信功能(在2016/05/05實測OK)

 

01.前置動作:(把Gmail的安全性調低,否則會發生 5.5.1 Authentication Required. 的錯誤!)
    修改網址 https://www.google.com/settings/security/lesssecureapps
    進入頁面之後選擇 安全性較低的應用程式存取權限 [啟用]

 

02.在專案上新增 SendEmail的類別

    /// <summary>
    /// 郵件發送類
    /// </summary>
    public class SendEmail
    {
        private MailMessage mailMessage = new MailMessage(); //產生實體一個郵件類

        #region 構造函數
        /// <summary>
        /// 構造函數
        /// </summary>
        /// <param name=”toAddresses”>收件人位址(多個以,號分開)</param>
        /// <param name=”fromAddress”>寄件者地址</param>
        /// <param name=”title”>主題</param>
        /// <param name=”body”>正文</param>
        public SendEmail(string toAddresses, string fromAddress, string title, string body)
            : this(toAddresses, fromAddress, “”, “”, title, body, false)
        {
        }

        /// <summary>
        /// 構造函數
        /// </summary>
        /// <param name=”toAddress”>收件人地址</param>
        /// <param name=”fromAddress”>寄件者地址</param>
        /// <param name=”toName”>收件人名字</param>
        /// <param name=”fromName”>寄件者姓名</param>
        /// <param name=”title”>主題</param>
        /// <param name=”body”>正文</param>
        /// <param name=”isBodyHtml”>正文是否為html格式</param>
        public SendEmail(string toAddress, string fromAddress, string toName, string fromName, string title, string body, bool isBodyHtml)
        {
            mailMessage.From = new MailAddress(fromAddress, fromName, Encoding.UTF8);
            if (toName.Equals(“”))
                mailMessage.To.Add(toAddress);
            else
                mailMessage.To.Add(new MailAddress(toAddress, toName, Encoding.UTF8));

            mailMessage.Subject = title;
            mailMessage.SubjectEncoding = Encoding.UTF8;

            mailMessage.Body = body;
            mailMessage.IsBodyHtml = isBodyHtml;
            mailMessage.BodyEncoding = Encoding.UTF8;
        }
        #endregion

        /// <summary>
        /// 設置SMTP,並且將郵件發送出去
        /// 所有參數都設置完成後再調用該方法
        /// </summary>
        /// <param name=”password”>寄件者密碼</param>
        /// <param name=”smtpHost”>SMTP伺服器地址</param>
        public void SetSmtp(string password, string smtpHost)
        {
            SetSmtp(mailMessage.From.Address, password, smtpHost, 25, false,false, MailPriority.Normal);
        }

        /// <summary>
        /// 設置SMTP,並且將郵件發送出去
        /// 所有參數都設置完成後再調用該方法
        /// </summary>
        /// <param name=”address”>寄件者位址(必須為真實有效的email位址)</param>
        /// <param name=”password”>寄件者密碼</param>
        /// <param name=”smtpHost”>SMTP伺服器地址</param>
        /// <param name=”smtpPort”>SMTP伺服器的埠</param>
        /// <param name=”isEnableSsl”>SMTP伺服器是否啟用SSL加密</param>
        /// <param name=”priority”>郵件的優先順序</param>
        public void SetSmtp(string address, string password, string smtpHost, int smtpPort, bool isEnableSsl, bool isCredentials, MailPriority priority)
        {
            SmtpClient smtp = new SmtpClient();
            smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
            smtp.Credentials = new NetworkCredential(address, password);
            smtp.Host = smtpHost;
            smtp.Port = smtpPort;
            smtp.EnableSsl = isEnableSsl;
            //–
            //jash add at 2016/05/05
            //smtp.Credentials = CredentialCache.DefaultNetworkCredentials;
            //smtp.UseDefaultCredentials = isCredentials;
            //–

            mailMessage.Priority = priority;
            smtp.Send(mailMessage); //發送郵件
        }

        #region //設置郵寄地址
        /// <summary>
        /// 設置更多收件人
        /// </summary>
        /// <param name=”toAddresses”>收件人地址</param>
        public void SetMoreToAddress(string toAddresses)
        {
            mailMessage.To.Add(toAddresses);
        }

        /// <summary>
        /// 設置更多收件人
        /// </summary>
        /// <param name=”toAddresses”>收件人地址</param>
        /// <param name=”toName”>收件人名字</param>
        public void SetMoreToAddress(string toAddress, string toName)
        {
            mailMessage.To.Add(new MailAddress(toAddress, toName, Encoding.GetEncoding(936)));
        }

        /// <summary>
        /// 設置抄送者(多個以,號分開)
        /// </summary>
        /// <param name=”ccAddresses”>抄送者地址</param>
        public void SetCarbonCopyFor(string ccAddresses)
        {
            mailMessage.CC.Add(ccAddresses);
        }

        /// <summary>
        /// 設置抄送者
        /// </summary>
        /// <param name=”ccAddress”>抄送者地址</param>
        /// <param name=”ccName”>抄送者名字</param>
        public void SetCarbonCopyFor(string ccAddress, string ccName)
        {
            mailMessage.Bcc.Add(new MailAddress(ccAddress, ccName, Encoding.GetEncoding(936)));
        }

        /// <summary>
        /// 設置密送者(多個以,號分開)
        /// </summary>
        /// <param name=”bccAddresses”>密送者</param>
        public void SetBlindCarbonCopyFor(string bccAddresses)
        {
            mailMessage.Bcc.Add(bccAddresses);
        }

        /// <summary>
        /// 設置密送者
        /// </summary>
        /// <param name=”bccAddress”>密送者</param>
        /// <param name=”bccName”>密送者名字</param>
        public void SetBlindCarbonCopyFor(string bccAddress, string bccName)
        {
            mailMessage.Bcc.Add(new MailAddress(bccAddress, bccName, Encoding.GetEncoding(936)));
        }
        #endregion

        #region 添加附件
        /// <summary>
        /// 添加附件(自動識別檔案類型)
        /// </summary>
        /// <param name=”fileName”>單個檔的路徑</param>
        public void Attachments(string fileName)
        {
            mailMessage.Attachments.Add(new Attachment(fileName));
        }

        /// <summary>
        /// 添加附件(預設為富文本RTF格式)
        /// </summary>
        /// <param name=”fileName”>單個檔的路徑</param>
        public void AttachmentsForRTF(string fileName)
        {
            mailMessage.Attachments.Add(new Attachment(fileName, MediaTypeNames.Application.Rtf));
        }
        #endregion
    }

 

03.最後才是實作傳送郵件程式

    private void f3_button7_Click(object sender, EventArgs e)//測試連線
    {
        //簡簡單單透過 gmail 去寄送 Mail,發生 5.5.1 Authentication Required. 的錯誤! 
        //修改網址 https://www.google.com/settings/security/lesssecureapps
        SendEmail SendEmail_test = new SendEmail(f3_textBox8.Text, f3_textBox4.Text, “”, f3_textBox3.Text, f3_textBox7.Text, f3_richTextBox1.Text, false);
        try
        {
            SendEmail_test.Attachments(“C:\\Users\\RD\\Desktop\\note.txt”);
            SendEmail_test.Attachments(“C:\\Users\\RD\\Desktop\\SendEmail.cs”);
            SendEmail_test.SetSmtp(f3_textBox4.Text, f3_textBox6.Text, f3_textBox1.Text, Convert.ToInt32(f3_textBox2.Text, 10), f3_checkBox2.Checked, f3_checkBox1.Checked, MailPriority.Normal);
            MessageBox.Show(“OK”);
        }
        catch
        {
            MessageBox.Show(“Fail”);
        }
    }

 

 

 

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *