Java发送邮件

依赖

mail包与commons-emial包

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.3.1</version>
</dependency>

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class SendMailExample{
public static void main(String[] args) {
SimpleEmail email = new SimpleEmail();
//email.setDebug(true);
email.setHostName ("smtp.partner.outlook.cn");
email.setCharset("UTF-8");
email.setSmtpPort(587);//指定端口
email.setStartTLSEnabled(true);
email.setAuthentication ( "<发件人地址>", "<密码>" );
try {
//设置收件人邮箱以及名称
email.addTo ("xxx@gmail.com", "<收件人名称>");
// 抄送
email.addCc("cc@gmail.com","<抄送名称>");
//发件人邮箱以及名称
email.setFrom("ff@gmail.com", "<发件人名称>", "UTF-8");
//设置邮件的主题
email.setSubject ("测试邮件发送");
//邮件正文消息
email.setMsg ("这是邮件内容!");
// 发送
email.send();
System.out.println ("Send email successful!");
} catch (EmailException e) {
e.printStackTrace();
}
}
}

遇到过的问题

0x01

Caused by: com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM [BJXPR01CA020.CHNPR01.prod.partner.outlook.cn]

是因为office365的安全原因,需要启用startTLS机制。
代码中加入

1
email.setStartTLSEnabled(true);

可以解决

0x02

1
Sending the email to the following server failed : smtp.partner.outlook.cn:587

telnet这个端口,是联通的。
邮箱的账号密码也没问题。
试了几次都是这个错误。
后来调试,打开email.setDebug(true);突然就好了。

总结

主要使用SimpleEmail这个类

参考