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;
    }
}

猜你喜欢

转载自www.cnblogs.com/blog411032/p/10065693.html