首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

WPF MailKit 發送郵件失敗排查:QQ 郵箱 SMTP 配置檢查清單

     編輯:程式設計綜合問答

常見失敗原因

  1. 未開啟 SMTP 服務:QQ 郵箱 設置 → 賬號 → 開啟 POP3/SMTP/IMAP,生成授權碼。
  2. 端口/加密不匹配:
    • 465 : SSL 隱式加密 (SecureSocketOptions.SslOnConnect)
    • 587 : STARTTLS 顯式升級 (SecureSocketOptions.StartTls)
  3. 授權碼錯誤:使用生成的 16 位授權碼,而非登錄密碼。
  4. 發件人地址不匹配:message.From 必須與授權碼對應的郵箱一致。
  5. 異步發送無異常處理:SendAsync 異常需訂閱 SendCompleted 事件或改用 Send 同步捕獲。

修正代碼

using MailKit.Net.Smtp;
using MimeKit;

public void SendMail() {
    var message = new MimeMessage();
    message.From.Add(new MailboxAddress("發件人", "654321@qq.com"));
    message.To.Add(new MailboxAddress("收件人", "123456@qq.com"));
    message.Subject = "SUBJECT SUBJECT";
    message.Body = new TextPart("plain") { Text = "Body Body" };

    using (var client = new SmtpClient()) {
        client.Connect("smtp.qq.com", 465, SecureSocketOptions.SslOnConnect);
        client.Authenticate("654321@qq.com", "授權碼"); // 非登錄密碼
        client.Send(message);
        client.Disconnect(true);
    }
}

調試技巧

  • 啟用 client.ServerCertificateValidationCallback = (s,c,h,e) => true; 忽略證書驗證(僅測試)。
  • 捕獲 SmtpCommandException、SmtpProtocolException 打印詳細錯誤碼。
  • 使用 Telnet 測試連通性:telnet smtp.qq.com 465。

替代方案

若 SMTP 受限,可對接 HTTP API 發信服務(SendGrid、阿里雲郵件推送、郵件推送),可靠性更高。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved