参考:ssm整合JavaMail发送邮件_ssm整合mimemessage_ds_surk的博客-CSDN博客
我在这位前辈写的博客的基础上进行讲解完善,避免踩坑。
我的jdk版本:1.8.0_333
1、引入依赖
相信很多朋友都卡在这里:
1、没有JavaMailSenderImpl类
2、实例化MimeMessage类爆红
缺少必要的依赖等等,用下面我实践出来的就OK了
<!-- JavaMail API -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.3.3</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
2、编写配置文件
配置文件不要写注释,这里是让你好看它们的作用
mail.properties:
mail.smtp.host=smtp.163.com #服务器主机名
mail.smtp.username=***********@163.com #用于发件的邮箱
mail.smtp.password=****************** #客户端授权码
mail.smtp.defaultEncoding=utf-8 #编码字符
mail.smtp.auth=true #是否进行用户名密码校验
mail.smtp.timeout=20000 #设置超时时间
获取客户端授权码教程在下面
applicationContext.xml:
<context:property-placeholder location="classpath:mail.properties"/>
<!--邮件配置-->
<bean class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="${mail.smtp.host}"/>
<property name="username" value="${mail.smtp.username}"/>
<property name="password" value="${mail.smtp.password}"/>
<property name="defaultEncoding" value="${mail.smtp.defaultEncoding}"/>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
<prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop>
</props>
</property>
</bean>
3、测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
@PropertySource("classpath:mail.properties")
public class MailTest {
@Autowired
private JavaMailSender javaMailSender; //在spring中配置的邮件发送的bean
@Value("${mail.smtp.username}") //通过注解获取配置文件属性值
String from; //发件人邮箱
String to = "***********@qq.com"; //收件人邮箱,这里可以是QQ邮箱等其他邮箱
String subject = "由JavaMail发送"; //邮件主题
String text = "你好,这是一封来自SSM框架整合JavaMail的邮件"; //邮件正文
// File file = new File("C:/Users/gong'chao/Desktop/3.jpeg"); //发送一个文件
@Test
public void testSend() {
MimeMessage message = javaMailSender.createMimeMessage(); //创建一个使用对象方法的新实例。MIME格式的电子邮件
MimeMessageHelper messageHelper; //处理MimeMessage的辅助类
try {
messageHelper = new MimeMessageHelper(message, true); //第二个参数表示文本内容支持HTML格式
messageHelper.setFrom(from); //设置电子邮件的发件人地址
messageHelper.setTo(to); //设置电子邮件的收件人地址,可以逗号隔开发送多个
messageHelper.setSubject(subject);//设置电子邮件的主题
messageHelper.setText(text,true); //true代表支持html格式
// messageHelper.addAttachment(file.getName(), file); //以附件形式发送一个文件
javaMailSender.send(message);//使用对象的方法发送电子邮件
System.out.println("success!");
}catch (Exception e) {
e.printStackTrace();
}
}
}
获取客户端授权码
报错 javax.mail.AuthenticationFailedException: 535 Error: authentication failed 等
就是邮箱的客户端授权码错误或授权码没有开启
这里以网易邮箱为例
其他邮箱都差不多的操作。另外,换其他邮箱记得更改服务器主机名,比如:QQ邮箱是smtp.465.com
这里在开启后会让你发送短信,发送短信后就会出现授权码,复制粘贴到mail.properties中。