先表明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 = "xxx@outlook.com"; string passWord = "xxxxxx"; string mailTo = "xxxx@qq.com"; 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)設置為您子域名的名稱。(例如,如果您的電子郵件地址是
contact@mail.example.com
,則為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值包含中文符號,有點問題