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

Java 郵件發送實戰:QQ/163 郵箱 SMTP 配置與常見錯誤碼詳解

     編輯:Java 綜合教學

Java 郵件發送實戰:QQ/163 郵箱 SMTP 配置與常見錯誤碼詳解

JavaMail API 是發送郵件的標準工具。本文提供基於 SSL 的完整發送代碼,並總結 QQ/163 郵箱的關鍵配置差異與高頻錯誤碼排查指南。

核心依賴

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>

通用發送工具類(支援 QQ/163 切換)

public class MailUtil {
    public static String send(String username, String authCode, String from,
                              String to, String subject, String content, String host) {
        Properties props = new Properties();
        props.put("mail.smtp.host", host);           // smtp.qq.com / smtp.163.com
        props.put("mail.smtp.port", "465");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.auth", "true");
        props.put("mail.transport.protocol", "smtp");

        Session session = Session.getInstance(props, new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, authCode);
            }
        });

        try {
            MimeMessage msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(from));
            msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
            msg.setSubject(subject, "UTF-8");
            msg.setText(content, "UTF-8");
            msg.setSentDate(new Date());
            Transport.send(msg);
            return "SUCCESS";
        } catch (MessagingException e) {
            return e.getMessage();
        }
    }
}

三大必備前置條件

  1. 開啟 SMTP/POP3/IMAP 服務:郵箱設置 → 客戶端授權 → 開啟對應協議。
  2. 使用授權碼而非登錄密碼:開啟服務後生成的 16 位授權碼作為 authCode 參數。
  3. 切換郵箱必改 host:QQ → smtp.qq.com,163 → smtp.163.com。

高頻錯誤碼速查表

代碼含義排查方向
535認證失敗授權碼過期/錯誤、用戶名錯誤、未開啟 SMTP
550 DT:SPM垃圾郵件特徵優化正文內容、添加退訂鏈接、控制發送頻率
421 HL:ICC並發連接超限降低並發數、增加發送間隔
451 DT:SPM臨時拒收兩分鐘後重試、調整內容或發送環境
554 IP in blacklistIP 被封禁檢查 IP 信譽、更換發送 IP、聯繫郵箱服務商
552附件/大小超限壓縮附件、分卷發送、避免禁用後綴

進階功能擴展

  • 群發:msg.setRecipients(Message.RecipientType.BCC, ...) 隱藏收件人。
  • HTML 內容:msg.setContent(html, "text/html;charset=UTF-8")。
  • 附件:構建 MimeMultipart,添加 MimeBodyPart 附件。
  • 異步發送:結合線程池或消息隊列(RabbitMQ/Kafka)削峰填谷。

掌握協議配置、授權碼機制與錯誤碼語義,能讓 Java 郵件發送從「能跑通」進化為「穩定可觀測、故障可快速定位」的生產級能力。

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