2022年1月22日 星期六

[研究][ASP.NET][C#][WebForm]使用hotmail寄信 (System.Net.Mail)

[研究][ASP.NET][C#][WebForm]使用hotmail寄信 (System.Net.Mail)

2022-01-22
2022-06-22 補

********************************************************************************

Outlook.com 的 POP、IMAP 和 SMTP 設定
https://support.microsoft.com/zh-tw/office/outlook-com-%E7%9A%84-pop-imap-%E5%92%8C-smtp-%E8%A8%AD%E5%AE%9A-d088b986-291d-42b8-9564-9c414e2aa040

SMTP 伺服器名稱 smtp-mail.outlook.com

SMTP 埠 587

SMTP 加密:STARTTLS

********************************************************************************

2022-08-15補

hotmail 似乎做了某些調整,程式不能用了。調整疑似在2022/08/12, 8/13 或 8/14 調整的,上周四 or 五印象仍可用。

程式寄信回成功,但收不到信。用瀏覽器登入 hotmail,寄信,可以收到。

查知 SMTP 從 smtp-mail.outlook.com 變更為:伺服器名稱: smtp.office365.com,連接埠: 587,加密方法: STARTTLS;修改伺服器名稱和連接埠後測試 ( StartTLS 不知要如何改)。程式寄信回成功,但仍收不到信,暫時不知道還要如何改。

Google 查 SmtpClient 好像不支援 StartTLS。

********************************************************************************

Visual Studio 2022 + ASP.NET + C# + Web Application  + WebForm

using System;
using System.Net.Mail;

namespace WebApplication1
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                //  MailMessage ( FromEmailAddress, ToEmailAddress)
                MailMessage message = new MailMessage("名稱<XXX@hotmail.com>", "收件者信箱");//MailMessage(寄信者, 收信者)
                message.IsBodyHtml = true;
                message.BodyEncoding = System.Text.Encoding.UTF8;//E-mail編碼
                message.SubjectEncoding = System.Text.Encoding.UTF8;//E-mail編碼
                message.Priority = MailPriority.Normal;//設定優先權
                message.Subject = "Test3"; //E-mail主旨
                message.Body = "Test3";//E-mail內容

                SmtpClient MySmtp = new SmtpClient("smtp-mail.outlook.com");//設定gmail的smtp

                //System.Net.NetworkCredential(帳號,密碼),hotmail的帳號是整的Email,不是只有@前面的
                MySmtp.Credentials = new System.Net.NetworkCredential("XXX@hotmail.com", "密碼");
                
                MySmtp.EnableSsl = true;//開啟ssl
                MySmtp.Send(message);
                MySmtp = null;
                message.Dispose();
                Label1.Text = "Send !";
            }
            catch (Exception ex)
            {
                Label1.Text = "不明錯誤。";
                if (ex!=null)
                {
                    Label1.Text = ex.Message.ToString();
                }
            }
        }
    }
}

**********

2022-06-22補

如果收件者有多人,

MailMessage message = new MailMessage("XX網站<XXX@hotmail.com>", address);

改成

message.From = new MailAddress("XXX@hotmail.com", "XX網站", System.Text.Encoding.UTF8);
message.Subject = mysubject; //E-mail主旨 if (!string.IsNullOrEmpty(toAddressList.Trim())) { toAddressList = toAddressList.Replace(" ", ""); foreach (var item in toAddressList.Trim().Split(',', ';')) { //var to = new SecureMailAddress(item); //message.To.Add(new SecureMailAddress(item)); message.To.Add(new MailAddress(item)); } }

修改後結果

