注册邮箱
去163邮箱(或其他邮箱)注册一个邮箱,并开启SMTP授权码。
程序
需要注意的是,由于阿里云服务器不让使用默认的25端口,所以会出现Windows下测试发送邮件成功,Linux服务器下发送邮件却出错的问题(broke pipe、timeout、can not connect等)。解决办法是使用带SSL的465端口。
pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
application.properties
spring.mail.host=smtp.exmail.qq.com
spring.mail.password=123456
spring.mail.port=587
spring.mail.username=admin@exmail.com
spring.mail.protocol=smtp
spring.mail.properties.mail.smtp.auth=true
代码如下
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import javax.mail.*;
import javax.mail.internet.AddressException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.*;
/** * 邮件发送工具类 */
public class EmailUtils {
// (自定义)邮件发送者
@Value("${spring.mail.from}")
private String email_from;
@Autowired
private JavaMailSender emailSender
/**
* 发送邮件的方法
* @param toUser :收件人
* @param title :标题
* @param content :内容
*/
public static void sendMail(String toEmail,String title,String content) throws Exception {
// 你自己的邮箱和授权码
final String username = "xxxxx@163.com";
//自己的邮箱 final String password = "xxxxxxxxxx";
//授权码,需要登录163邮箱,在设置里设置授权码。授权码用于替代密码
MimeMessage msg = emailSender.createMimeMessage();
//开启带附件true
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(msg,true);
// MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(msg);
File file = new File(poiUtills.initOutputDir()+File.separator +"附件.xlsx");
mimeMessageHelper.addAttachment("附件.xlsx",file);
//设置发送内容
mimeMessageHelper.setFrom(email_from);
if (toEmail.contains(",")) {
mimeMessageHelper.setTo(toEmail.split(","));
} else {
mimeMessageHelper.setTo(toEmail);
}
mimeMessageHelper.setSubject(title);
String message = "你好:</br><p>这是"+etl_date+"日的监控告警邮件,请查看附件详细信息。</br>";
// mimeMessageHelper.setText(message, true);
mimeMessageHelper.setText(content);
emailSender.send(msg);
}
网友评论