最近开发遇到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;
}
}

Java mail 发送邮件 主题(标题)乱码的更多相关文章

  1. Spring Boot 揭秘与实战(七) 实用技术篇 - Java Mail 发送邮件

    文章目录 1. Spring Boot 集成 Java Mail 2. 单元测试 3. 源代码 Spring 对 Java Mail 有很好的支持.因此,Spring Boot 也提供了自动配置的支持 ...

  2. java mail(发送邮件--163邮箱)

    package com.util.mail; /** * 发送邮件需要使用的基本信息 */ import java.util.Properties; public class MailSenderIn ...

  3. java mail发送邮件

    最近做了自动发送邮件功能,带附件的:需要的jar包有

  4. 使用Java Mail发送邮件

    本笔记参考自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/17839983 JavaMail是SUN提供给开发人员在应用程序中实现 ...

  5. 简单的java mail发送邮件实例

    mail.jar ,commons-email-X.X.jar ,activation.jar ,log4j.jar  这四个jar,放进项目里 下载地址 http://www.oracle.com/ ...

  6. 利用java mail发送邮件(转)

    JavaMail是SUN提供给开发者在应用程序中实现邮件发送和接收功能而提供的一套标准开发类库,支持经常使用的邮件协议,如SMTP.POP3.IMAP.开发者使用JavaMail编写邮件程序时,无需考 ...

  7. Java抓任意网页标题乱码jsoup解决方案一例

    同事用Java做了一个抓取任意网页的标题的功能,由于任意网页的HTML的head中meta中指定的charset五花八门,比如常用的utf-8,gbk,gb2312. 自己写代码处理,短时间内,发现各 ...

  8. Java Mail 发送邮件(SSL加密方式,TSL加密方式)

    一.一般配置 发送邮件需要用到  mail包 maven 依赖如下: <!-- https://mvnrepository.com/artifact/javax.mail/mail --> ...

  9. 使用java mail 发送邮件

    1.关联jar包:   activation.jar   mail.jar 2.调用 @Test public void test1() { List<String> imageUrlLi ...

随机推荐

  1. Oracle11g登陆sqlplus时一直提示密码错误

    我安装oracle的时候有自己设置帐号和密码,我也在服务里的oracleserver中查看了正在运行的用户名,是我注册时填的那个并已开启.但是为什么登陆Sqlplus老是说密码错误呢?我敢肯定密码没有 ...

  2. react-native 初始化 各种报错 及 解决方案

    1.Unable to load script from assets 'index.android.bundle'. curl -k "http://localhost:8081/inde ...

  3. linux ln 命令使用参数详解(ln -s 软链接)(转)

    这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件. 当 我们需要在不同的 ...

  4. Android 关于SD的操作

    1 http://www.cnblogs.com/shaoyangjiang/archive/2012/03/09/2388178.html 2

  5. msyql5.5修改配置文件开启慢查询日志

    修改/etc/my.cnf文件 在[mysqld]下面修改或添加配置(在别处不起作用) slow_query_log = on slow_query_log_file = /usr/local/mys ...

  6. WebLogicSSL解决苹果IOS itms下载问题

    前提: 安装好openssl工具. 通过windows cmd 命令进入 openssl工作文件夹 如解压文件夹为:E:\ openssl-1.0.2-beta1 则工作文件夹为E:\openssl- ...

  7. Squid 启动/停止/重载配置文件 命令

    当你的 squid.conf 配置文档按照你的想法修改完以后,启动 squid 之旅就开始了. Squid安装设试命令: 1,初始化你在 squid.conf 里配置的 cache 目录 #/usr/ ...

  8. 0x00 使用Ant 设置项目

    1. Ant 简介: Ant 是一款广泛使用的流行的开源构建工具,它用Java语言编写. 2.Ant官网: Ant官网:http://ant.apache.org/ 3.设置环境变量: 新建 Vari ...

  9. 匿名函数块级作用域以及在JQuery中的应用

    最近经常回在群里面看到有些朋友问如下这样的js写法该如何理解的的问题,虽然可能对匿名函数有些理解,但是有时候看到JQuery源码或者其他JS库中同样的写法时,就有点不理解了,今天再次分享下这方面的知识 ...

  10. 基于JT/T 1078协议设计和开发部标视频服务器

    交通部与2016年10月份推出了JT/T 1078-2016标准,全称是<道路运输车辆卫星定位系统视频通信协议>.该标准将改变以往两客一危车辆的视频监控设备通信协议都是设备厂商私有协议的局 ...