java mail 使用
配置文件
使用的springboot框架,配置文件为application.yml
mail:
host: smtp.163.com #发送邮件配置地址
port: 25 #端口号
username: XXXXX@163.com #邮箱登录账号
oauthCode: xxxxx #邮箱第三方登录授权码,可在对应邮箱官网获取(163的在mail.163.com-->设置)
timeOut: 15000 #超时时间
mailFrom: XXXXX@163.com #必须和邮箱登录账号相同,否则会报 554DT:SUM
personal: Mochi #发件人署名
subject: 测试发送 #主题 可有可无,这里指定的可以是默认的
html: Content #内容
maven/gradle依赖
implementation 'org.springframework.boot:spring-boot-starter-mail'
implementation 'javax.mail:mail:1.4.3'
配置实体类
@Data
@Component
public class MailConfigure{
@Value("${mail.host}")
public static String host;
@Value("${mail.port}")
public static int port;
@Value("${mail.username}")
public static String username;
@Value("${mail.oauthCode}")
public static String oauthCode;
@Value("${mail.timeOut}")
public static String timeOut;
@Value("${mail.mailFrom}")
public static String mailFrom;
@Value("${mail.personal}")
public static String personal;
}
发送工具类
@Component
public class MailUtils{
static Log logger = LogFactory.getLog(MailUtils.class);
private static final String HOST = MailConfigure.host;
private static final Integer PORT = MailConfigure.port;
private static final String USERNAME = MailConfigure.username;
private static final String OAUTHCODE= MailConfig.oauthCode;
private static final String EMAILFORM= MailConfigure.emailForm;
private static final String TIMEOUT= MailConfigure.timeOut;
private static final String PERSONAL= MailConfigure.personal;
private static JavaMailSenderImpl mailSender = createMailSender();
private static JavaMailSenderImpl createMailSender() {
JavaMailSenderImpl sender = new JavaMailSenderImpl();
sender.setHost(HOST);
sender.setPort(PORT);
sender.setUsername(USERNAME);
sender.setPassword(OAUTHCODE);
sender.setDefaultEncoding("UTF-8");
Properties prop = new Properties();
prop.setProperty("mail.smtp.timeout", TIMEOUT);
prop.setProperty("mail.smtp.auth", "true");
//使用ssl发送,此处不一定支持,若不支持会报Unrecognized SSL message, plaintext connection
//p.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
prop.setProperty("mail.smtp.starttls.enable", "true");
sender.setJavaMailProperties(prop);
return sender;
}
/*
* 发送邮件
* @param to 收件人
* @param subject 主题
* @param html 发送内容
* @throws Exception 异常
*/
public static void sendMail(String to, String subject, String html) throws Exception {
logger.info("邮件发送...");
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");//设置编码格式,否则会乱码
messageHelper.setFrom(EMAILFORM, PERSONAL);
messageHelper.setTo(to);
messageHelper.setSubject(subject);
messageHelper.setText(html, true);
mailSender.send(mimeMessage);
}
/**
* 发送带附件的邮件
* @param to 收件人
* @param subject 主题
* @param html 发送内容
* @param filePath 附件路径
* @throws Exception 异常
*/
public static void sendMailWithFile(String to, String subject, String html, String filePath) throws Exception {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
messageHelper.setFrom(EMAILfROM, PERSONAL);
messageHelper.setTo(to);
messageHelper.setSubject(subject);
messageHelper.setText(html, true);
FileSystemResource file = new FileSystemResource(new File(filePath));
String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
messageHelper.addAttachment(fileName, file);
mailSender.send(mimeMessage);
}
发送测试类
try {
//QQ邮箱收不到邮件可以在辣鸡邮件查找,QQ邮箱收件较慢,没找到原因--||
//无意义邮件不要发送过多/过频繁,否则会报554 DT:SPM 爱玩的我给好友发了也就30几封,就被限制了好几个小时QwQ
MailUtils.sendMail("xxxxx@qq.com", "测试邮件", "测试发送");
MailUtils.sendMail("xxxxx@163.com", "测试邮件", "测试发送");
} catch (Exception e) {
logger.error("邮件发送异常" + e);
}
163异常描述
163邮箱企业退信错误码 http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html
附163邮箱企业退信错误码描述,一定不要无意义邮件发太多QwQ,被限制了一封发不出去好难受…