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 ...
随机推荐
- axis2 利用小工具cat.aar
Axis2: Web Service是现在最适合实现SOAP的技术,而Axis2是实现Web Service的一种技术框架(架构). 昨天把把菜刀脚本打包发现<>在xml会被转义,导致菜刀 ...
- Activity返回数据给上一个活动
1.在A这个Activity中以startActivityForResult(intent, requestCode)启动B这个Activity 2.在B这个Activity中setResult(re ...
- PHP结巴程序实现
<?php $str="我...我要要要...学学学..编编程"; $str=preg_replace('/\./','',$str);//我我要要要学学学编编程 $str= ...
- android Activity的onPause()与onResume()
官方文档地址:http://www.android-doc.com/training/basics/activity-lifecycle/pausing.html#Resume Pause和Resum ...
- xpinyin-函数返回多个值-lambda匿名函数-列表生成式-三元表达式
import xpinyinp=xpinyin.Pinyin() #实例化print(p.get_pinyin('小白','')) 函数返回多个值:1.函数如果返回多个值的话,它会把这几个值放到一个元 ...
- SpringBoot使用MyBatis报错:Error invoking SqlProvider method (tk.mybatis.mapper.provider.base.BaseInsertProvider.dynamicSQL)
© 版权声明:本文为博主原创文章,转载请注明出处 1. 错误描述 使用SpringBoot集成MyBatis框架,并且使用 mapper-spring-boot-starter 自动生成MyBati ...
- Android各种模拟器使用笔记
[√]天天模拟器 优点: 缺点: 个人经验 ADB 版本过低的解决办法 去启动时的广告方法 去除多余进程方法 ADB无法连接到模拟器 原因分析: 解决方案: 安装APP(APK)时非常非常慢TTMNQ ...
- 【拆分版】Docker-compose构建Elasticsearch 7.1.0集群
写在前边 搞了两三天了,一直有个问题困扰着我,ES集群中配置怎么能正确映射到主机上,这边经常报ClusterFormationFailureHelper master not discovered o ...
- eventfd
#include <sys/eventfd.h> int eventfd(unsigned int initval, int flags); eventfd() creates an &q ...
- Nginx 配置指令的执行顺序
在一个 location 中使用 content 阶段指令时,通常情况下就是对应的 Nginx 模块注册该 location 中的“内容处理程序”.那么当一个 location 中未使用任何 cont ...