寄信程式或叫轉信程式

 

由於有一些網路前輩已經寫了程式範例,

所以我就列出在程式中設定smtp需要注意的地方。

先列出程式我是以hotmail為例,Gmail設定也是大同小異的。

using System;
using System.Text;
using System.Net.Mail;

namespace SendMail
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                //***寫信***
                System.Net.Mail.MailMessage em = new System.Net.Mail.MailMessage();

                em.From = new System.Net.Mail.MailAddress("寄件信箱", "寄件者的顯示名稱", System.Text.Encoding.UTF8);
                em.To.Add(new System.Net.Mail.MailAddress("收件信箱"));    //收件者
                em.Subject = "Subject";     //信件主題 
                em.SubjectEncoding = System.Text.Encoding.UTF8;
                em.Body = "Body";            //內容 
                em.BodyEncoding = System.Text.Encoding.UTF8;
                em.IsBodyHtml = true;      //信件內容是否使用HTML格式

                //***寄信設定***
                System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
                
                //登入帳號認證
                smtp.Credentials = new System.Net.NetworkCredential("寄件信箱", "密碼");
                smtp.Port = 587;
                smtp.EnableSsl = true;   //啟動SSL 
                smtp.Host = "smtp-mail.outlook.com";   //SMTP伺服器

                //***寄出***
                smtp.Send(em);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            Console.WriteLine("Finish");
            Console.ReadKey();
        }
    }
}

1.由上面程式範例知道你要寄信時要先寫信,

把一些寄件信箱、收件信箱、主題、內容、寄件者名稱等都寫好。

2.再來就是做寄件前的smtp設定,設定寄件信箱、密碼、port number與smtphost等等。

3.當設定好之後使用smtp.Send(),即可寄信出去。

另外注意的是,使用gmail寄信時,請調低安全性設定,

否則Gmail會很貼心地幫你擋下來喔。

5.使用outlook時記得要開啟SSL協定EnableSsl=true,

否則你也無法寄信出去,以下是未開啟SSL協定時的MVC錯誤訊息,請參考。

「SMTP 伺服器需要安全連接,或用戶端未經驗證。 伺服器回應為: 5.7.0 Must issue a STARTTLS command first

描述: 在執行目前 Web 要求的過程中發生未處理的例外狀況。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。 

例外狀況詳細資訊: System.Net.Mail.SmtpException: SMTP 伺服器需要安全連接,或用戶端未經驗證。 伺服器回應為: 5.7.0 Must issue a STARTTLS command first」

 

另外再附上gmail與傳送附件內嵌圖片範例

using System;
using System.Text;
using System.Net.Mail;

namespace SendMail
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                //***寫信***
                System.Net.Mail.MailMessage em = new System.Net.Mail.MailMessage();

                em.From = new System.Net.Mail.MailAddress("寄件信箱", "寄件者的顯示名稱", System.Text.Encoding.UTF8);
                em.To.Add(new System.Net.Mail.MailAddress("收件信箱"));    //收件者
                em.Subject = "takephotos";     //信件主題 
                em.SubjectEncoding = System.Text.Encoding.UTF8;
                em.Body = "<img src=\"TJCOS-20151016-14-40-44.png\" />";            //內容 
                em.BodyEncoding = System.Text.Encoding.UTF8;
                em.IsBodyHtml = true;     //信件內容是否使用HTML格式

                // 設定附件檔案(Attachment)

                string strFilePath = @"C:\Users\tt232\Desktop\MyKinectPhoto\TJCOS-20151016-14-40-44.png";

                System.Net.Mail.Attachment attachment1 =
                   new System.Net.Mail.Attachment(strFilePath);
                attachment1.Name = System.IO.Path.GetFileName(strFilePath);
                attachment1.NameEncoding = Encoding.GetEncoding("utf-8");
                attachment1.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;

                // 設定該附件為一個內嵌附件(Inline Attachment)
                attachment1.ContentDisposition.Inline = true;
                attachment1.ContentDisposition.DispositionType =
                   System.Net.Mime.DispositionTypeNames.Inline;

                em.Attachments.Add(attachment1);

                //***寄信設定***
                System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();

                //登入帳號認證
                smtp.Credentials = new System.Net.NetworkCredential("寄件信箱", "密碼");
                smtp.Port = 587;
                smtp.EnableSsl = true;   //啟動SSL 
                smtp.Host = "smtp.gmail.com";   //SMTP伺服器

                //***寄出***
                smtp.Send(em);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            Console.WriteLine("Finish");
            Console.ReadKey();
        }
    }
}

唯要注意的是使用內嵌圖片時,其檔名要指定正確。

 

參考資料:

使用 Outlook.com 設定電子郵件應用程式

管理您的帳戶存取權和安全性設定

使用 POP 或 IMAP 發送郵件時遇到問題

smtp.live.com - mailbox unavailable. The server response was: 5.7.3 requested action aborted; user not authenticated

[ASP.NET]筆記文-透過C#及Gmail帳號來發送Email