先代表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-9c414e2aa040html
POP 訪問是被默認禁用的。 若要啓用 POP 訪問,請參閱在 Outlook.com 中啓用 POP 訪問。c#
IMAP 服務器名稱outlook.office365.com服務器
IMAP 端口 993測試
IMAP 加密方法TLSui
POP 服務器名稱outlook.office365.com阿里雲
POP 端口 995加密
POP 加密方法 TLSspa
SMTP 服務器名稱smtp.office365.com.net
SMTP 端口 587code
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