package com.crossborderpayment.amazoncore.provider.utils;
import org.apache.commons.lang.StringUtils;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.InputStreamSource;
import org.springframework.core.io.Resource;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
public class EmailUtil {
public static final String DEFALUT_ENCODING = "UTF-8";
public static void main(String[] args) {
JavaMailSenderImpl sender = initJavaMailSender();
String[] ss = {"**qq.com"};
try {
// EmailUtil.sendTextWithHtml(sender, ss, "测试简单文本邮件发送! ", " <a href='http://work.dev.gomeplus.com/'>test</a>测试我的简单邮件发送机制!! ");
EmailUtil.sendWithAttament(sender, ss, "测试邮件中上传附件!!", "<html><head></head><body><h1>你好:附件中有学习资料!</h1></body></html>", "xx.xls", "D:\\aa.xls");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 全部发送
*
* @param sender 配置
* @param tos 目标邮箱数组
* @param from
* @param subject 标题
* @param text 内容
* @param imgId 图片ID
* @param imgPath 图片地址
* @param AttachName 附件名称
* @param filePath 附件地址
* @throws MessagingException
*/
public static void sendWithAll(JavaMailSenderImpl sender, String[] tos, String from, String subject, String text,
String imgId, String imgPath, String AttachName, String filePath) throws MessagingException, UnsupportedEncodingException {
//联合 MimeUtility.encodeText(AttachName); 解决文件名称过长出现乱码问题
System.setProperty("mail.mime.splitlongparameters", "false");
MimeMessage mailMessage = sender.createMimeMessage();
MimeMessageHelper messageHelper = initMimeMessageHelper(mailMessage, tos, sender.getUsername(), subject, text,
true, true, DEFALUT_ENCODING);
// 插入图片
if (StringUtils.isNotEmpty(imgId) && StringUtils.isNotEmpty(imgPath)) {
FileSystemResource img = new FileSystemResource(new File(imgPath));
messageHelper.addInline(imgId, img);
}
// 插入附件
if (StringUtils.isNotEmpty(AttachName) && StringUtils.isNotEmpty(filePath)) {
FileSystemResource file = new FileSystemResource(new File(filePath));
MimeUtility.encodeText(AttachName);
messageHelper.addAttachment(AttachName, file);
}
// 发送邮件
sender.send(mailMessage);
System.out.println("邮件发送成功..");
}
private static MimeMessageHelper initMimeMessageHelper(MimeMessage mailMessage, String[] tos, String from,
String subject, String text) throws MessagingException {
return initMimeMessageHelper(mailMessage, tos, from, subject, text, true, false, DEFALUT_ENCODING);
}
private static MimeMessageHelper initMimeMessageHelper(MimeMessage mailMessage, String[] tos, String from,
String subject, String text, boolean isHTML, boolean multipart, String encoding) throws MessagingException {
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage, multipart, encoding);
messageHelper.setTo(tos);
messageHelper.setFrom(from);
messageHelper.setSubject(subject);
// true 表示启动HTML格式的邮件
messageHelper.setText(text, isHTML);
return messageHelper;
}
/**
* 这个方法在实际应用中,springboot会通过在配置文件application.xml
* 中加配置自动实例化JavaMailSenderImpl,本方法只是为了测试使用
*/
public static JavaMailSenderImpl initJavaMailSender() {
Properties properties = new Properties();
properties.setProperty("mail.debug", "true");// 是否显示调试信息(可选)
properties.setProperty("mail.smtp.starttls.enable", "false");
properties.setProperty("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.smtp.auth", "true");
properties.put(" mail.smtp.timeout ", " 25000 ");
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setJavaMailProperties(properties);
javaMailSender.setHost("smtp.exmail.qq.com");
javaMailSender.setUsername("**@qq.com"); // s根据自己的情况,设置username
javaMailSender.setPassword("****"); // 根据自己的情况, 设置password
javaMailSender.setPort(465);
javaMailSender.setDefaultEncoding("UTF-8");
return javaMailSender;
}
}
application.yml
#发送邮件
mail:
host: smtp.exmail.qq.com
username: **@qq.com
password: **
port: 465
default-encoding: UTF-8
protocol: smtp
healthcheck:
enabled: false
properties:
mail:
debug: false
smtp:
socketFactory.class: javax.net.ssl.SSLSocketFactory
auth: true
timeout: 25000
spring boot 发送邮件 & 文件名过长出现乱码
最新推荐文章于 2023-03-08 23:22:17 发布