#region == public static string SendNoCertMailByHotmail(string mysubject, string myContent, string toAddressList, string ccAddress, string bccAddress) ==
private static string SendNoCertMailByHotmail(string mysubject, string myContent, string toAddressList, string ccAddress, string bccAddress)
{
    string localIP = Common.GetLocalIPv4(); // 傳回非 127.0.0.1、192.168.x.x 的 IP
    string sendMailResult = ""; //預設成功,回傳空字串
    try {
        //string emailContent = @"【此為系統自動發信,請勿直接回信。】<br />【若收到重複信不用理會,因Mail Server間沒有100%相容。】<br />" + myContent;
        //string emailContent = @"【此為系統自動發信,請勿直接回信。】<br />" + myContent;
        string emailContent = @"信件於 " + DateTime.Now.ToString() + " 寄出。<br />【此為系統自動發信,請勿直接回信。】<br />" + myContent;

        //  MailMessage ( FromEmailAddress, ToEmailAddress)
        //  MailMessage (寄信者Email, 收信者Email)
        //public MailMessage ();
        //public MailMessage (System.Net.Mail.MailAddress from, System.Net.Mail.MailAddress to);
        //public MailMessage (string from, string to);
        //public MailMessage (string from, string to, string subject, string body);
        if (toAddressList == "")
            return "沒有收件者";
        //MailMessage message = new MailMessage("XXX網站<XXX@hotmail.com>", address);
        message.From = new MailAddress("XXX@hotmail.com", "XXX網站", System.Text.Encoding.UTF8);
        message.Subject = mysubject; //E-mail主旨
        if (!string.IsNullOrEmpty(toAddressList.Trim()))
        {
            toAddressList = toAddressList.Replace(" ", "");
            foreach (var item in toAddressList.Trim().Split(',', ';'))
            {
                //var to = new SecureMailAddress(item);
                //message.To.Add(new SecureMailAddress(item));
                message.To.Add(new MailAddress(item));
            }
        }

        message.IsBodyHtml = true;
        message.BodyEncoding = System.Text.Encoding.UTF8;//E-mail編碼
        message.SubjectEncoding = System.Text.Encoding.UTF8;//E-mail編碼
        message.Priority = MailPriority.Normal;//設定優先權
        
        message.Subject = mysubject + "(" + localIP + ")" ; //E-mail主旨,非正式機加上IP,分辨一下開發機 or 測試機
        message.Body = emailContent;//E-mail內容
        // message.ReplyTo 過時
        message.ReplyToList.Add(new MailAddress("回信者@abcdef.com.tw", "XXX網站"));
        //public MailAddress (string address);
        //public MailAddress (string address, string displayName);
        //public MailAddress (string address, string displayName, System.Text.Encoding displayNameEncoding);
        //message.From = new MailAddress("XXX@hotmail.com", "XXX網站");
        //message.To.Add(address);
        //if (address != "")
        //    message.To.Add(address);
        //else
        //    return "沒有收件者";
        if (ccAddress!="")
            message.CC.Add(ccAddress);
        if (bccAddress !="")
            message.Bcc.Add(bccAddress);

        SmtpClient MySmtp = new SmtpClient("smtp-mail.outlook.com");//設定smtp

        //gmail的帳號密碼System.Net.NetworkCredential(帳號,密碼)
        MySmtp.Credentials = new System.Net.NetworkCredential("XXX@hotmail.com", " Nccst2016$");

        MySmtp.EnableSsl = true;//開啟ssl
        MySmtp.Send(message);
        MySmtp = null;
        message.Dispose();
        //Label1.Text = "成功。";
        //sendMailResult = "OK。已送出郵件" + DateTime.Now.ToString();
    }
    catch (Exception ex)
    {
        //throw;
        // 胡淯婷 或廠商 會亂填 Email 測試
        sendMailResult = "寄信給" + toAddressList + "失敗,不明錯誤。";
        if (ex != null)
        {
            sendMailResult = "寄信給" + toAddressList + "失敗。" + ex.Message.ToString();
        }
        return sendMailResult;
    }
    return sendMailResult;
    // --------------------------------------------------------------------------------
}
#endregion


(完)

相關

[研究] 用 Outlook 2010 收發 Hotmail / Outlook.com 信件(2016年)(一)

http://shaurong.blogspot.com/2016/01/outlook-2010-hotmail-outlookcom-2016.html


沒有留言:

張貼留言