先表明Outlook的參數:網址:https://support.office.com/zh-cn/article/Outlook-com-%E7%9A%84-POP%E3%80%81IMAP-%E5%92%8C-SMTP-%E8%AE%BE%E7%BD%AE-d088b986-291d-42b8-9564-9c414e2aa040
POP 通路是被預設禁用的。 若要啟用 POP 通路,請參閱在 Outlook.com 中啟用 POP 通路。
IMAP 伺服器名稱outlook.office365.com
IMAP 端口 993
IMAP 加密方法TLS
POP 伺服器名稱outlook.office365.com
POP 端口 995
POP 加密方法 TLS
SMTP 伺服器名稱smtp.office365.com
SMTP 端口 587
SMTP 加密方法 STARTTLS
安裝nuget包:因為使用的core項目,是以引用了ReturnTrue.AspNetCore.Net.SmtpClient包(SmtpClient)。
官方指定代碼:
Yes, I am using SMTP client submission.
This is the c# code:
var smtpClient = new SmtpClient()
{
Host = "smtp.office365.com",
Port = 587,
UseDefaultCredentials = false,
EnableSsl = true
};
smtpClient.Credentials = new NetworkCredential("*** 發送郵箱賬号 ***", "密碼");
var message = new MailMessage
{
From = new MailAddress("*** 發送郵箱賬号 ***"),
Sender = new MailAddress("*** 接收郵箱賬号 ***"),
Subject = "Test mail",
IsBodyHtml = false
};
message.To.Add("*** 接收郵箱賬号 ***");
message.Body = "This is a test mail. ";
smtpClient.Send(message);
上述代碼運作無誤,因為一開始沒有找到該代碼,導緻寫的代碼出現以下異常:
Message=The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM [HK0P153CA0010.APCP153.PROD.OUTLOOK.COM]
源代碼:這是我之前寫的代碼,實際上是一樣的,但是一開始一直報上述錯誤(原因就是在綁定賬号密碼前要設定UseDefaultCredentials = false)
string smtpServer = "smtp.office365.com";
int smtpPort = 587;
string mailFrom = "[email protected]";
string passWord = "xxxxxx";
string mailTo = "[email protected]";
SmtpClient smtpClient = new SmtpClient(smtpServer, smtpPort);
smtpClient.UseDefaultCredentials = false;//寫到這裡不報錯
smtpClient.Credentials = new NetworkCredential(mailFrom, passWord);
smtpClient.EnableSsl = true;
//smtpClient.UseDefaultCredentials = false;//寫到這裡會報錯,必須在賬号密碼綁定前寫。
MailAddress mailAddressFrom = new MailAddress(mailFrom);
MailAddress mailAddressTo = new MailAddress(mailTo, "xx的QQ郵箱");
MailMessage mailMessage = new MailMessage(mailAddressFrom, mailAddressTo);
mailMessage.Subject = "用c#測試發送郵件";
mailMessage.Body = "這是一次測試發送,發送人用的outlook郵箱";
mailMessage.BodyEncoding = Encoding.UTF8;
smtpClient.Send(mailMessage);
代碼很短,單想到執行個體化對象的順序還會産生這樣的結果,以後要注意了。
後續事項:域名未設定 SPF 解析記錄
漏洞描述
SPF 記錄是一種域名服務(DNS)記錄,用于辨別哪些郵件伺服器可以代表您的域名發送電子郵件。 SPF 記錄的目的是為了防止垃圾郵件發送者在您的域名上,使用僞造的發件人位址發送郵件。
若您未對您的域名添加 SPF 解析記錄,則黑客可以仿冒以該域名為字尾的郵箱,來發送垃圾郵件。
修複方案
在您的 DNS 服務提供商處,為您的域名添加一條 TXT 記錄:
- 将主機字段(Host)設定為您子域名的名稱。(例如,如果您的電子郵件位址是
。)如果不使用子域名,則将其設為mail
。@
- 用您的 SPF 記錄填寫 TXT 值字段。例如
v=spf1 a mx include:secureserver.net ~all
- 對應的阿裡雲方案連結:https://help.aliyun.com/knowledge_detail/37532.html?spm=5176.13394938.0.0.79dc2e17bQeEkN 它那個txt值包含中文符号,有點問題