1)Session类:该类用于创建一个和邮箱服务器的连接和验证登录
2)MimeMessage类:该类代表一封邮件(收件人,发件人,主题,正文)
3)Traspoart类:发送邮件
运行前提:发送的那个邮箱得开启pop3/smtp服务,本人第一次没有开启,报错javax.mail.AuthenticationFailedException,查阅http://blog.csdn.net/zouxucong/article/details/60578824
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* 第一个javamail发送邮件的案例
*
* @author APPle
*
*/
public class TestMail {
public static void main(String[] args) throws Exception{
// 1)创建一个Session对象,连接和登录服务器
/**
* 参数一: 本次连接的配置。 参数二: 返回对用户名和密码base64加密的对象
*/
Properties props = new Properties();
// 1.1连接的发邮件的服务器地址
props.setProperty("mail.host", "smtp.163.com");
// 1.2 指定进行验证登录
props.setProperty("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(" 邮箱账号 ", " 邮箱密码 ");
}
});
// 打开调用
session.setDebug(true);
// 2)在本次连接上, 创建一封邮件
MimeMessage mail = new MimeMessage(session);
// 3)设置邮件内容
/// 3.1 设置发件人
mail.setFrom(new InternetAddress(" 与上面的邮箱账号一样 "));
// 3.2 设置收件人
/**
* 参数一: 发送方法 发送: TO A->B 抄送: CC A->B C 密送: BCC A->B C 参数二: 发送的地址
*/
mail.setRecipient(RecipientType.TO, new InternetAddress(" 邮箱目的地址 "));
// 3.3 设置主题
mail.setSubject("这是一封javamail的测试邮件");
// 3.4 设置内容
/**
* 参数二: 邮件的内容格式。如 普通文本,html方式
*/
mail.setContent("这是邮件的正文内容", "text/plain;charset=utf-8"); // 可以写一些HTML语言
// 4)发送邮件
Transport.send(mail);
}
}
运行结果:
DEBUG: setDebug: JavaMail version 1.5.0
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
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 LAPTOP-V7JF80R6
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UF2ZoxQUCa0xDrUUUUj
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 "1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UF2ZoxQUCa0xDrUUUUj"
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:<邮件来源>
250 Mail OK
RCPT TO:<邮件目的地>
250 Mail OK
DEBUG SMTP: Verified Addresses
DEBUG SMTP: 邮件目的地
DATA
354 End data with <CR><LF>.<CR><LF>
From: 邮件来源
To: 邮件目的地
Message-ID: <这个不知道@smtp.163.com>
Subject: =?GBK?B?1eLKx9K7t+JqYXZhbWFpbLXEsuLK1NPKvP4=?=
MIME-Version: 1.0
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: base64
6L+Z5piv6YKu5Lu255qE5q2j5paH5YaF5a65
.
250 Mail OK queued as smtp4,DtGowABXr+OZ3LBagFzyAQ--.11124S2 1521540249
QUIT
221 Bye
补充:
带有附件的邮件:
原理图:
/**
* 内容包含附件
*/
//一个附件对象
//1)创建一个MimeBodyPart对象
File file = new File(" 文件url");
MimeBodyPart part = new MimeBodyPart();
DataSource source = new FileDataSource(file);
DataHandler handler = new DataHandler(source);
part.setDataHandler(handler);
//设置文件名,并设置中文编码
part.setFileName( MimeUtility.encodeText(file.getName()) );
File file2 = new File(" 文件url");
MimeBodyPart part2 = new MimeBodyPart();
DataSource source2 = new FileDataSource(file2);
DataHandler handler2 = new DataHandler(source2);
part2.setDataHandler(handler2);
//设置文件名,并设置中文编码
part2.setFileName( MimeUtility.encodeText(file2.getName()) );
//该对象用于封装多个附件对象
//把MimeBodyPart对象放入MimeMultipart
MimeMultipart multipart = new MimeMultipart();
//添加一个附件
multipart.addBodyPart(part);
multipart.addBodyPart(part2);
//把MimeMultipart对象放入MimeMessage
mail.setContent(multipart);