Fork me on GitHub

用Java来发邮件

强大的Java也是可以发邮件的

案例一、在自己本机上搭邮件服务器体验邮件的发送接收

预备条件:

  1. 先下载好Foxmail和易邮邮件服务器,可以直接百度下载,很方便,免费软件
  2. 案例中需要用到javax.mail的jar包,博主用的maven,此处附上maven坐标
    1
    2
    3
    4
    5
    <dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
    </dependency>

易邮邮件服务器是把自己本机作为邮件服务器,可以在本机上创建邮箱(自定义的邮箱,反正是服务器是你的电脑),切记本案例中易邮邮件服务器不能关闭,否则就和云服务器关闭了那样一个道理,用它创建的邮箱就不能用了。


Foxmail里面可以添加邮箱,属于本机的邮箱(如易邮邮件服务器创建的邮箱,本机有效,填写的服务器为localhost),和网上你申请的邮箱(如QQ邮箱、网易邮箱、Gmail邮箱等)均可,在此要注意QQ邮箱需要在网页打开邮箱->设置->账户->开启服务(在中间靠下的位置)打开POP3/SMTP服务和IMAP/SMTP服务,若没打开后面第二个案例就会连不上了。


一定要在Foxmail中将在易邮邮件服务器中创建的邮箱添加进去,用于查看接收邮件

终于开始撸本机邮件练习的代码部分了:

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
29
30
31
32
33
//1.创建连接对象,连接到邮箱服务器
Properties properties = new Properties();
Session session = Session.getInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
//用来连接邮箱服务器的一个邮箱账号(能连上本机邮箱服务器即可)
//此处用的是易邮邮件服务器创建的邮箱(邮箱密码不能错,否则连不上服务器)
return new PasswordAuthentication("user1@store.com", "123");
}
});
//1.1开启debug模式,可以看到邮件的发送状态(非必要)
session.setDebug(true);
//2.创建邮件对象
Message message = new MimeMessage(session);
try {
//2.1设置发件人
//此处设置的是接收者接收邮件上标注的发送者邮箱
//本人同样是用的在易邮邮件服务器上创建的虚拟邮箱
message.setFrom(new InternetAddress("service@store.com"));
//2.2设置收件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress("user2@store.com"));
//2.3设置邮件主题(标题)
message.setSubject("一封测试邮件");
//2.4设置邮件的正文
//此处设置的邮件内容是html代码,可以很方便的在里面书写html代码,加链接等等
message.setContent("<h1>邮件内容</h1>", "text/html;charset=UTF-8");
//3.发送一封邮件
Transport.send(message);
//此时邮件正在发送,如果debug打开则可以在控制台看到打印的信息
//发送成功后在Foxmail中点击菜单上的[收取],邮件发送完成可以收到新邮件并打开查看
} catch (Exception e) {
e.printStackTrace();
}

案例二、使用自己在网上申请的邮箱来通过代码发邮件

预备条件:准备至少两个邮箱(否则只能单个邮箱自己发给自己了)

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Properties prop = new Properties();
try {
//必须采用加密,不然发不了,会报异常说不安全
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable", "true");
prop.put("mail.smtp.ssl.socketFactory", sf);

//如果是使用126邮箱,此处改为smtp.126.com即可
prop.setProperty("mail.host", "smtp.qq.com");
prop.setProperty("mail.transport.protocol", "smtp");
//设置端口为465安全端口
prop.setProperty("mail.smtp.port", "465");
prop.setProperty("mail.smtp.auth", "true");
//使用JavaMail发送邮件的5个步骤
//1、创建session
Session session = Session.getInstance(prop);
//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
session.setDebug(true);
//2、通过session得到transport对象
Transport ts = session.getTransport();
//3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给smtp服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。
//注意这里不是使用的邮箱密码,而是邮箱设置中的授权码
//授权码在网页打开邮箱->设置->账户->开启服务旁边可以看到(如果是QQ邮箱则需要)
//如果是其余的邮箱,如网易126邮箱,则不需要授权码,此处使用邮箱和密码,即可连接服务器
ts.connect("smtp.qq.com", "******@qq.com", "******zhmj*****");
//4、创建邮件
Message message = new MimeMessage(session);
//设置发件人
message.setFrom(new InternetAddress("******@qq.com"));
//设置收件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress("******@126.com"));
message.setSubject("测试邮件");
//设置邮件的正文
//同上设置的html代码内容的邮件
message.setContent("<h1>***测试邮件</h1>", "text/html;charset=UTF-8");
//5、发送邮件
ts.sendMessage(message, message.getAllRecipients());
ts.close();
//本案例中演示用的博主的qq邮箱向126邮箱发送邮件
//切记QQ邮箱的特殊性,打开POP3/SMTP和IMAP/SMTP服务,以及使用授权码,Properties要设置SSL安全连接
//连接服务器一定是发送邮件的邮箱的所在服务器
} catch (Exception e) {
e.printStackTrace();
}
-------------本文结束感谢您的阅读-------------
如果您对博主的原创满意,欢迎您继续支持下博主~