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;
}
}
Java mail 发送邮件 主题(标题)乱码的更多相关文章
- Spring Boot 揭秘与实战(七) 实用技术篇 - Java Mail 发送邮件
文章目录 1. Spring Boot 集成 Java Mail 2. 单元测试 3. 源代码 Spring 对 Java Mail 有很好的支持.因此,Spring Boot 也提供了自动配置的支持 ...
- java mail(发送邮件--163邮箱)
package com.util.mail; /** * 发送邮件需要使用的基本信息 */ import java.util.Properties; public class MailSenderIn ...
- java mail发送邮件
最近做了自动发送邮件功能,带附件的:需要的jar包有
- 使用Java Mail发送邮件
本笔记参考自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/17839983 JavaMail是SUN提供给开发人员在应用程序中实现 ...
- 简单的java mail发送邮件实例
mail.jar ,commons-email-X.X.jar ,activation.jar ,log4j.jar 这四个jar,放进项目里 下载地址 http://www.oracle.com/ ...
- 利用java mail发送邮件(转)
JavaMail是SUN提供给开发者在应用程序中实现邮件发送和接收功能而提供的一套标准开发类库,支持经常使用的邮件协议,如SMTP.POP3.IMAP.开发者使用JavaMail编写邮件程序时,无需考 ...
- Java抓任意网页标题乱码jsoup解决方案一例
同事用Java做了一个抓取任意网页的标题的功能,由于任意网页的HTML的head中meta中指定的charset五花八门,比如常用的utf-8,gbk,gb2312. 自己写代码处理,短时间内,发现各 ...
- Java Mail 发送邮件(SSL加密方式,TSL加密方式)
一.一般配置 发送邮件需要用到 mail包 maven 依赖如下: <!-- https://mvnrepository.com/artifact/javax.mail/mail --> ...
- 使用java mail 发送邮件
1.关联jar包: activation.jar mail.jar 2.调用 @Test public void test1() { List<String> imageUrlLi ...
随机推荐
- Python<1>List
list里的元素以逗号隔开,以[]包围,当中元素的类型随意 官方一点的说:list列表是一个随意类型的对象的位置相关的有序集合. 它没有固定的大小(1).通过对偏移量 (2)进行赋值以及其它各种列表的 ...
- Input.GetAxis 获取轴
static function GetAxis (axisName : string) : float Description描述 Returns the value of the virtual a ...
- 斯坦福《机器学习》Lesson4感想--1、Logistic回归中的牛顿方法
在上一篇中提到的Logistic回归是利用最大似然概率的思想和梯度上升算法确定θ,从而确定f(θ).本篇将介绍还有一种求解最大似然概率ℓ(θ)的方法,即牛顿迭代法. 在牛顿迭代法中.如果一个函数是,求 ...
- spring拦截器不拦截方法名原因
开发一个基于注解的登录拦截器,遇到拦截器只能拦截controller不能拦截到具体的方法名,这样拦截器就完全没用,经过仔细摸索,DefaultAnnotationHandlerMapping和Anno ...
- 读EXCEL
import xlrdbook=xlrd.open_workbook('app_student.xls')sheet=book.sheet_by_index(0)#根据(索引)顺序获取到sheet页# ...
- Servlet的API(二)
web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象和代表响应的response对象.request和response对象既然代表请求和响应,那我们获取 ...
- Ansible@一个高效的配置管理工具--Ansible configure management--翻译(五)
无书面许可请勿转载 高级Playbook Extra variables You may have seen in our template example in the previous chapt ...
- Ubuntu16.04下搜狗输入法、Sublime Text 3的安装
Ubuntu16.04下搜狗输入法.Sublime Text 3的安装 一.搜狗输入法 1. 安装中文语言 默认在Ubuntu16.04下是没有中文的,需要安装中文,在System Settings- ...
- QT项目性能调优小记
最近的项目用到了QT 5.5,项目在运行过程中出现了一段时间CPU占用率持续25%,并频繁断网的情况,遂决定对项目性能进行优化. 优化工具也是VS2010自带的性能分析工具,具体的使用方法参见:htt ...
- quartz项目中的运用
下面是之前项目中quartz的运用,我将它梳理出来. 测试类: public class OrdExpireTaskMain { public static void main(String[] ar ...