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 ...
随机推荐
- iOS 引入外部字体 otf/ttf/ttc
1.首先下载到字体的otf文件(Mac电脑下搜索字体册) 2.将字体文件拖到项目工程下 3.plist设置 Fonts provided by application 属性 4.代码中使用[UIFon ...
- ejs - 初试
官方API: https://www.npmjs.com/package/ejs - 模板引擎 ejs文件(和普通html文件没什么区别,只是多增加了变量) <!DOCTYPE html> ...
- python——操作符重载(重要)
类可以重载python的操作符 旧认识:__X__的名字 是系统定义的名字:是python特殊方法专用标识. 操作符重载使我们的对象与内置的一样.__X__的名字的方法是特殊的挂钩(hook) ...
- selenium从入门到应用 - 4,页面对象设计模式的实现
本系列所有代码 https://github.com/zhangting85/simpleWebtest 本文将介绍一个Java+TestNG+Maven+Selenium的web自动化测试脚本环境下 ...
- pomodoro源码
有网友问我要pomodoro源码.事实上这个程序非常easy,仅仅是定时器,定时弹出置顶窗体.用c++builder6.0写.放一个TPopupMenu 右键菜单,一个TTrayIcon 一个托盘图标 ...
- HTML基础知识总结一
一.HTML是什么? HTML是超文本标记语言的英文缩写,"超文本"就是指页面内能够包括图片.链接.甚至音乐.程序等非文字元素.超文本标记语言的结构包括"头"部 ...
- 对于刚開始学习的人Xcode最经常使用的快捷键
对于刚開始学习的人而言,好多人都是直接使用鼠标进行操作.差点儿非常少使用快捷键,从而再练习编程时比别人慢那么一点,今天就把刚開始学习的人最经常使用的几个快捷键给大家总结下,当然欢迎大家补充. (1)c ...
- Android RxJava使用介绍(四) RxJava的操作符
本篇文章继续介绍下面类型的操作符 Combining Observables(Observable的组合操作符) Error Handling Operators(Observable的错误处理操作符 ...
- 我们常用的在a标签中有点击事件
我们常用的在a标签中有点击事件:1. a href="javascript:js_method();" 这是我们平台上常用的方法,但是这种方法在传递this等参数的时候很容易出问题 ...
- 对ListView滚动状态的监听
有的时候,我们需要对ListView滚动做一个相应的监听事件,例如:要实现如下图通讯录的功能: 思路为:首先呢,中间那个"路"字为一个TextView,它与ListView采用相对 ...