Java Mail简介
一、简介
1、简介
JavaMail是一种用于编写和阅读电子消息(电子邮件)的API,它为发送和接收邮件提供了独立于协议和平台的框架。
JavaMail API支持以下协议:
- SMTP
Simple Mail Transfer Protocol:简单邮件传输协议,它提供了一种发送电子邮件的机制。
- POP3
Post Office Protocol - Version 3:邮局协议第三版,它提供了一种接收电子邮件的机制。它是Internet上大多数人用来获取邮件的机制,定义了对每个用户的单个邮箱的支持。
- IMAP
Internet Message Access Protocol:Internet消息访问协议,是一种用于接收消息的高级协议。它为每个用户提供多个邮箱的支持,此外,邮箱也可以被多个用户共享。
- MIME
Multipurpose Internet Mail Extensions:多用途Internet邮件扩展,它不是邮件传输协议,相反,它定义了传输的内容:消息的格式、附件等。
- NNTP和其他
第三方提供商提供了许多协议,例如:网络新闻传输协议(NNTP)、安全多用途Internet邮件扩展(S/MIME)等。
2、架构
Java应用程序使用JavaMail API来发送和接收电子邮件。JavaMail API使用SPI(服务提供者接口)为Java应用程序提供中介服务来处理不同的协议。
JavaMail API主要分为两个部分:
- 独立于应用程序的部分
应用程序使用API来发送和接收邮件消息,与使用的底层提供程序或协议无关。
- 服务相关部分
服务提供者接口(SPI)使用特定于协议的语言,例如:SMTP、POP、IMAP和网络新闻传输协议(NNTP)。
3、下载与安装
JavaMail API不是标准JDK的一部分,可以在官网下载javax.mail.jar
并添加到项目的构建路径中。如果是Maven项目,则只需添加以下依赖:
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
二、Hello World
发送电子邮件的步骤如下:
-
创建
javax.mail.Session
对象 -
创建
javax.mail.internet.MimeMessage
对象,并设置相关属性,例如:收件人电子邮件地址、电子邮件主题、电子邮件正文、附件等。 -
使用
javax.mail.Transport
发送电子邮件
创建Session会话的逻辑因SMTP服务器的类型而异,例如:如果SMTP服务器不需要任何身份验证,则只需要创建具有一些简单属性的Session对象即可。
样例:
public static void main(String[] args) {
final String fromEmail = "examplefrom@163.com";
//此处为授权码
final String password = "ABCDEFGHIJKLMN";
final String toEmail = "exampleto@126.com";
Properties properties = new Properties();
properties.put("mail.smtp.host", "smtp.163.com");
properties.put("mail.smtp.auth", "true");
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(fromEmail, password);
}
};
//创建会话
Session session = Session.getDefaultInstance(properties, authenticator);
try {
//编写消息
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromEmail));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmail));
message.setSubject("Hello World");
message.setText("Hello, how are you?");
//发送消息
Transport.send(message);
} catch (Exception e) {
e.printStackTrace();
}
}
运行结果:
三、发送HTML
public static void main(String[] args) {
final String fromEmail = "examplefrom@163.com";
//此处为授权码
final String password = "ABCDEFGHIJKLMN";
final String toEmail = "exampleto@126.com";
Properties properties = new Properties();
properties.put("mail.smtp.host", "smtp.163.com");
properties.put("mail.smtp.auth", "true");
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(fromEmail, password);
}
};
//创建会话
Session session = Session.getDefaultInstance(properties, authenticator);
try {
//编写消息
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromEmail));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmail));
String content = "<h1>你好,很高兴认识你!</h1>";
message.setSubject("HTML Message");
message.setContent(content, "text/html;charset=UTF-8");
//发送消息
Transport.send(message);
} catch (Exception e) {
e.printStackTrace();
}
}
运行结果:
四、发送附件
import java.io.File;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class AttachmentEmailTest {
public static void main(String[] args) {
final String fromEmail = "examplefrom@163.com";
//此处为授权码
final String password = "ABCDEFGHIJKLMN";
final String toEmail = "exampleto@126.com";
Properties properties = new Properties();
properties.put("mail.smtp.host", "smtp.163.com");
properties.put("mail.smtp.auth", "true");
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(fromEmail, password);
}
};
//创建会话
Session session = Session.getDefaultInstance(properties, authenticator);
try {
//编写消息
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromEmail));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmail));
message.setSubject("With Attachment");
//创建MimeBodyPart对象并设置文本消息
BodyPart textPart = new MimeBodyPart();
textPart.setText("您有一个附件待查收。");
//创建新的MimeBodyPart对象,并为该对象设置DataHandler
MimeBodyPart attachmentPart = new MimeBodyPart();
String filename = "wallpaper.jpg";
DataSource source = new FileDataSource(new File("G:/" + filename));
attachmentPart.setDataHandler(new DataHandler(source));
attachmentPart.setFileName(filename);
//创建 Multipart对象并将MimeBodyPart对象添加到该对象中
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(textPart);
multipart.addBodyPart(attachmentPart);
//将Multiplart对象设置到Message对象中
message.setContent(multipart);
//发送消息
Transport.send(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果: