1. 程式人生 > >Java mail 傳送郵件 主題(標題)亂碼

Java mail 傳送郵件 主題(標題)亂碼

最近開發遇到Javamail  傳送郵件標題亂碼問題,騰訊、網易郵箱不會亂碼,阿里郵箱  標題則會亂碼。解決辦法:

String subject = MimeUtility.encodeWord(mailEntity.getMailSubject(), "UTF-8", "Q");
            message.setSubject(subject);

傳送郵件程式碼:

/**
     * 傳送郵件  可以帶附件   內容可為HTML
     *
     * @param mailEntity
     * @return
     * 
@throws GeneralSecurityException */ public static boolean sendMail(MailEntity mailEntity) throws GeneralSecurityException { // 發件人電子郵箱 final String from = mailEntity.getMailFromAddress(); // 發件人電子郵箱密碼 final String pass = mailEntity.getMailFromPwd();
// 指定傳送郵件的主機為 smtp.qq.com String host = mailEntity.getMailFromHost(); // 郵件伺服器 String port = mailEntity.getPort(); // 獲取系統屬性 Properties properties = System.getProperties(); // 設定郵件伺服器 properties.setProperty("mail.smtp.host", host); properties.setProperty(
"mail.smtp.port",port); properties.put("mail.smtp.auth", "true"); MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); properties.put("mail.smtp.ssl.enable", "false"); properties.put("mail.smtp.ssl.socketFactory", sf); // 獲取預設session物件 Session session = Session.getDefaultInstance(properties, new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { // qq郵箱伺服器賬戶、第三方登入授權碼 return new PasswordAuthentication(from, pass); // 發件人郵件使用者名稱、密碼 } }); try { // 建立預設的 MimeMessage 物件 MimeMessage message = new MimeMessage(session); // Set From: 頭部頭欄位 message.setFrom(new InternetAddress(from)); // Set To: 頭部頭欄位 message.addRecipient(Message.RecipientType.TO, new InternetAddress(mailEntity.getMailReceiverAddress())); // Set Subject: 主題文字 String subject = MimeUtility.encodeWord(mailEntity.getMailSubject(), "UTF-8", "Q"); message.setSubject(subject); // 建立訊息部分 BodyPart messageBodyPart = new MimeBodyPart(); // 訊息 // messageBodyPart.setText(mailEntity.getMailContent()); messageBodyPart.setContent(mailEntity.getMailContent(), "text/html;charset=utf-8"); // 建立多重訊息 Multipart multipart = new MimeMultipart(); // 設定文字訊息部分 multipart.addBodyPart(messageBodyPart); if (mailEntity.getFilePaths() != null && mailEntity.getFilePaths().size() > 0) { for (String filePath : mailEntity.getFilePaths()) { // 附件部分 messageBodyPart = new MimeBodyPart(); String suffix = ""; String oldPath = ""; if (filePath.indexOf(".") >0){ suffix = filePath.substring(filePath.indexOf(".")+1); oldPath = filePath.substring(0,filePath.indexOf(".")); DataSource source = new FileDataSource(oldPath); File file = ((FileDataSource) source).getFile(); file.renameTo(new File(oldPath + "." + suffix)); source = new FileDataSource(filePath); messageBodyPart.setDataHandler(new DataHandler(source)); }else { // 設定要傳送附件的檔案路徑 DataSource source = new FileDataSource(filePath); messageBodyPart.setDataHandler(new DataHandler(source)); } // 設定要傳送附件的檔案路徑 // messageBodyPart.setFileName(filename); // 處理附件名稱中文(附帶檔案路徑)亂碼問題 messageBodyPart.setFileName(MimeUtility.encodeText(filePath)); multipart.addBodyPart(messageBodyPart); } } // 傳送完整訊息 message.setContent(multipart); // 傳送訊息 Transport.send(message); logger.info("Sent mail successfully...."); return true; } catch (MessagingException e) { logger.debug(e.getMessage()); } catch (UnsupportedEncodingException e) { logger.debug(e.getMessage()); } return false; }

實體:

/**
 * @Auther: mxf
 * @Date: 2018/10/31 16:08
 * @Description:傳送郵件實體類
 */
public class MailEntity implements Serializable {
    /**
     * 郵件接收地址
     */
    private String mailReceiverAddress;

    /**
     * 郵件主題
     */
    private String mailSubject;

    /**
     * 郵件內容
     */
    private String mailContent;

    /**
     * 附件路徑
     */
    private List<String> filePaths = new ArrayList<String>();

    /**
     * 傳送地址
     */
    private String mailFromAddress;

    /**
     * 傳送者的郵件密碼
     */
    private String mailFromPwd;

    /**
     * 指定傳送郵件的主機
     */
    private String mailFromHost;

    /**
     * 傳送郵件主機埠
     */
    private String port;

    public String getPort() {
        return port;
    }

    public void setPort(String port) {
        this.port = port;
    }

    public String getMailReceiverAddress() {
        return mailReceiverAddress;
    }

    public void setMailReceiverAddress(String mailReceiverAddress) {
        this.mailReceiverAddress = mailReceiverAddress;
    }

    public String getMailSubject() {
        return mailSubject;
    }

    public void setMailSubject(String mailSubject) {
        this.mailSubject = mailSubject;
    }

    public String getMailContent() {
        return mailContent;
    }

    public void setMailContent(String mailContent) {
        this.mailContent = mailContent;
    }

    public List<String> getFilePaths() {
        return filePaths;
    }

    public void setFilePaths(List<String> filePaths) {
        this.filePaths = filePaths;
    }

    public String getMailFromAddress() {
        return mailFromAddress;
    }

    public void setMailFromAddress(String mailFromAddress) {
        this.mailFromAddress = mailFromAddress;
    }

    public String getMailFromPwd() {
        return mailFromPwd;
    }

    public void setMailFromPwd(String mailFromPwd) {
        this.mailFromPwd = mailFromPwd;
    }

    public String getMailFromHost() {
        return mailFromHost;
    }

    public void setMailFromHost(String mailFromHost) {
        this.mailFromHost = mailFromHost;
    }
}