一、引入POM文件
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
二、Java实现
public class FirstMail {
public static void main(String[] args) throws AddressException, MessagingException {
Long start = System.currentTimeMillis();
// 设置属性
Properties props = new Properties();
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.transport.protocol", "smtp");
// 用SMTP协议发送Email时通常要设置mail.smtp.host(mail.protocol.host协议特定邮件服务器名)属性
props.put("mail.smtp.host","smtp.163.com");// smtp服务器地址
// javax.mail.Session保存邮件系统的配置属性和提供用户验证的信息,发送email首先要获取session对象
// Session.getInstance(java.util.Properties)获取非共享的session对象
// Session.getDefaultInstance(java.utilProperties)获取共享的session对象
Session session = Session.getInstance(props);
session.setDebug(true);
// 配置邮件会话之后,要编写消息
// 要编写消息就要生成javax.mail.Message子类的实例
// 或对Internet邮件使用javax.mail.interet.MimeMessage类
Message msg = new MimeMessage(session);
// 消息发送者、日期、主题
msg.setSubject("第一封测试邮件");
msg.setText("你好!这是一封测试邮件");
msg.setSentDate(new Date());
// 设置消息的接受者与发送者(寻址接收)
msg.setFrom(new InternetAddress("xuli1005@163.com"));//发件人邮箱(我的163邮箱)
msg.setRecipient(Message.RecipientType.TO,
new InternetAddress("1176922337@qq.com")); //收件人邮箱(我的QQ邮箱)
msg.saveChanges();
// 发送Email,这里以文本消息为例 javax.mail.Transport类来发送消息。
// 这时Transport对象与相应传输协议通信,这里是SMTP协议
Transport transport = session.getTransport();
// 登录邮箱 。配置发件人邮箱,密码或授权码
transport.connect("xuli1005@163.com","xxxxxx");
//发送邮件
transport.sendMessage(msg, msg.getAllRecipients());
System.out.println("邮件发送成功...");
transport.close();
System.out.println("发送一封邮件耗时:"+(System.currentTimeMillis()-start)+"ms");
}
}
三、日志输出
DEBUG: setDebug: JavaMail version 1.4.7
DEBUG: getProvider() returning
javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.163.com", port 25, isSSL false
220 163.com Anti-spam GT for Coremail System (163com[20141201])
DEBUG SMTP: connected to host "smtp.163.com", port: 25
EHLO ZV7PFJKWMI36W1H
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-coremail
1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrwCj_RUCa0xDrUUUUj
250-STARTTLS
250 8BITMIME
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg "PLAIN"
DEBUG SMTP: Found extension "coremail", arg
"1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrwCj_RUCa0xDrUUUUj"
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded
DEBUG SMTP: use8bit false
MAIL FROM:<xuli1005@163.com>
250 Mail OK
RCPT TO:<1176922337@qq.com>
250 Mail OK
DEBUG SMTP: Verified Addresses
DEBUG SMTP: 1176922337@qq.com
DATA
354 End data with <CR><LF>.<CR><LF>
Date: Mon, 30 Jul 2018 17:32:18 +0800 (CST)
From: xuli1005@163.com
To: 1176922337@qq.com
Message-ID: <317574433.0.1532943138175.JavaMail.Administrator@ZV7PFJKWMI36W1H>
Subject: =?UTF-8?B?56ys5LiA5bCB5rWL6K+V6YKu5Lu2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64
5L2g5aW9Iei/meaYr+S4gOWwgea1i+ivlemCruS7tg==
.
250 Mail OK queued as smtp7,C8CowAB3qzUi215bTjm6LQ--.18449S2 1532943148
邮件发送成功...
QUIT
221 Bye
发送一封邮件耗时:9685ms
四、总结
java的邮件分发还有其他类型,这里是最简单的文本类型,但是原理都差不多。可以看到这里发送一次邮件的时间还是比较长的,我们真正在项目中的实现肯定是要使用多线程的方式。