参照地址
1、JavaMail 介绍
JavaMail 是sun公司(现以被甲骨文收购)为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如前面所讲的SMTP,POP3,IMAP,还有MIME等。我们在使用JavaMail API 编写邮件时,无须考虑邮件的底层实现细节,只要调用JavaMail 开发包中相应的API类就可以了。
JavaMail 下载地址: https://github.com/javaee/javamail/releases
2、JavaMail API
JavaMail API 按照功能可以划分为如下三大类:
①、创建和解析邮件的API
②、发送邮件的API
③、接收邮件的API
以上三种类型的API在JavaMail 中由多个类组成,但是主要有四个核心类,我们在编写程序时,记住这四个核心类,就很容易编写出Java邮件处理程序。
Message 类:javax.mail.Message 类是创建和解析邮件的核心 API,这是一个抽象类,通常使用它的子类javax.mail.internet.MimeMessage 类。它的实例对象表示一份电子邮件。客户端程序发送邮件时,首先使用创建邮件的 JavaMail API 创建出封装了邮件数据的 Message 对象,然后把这个对象传递给邮件发送API(Transport 类) 发送。客户端程序接收邮件时,邮件接收API把接收到的邮件数据封装在Message 类的实例中,客户端程序在使用邮件解析API从这个对象中解析收到的邮件数据。
Transport 类:javax.mail.Transport 类是发送邮件的核心API 类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如 SMTP 协议,客户端程序创建好 Message 对象后,只需要使用邮件发送API 得到 Transport 对象,然后把 Message 对象传递给 Transport 对象,并调用它的发送方法,就可以把邮件发送给指定的 SMTP 服务器。
Store 类:javax.mail.Store 类是接收邮件的核心 API 类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如 POP3 协议,客户端程序接收邮件时,只需要使用邮件接收 API 得到 Store 对象,然后调用 Store 对象的接收方法,就可以从指定的 POP3 服务器获得邮件数据,并把这些邮件数据封装到表示邮件的 Message 对象中。
Session 类:javax.mail.Session 类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,例如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session 对象根据这些信息构建用于邮件收发的 Transport 和 Store 对象,以及为客户端创建 Message 对象时提供信息支持。
3、使用 JavaMail 发送简单的纯文本邮件
<dependency >
<groupId > com.sun.mail</groupId >
<artifactId > javax.mail</artifactId >
<version > 1.6.2</version >
</dependency >
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;
public class JavaEmailDemo {
public static void main (String[] args) throws Exception {
Properties props = new Properties ();
props.setProperty("mail.transport.protocol" , "smtp" );
props.setProperty("mail.smtp.host" , "smtp.qq.com" );
props.setProperty("mail.smtp.port" , "465" );
props.setProperty("mail.smpt.auth" , "true" );
props.setProperty("mail.smtp.socketFactory.class" , "javax.net.ssl.SSLSocketFactory" );
props.setProperty("mail.smtp.socketFactory.fallback" , "false" );
props.setProperty("mail.smtp.socketFactory.port" , "465" );
Session session = Session.getInstance(props);
session.setDebug(true );
Message message = createMessage(session, "888888@qq.com" , "666666@qq.com" );
Transport transport = session.getTransport();
transport.connect("888888@qq.com" , "aaaaaaa" );
transport.sendMessage(message, message.getAllRecipients());
transport.close();
System.out.println("发送成功" );
}
public static Message createMessage (Session session, String addresser, String receiver) throws Exception {
MimeMessage message = new MimeMessage (session);
Address address = new InternetAddress (addresser, "jack" , "utf-8" );
message.setFrom(addresser);
message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress (receiver, "rose普通收件人" , "utf-8" ));
message.setSubject("山鬼谣" , "utf-8" );
message.setContent("你被山西挖矿大学录取了,请于2月30日25时61分61秒,请及时到来." , "text/html;charset=utf-8" );
message.setSentDate(new Date ());
message.saveChanges();
return message;
}
}
4、使用 JavaMail 发送带图片、附件的邮件
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.*;
import java.io.File;
import java.util.Date;
import java.util.Properties;
public class JavaEmailWithAttachmentDemo {
public static void main (String[] args) throws Exception {
Properties props = new Properties ();
props.setProperty("mail.transport.protocol" , "smtp" );
props.setProperty("mail.smtp.host" , "smtp.qq.com" );
props.setProperty("mail.smtp.port" , "465" );
props.setProperty("mail.smpt.auth" , "true" );
props.setProperty("mail.smtp.socketFactory.class" , "javax.net.ssl.SSLSocketFactory" );
props.setProperty("mail.smtp.socketFactory.fallback" , "false" );
props.setProperty("mail.smtp.socketFactory.port" , "465" );
Session session = Session.getInstance(props);
session.setDebug(true );
Message message = createMessage(session, "8888888@qq.com" , "666666@qq.com" );
Transport transport = session.getTransport();
transport.connect("8888888@qq.com" , "nfkjfpkwtxipecec" );
transport.sendMessage(message, message.getAllRecipients());
transport.close();
System.out.println("发送成功" );
}
public static Message createMessage (Session session, String addresser, String receiver) throws Exception {
MimeMessage message = new MimeMessage (session);
Address address = new InternetAddress (addresser, "jack" , "utf-8" );
message.setFrom(addresser);
message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress (receiver, "rose普通收件人" , "utf-8" ));
message.setSubject("山鬼谣" , "utf-8" );
MimeBodyPart imageParat = new MimeBodyPart ();
DataSource dataSource = new FileDataSource ("JavaEmail/src/image/美女.jpg" );
DataHandler imageDataHandler = new DataHandler (dataSource);
imageParat.setDataHandler(imageDataHandler);
imageParat.setContentID("A" );
MimeBodyPart textPart = new MimeBodyPart ();
textPart.setContent("正文内容 image:<img src='cid:A'/>" , "text/html;charset=utf-8" );
MimeMultipart mmTextImage = new MimeMultipart ();
mmTextImage.addBodyPart(imageParat);
mmTextImage.addBodyPart(textPart);
mmTextImage.setSubType("related" );
MimeBodyPart textImageBodyPart = new MimeBodyPart ();
textImageBodyPart.setContent(mmTextImage);
MimeBodyPart attachment = new MimeBodyPart ();
DataHandler fileDataHandler = new DataHandler (new FileDataSource ("JavaEmail/src/image/变态.mp4" ));
attachment.setDataHandler(fileDataHandler);
attachment.setFileName(MimeUtility.encodeText(fileDataHandler.getName()));
MimeMultipart mm = new MimeMultipart ();
mm.addBodyPart(textImageBodyPart);
mm.addBodyPart(attachment);
mm.setSubType("mixed" );
message.setContent(mm, "text/html;charset=utf-8" );
message.setSentDate(new Date ());
message.saveChanges();
return message;
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步