zoukankan      html  css  js  c++  java
  • 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;
        }
    }
  • 相关阅读:
    Page.EnableViewStateMac 属性
    ASP.NET2.0权限/角色管理表aspnet_Membership解析(转)
    Request.ServerVariables(HTTP_REFERER)
    对象不能从DBNull 转换为其他类型
    ASP.NET角色管理配置
    TextBox保存的文本在Label中显示
    SET NOCOUNT ON
    浅论ViewState及其与Session的关系(转)
    ASP.NET2.0权限/角色管理表aspnet_Applications解析(转)
    动态编辑控件宽高
  • 原文地址:https://www.cnblogs.com/blog411032/p/10065693.html
Copyright © 2011-2022 走看看