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

JavaMail 發件人含中文報地址語法錯誤:編碼與拆分方案

     編輯:程式設計綜合問答

錯誤堆疊


com.sun.mail.smtp.SMTPSendFailedException: 501 5.1.7 Syntax error in sender address

原因:SMTP 協議(RFC 5321/5322)要求郵箱地址純 ASCII,中文顯示名需 **MIME 編碼**(`=?UTF-8?B?base64?=`)。

標準解決


import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

String from = "測試 <test@163.com>";
// 正確構造
InternetAddress addr = new InternetAddress("test@163.com", "測試", "UTF-8");
message.setFrom(addr);

或手動編碼:


String encoded = MimeUtility.encodeText("測試") + " <test@163.com>";
message.setFrom(new InternetAddress(encoded));

題主「取巧」方案

前台顯示完整「測試 <test@163.com>」,後台解析提取純郵箱 `test@163.com` 發送,查詢時再拼接中文名。雖可行但不符合規範,易導致反垃圾郵件系統拒收。

建議

統一使用 `InternetAddress` 構造器指定 charset,確保 RFC 合規,提高送達率。

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