目录
- 推荐公众号
- 正文
-
- qq邮箱开通smtp服务
- 代码
- 邮箱文件名乱码问题
推荐公众号
有彩蛋哦!!!(或者公众号内点击网赚获取彩蛋)
正文
qq邮箱开通smtp服务
代码
邮箱文件名乱码问题
要和浏览器网页编码一致,由于更新过谷歌浏览器所以看不到网页编码;
通过火狐浏览器看到默认网页编码是简体中文,也就是GB2312
emailContent 里面包含
邮件标题 和 正文
emailConfig 包含
host smtp.qq.co
FromUser 谁发送的
token 授权码
public class SendMailUtils {
//host = smtp.qq.com fromUser = [email protected] token = olcsomniofpaibdh
public static void sendEmail(EmailContent emailContent, EmailConfig emailConfig, Map<String, String> fileInfos) throws Exception {
Properties prop = new Properties();
// 开启debug调试,以便在控制台查看
prop.setProperty("mail.debug", "true");
// 设置邮件服务器主机名
prop.setProperty("mail.host", emailConfig.getHost());
// 发送服务器需要身份验证
prop.setProperty("mail.smtp.auth", "true");
// 发送邮件协议名称
prop.setProperty("mail.transport.protocol", "smtp");
// 开启SSL加密,否则会失败
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable", "true");
prop.put("mail.smtp.ssl.socketFactory", sf);
// 创建session
Session session = Session.getInstance(prop);
// 通过session得到transport对象
Transport ts = session.getTransport();
// 连接邮件服务器:邮箱类型,帐号,授权码
ts.connect(emailConfig.getHost(), emailConfig.getFromUser(), emailConfig.getToken());
// 创建邮件
Message message = createSimpleMail(emailContent, session, fileInfos);
// 发送邮件
ts.sendMessage(message, message.getAllRecipients());
ts.close();
}
/**
* @Method: createSimpleMail
* @Description: 创建一封只包含文本的邮件
*/
public static MimeMessage createSimpleMail(EmailContent emailContent, Session session, Map<String, String> fileInfos)
throws Exception {
// 创建邮件对象
MimeMessage message = new MimeMessage(session);
// 指明邮件的发件人
message.setFrom(new InternetAddress("[email protected]"));
// 指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
message.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
// 邮件的标题
message.setSubject(emailContent.getTitle());
// 邮件的文本内容
message.setContent(emailContent.getContent(), "text/html;charset=UTF-8");
// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipart multipart = new MimeMultipart();
// 设置邮件的文本内容
// BodyPart contentPart = new MimeBodyPart();
// contentPart.setText("第二种方法···");
// multipart.addBodyPart(contentPart);
addFiles(fileInfos, multipart);
// 将multipart对象放到message中
message.setContent(multipart);
// 返回创建好的邮件对象
return message;
}
private static void addFiles(Map<String, String> fileInfos, Multipart multipart) throws MessagingException {
if (MapUtils.isEmpty(fileInfos)) {
return;
}
// 添加附件
for (Map.Entry<String, String> entry : fileInfos.entrySet()) {
String fileName = entry.getKey();
String filePath = entry.getValue();
BodyPart bodyPart = getBodyPart(filePath, fileName);
multipart.addBodyPart(bodyPart);
}
}
public static BodyPart getBodyPart(String filePath, String fileName) throws MessagingException {
BodyPart messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(filePath);
// 添加附件的内容
messageBodyPart.setDataHandler(new DataHandler(source));
// 添加附件的标题
// 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
messageBodyPart.setFileName("=?GB2312?B?"
+ enc.encode(fileName.getBytes()) + "?=");
return messageBodyPart;
}
}