Javax.mail是Sun公司提供的一组API,用于处理传输邮件的服务。该包提供了一系列的类和接口,可供开发者使用。在本文中,我们将对Javax.mail包的功能、用法、如何构造邮件、如何使用附件等方面进行详细介绍。
一、功能介绍
Javax.mail包提供的功能主要包括:
1、发送邮件:可以使用javax.mail.Session类创建一个连接,通过此连接发送邮件。
2、接收邮件:可以使用javax.mail.Folder类从邮箱中获取邮件信息,如邮件主题、发送者、接收时间等。
3、构造邮件:可以使用javax.mail.Message类构造邮件内容,包括邮件主题、邮件正文、附件等。
4、附件处理:可以使用javax.mail.Multipart类实现附件的添加和管理。
二、使用方法
1、发送邮件
Properties props = new Properties();
// 收发参数配置
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.host", "smtp.163.com");
props.setProperty("mail.smtp.port", "25");
// 需要认证
props.setProperty("mail.smtp.auth", "true");
Session session = Session.getInstance(props);
// 构建邮件
Message message = new MimeMessage(session);
message.setSubject("邮件主题");
message.setText("邮件正文");
message.setFrom(new InternetAddress("发送者邮件地址"));
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("接收者邮件地址"));
Transport transport = session.getTransport();
transport.connect("发送者邮件地址", "发送者邮件密码");
transport.sendMessage(message, message.getAllRecipients());
transport.close();
2、接收邮件
Properties props = new Properties();
props.setProperty("mail.store.protocol", "imap");
props.setProperty("mail.imap.host", "imap.163.com");
props.setProperty("mail.imap.port", "143");
Session session = Session.getDefaultInstance(props);
// 连接邮箱并打开收件箱
Store store = session.getStore();
store.connect("接收者邮箱地址", "接收者邮箱密码");
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
// 获取邮件信息
Message[] messages = folder.getMessages();
for (Message message : messages) {
System.out.println("主题:" + message.getSubject());
System.out.println("发送者:" + message.getFrom()[0]);
System.out.println("接收时间:" + message.getSentDate());
}
folder.close(false);
store.close();
3、构造邮件
Message message = new MimeMessage(session);
message.setSubject("邮件主题");
// 创建多重消息
Multipart multipart = new MimeMultipart();
// 创建文本消息
MimeBodyPart textBodyPart = new MimeBodyPart();
textBodyPart.setText("邮件正文");
multipart.addBodyPart(textBodyPart);
// 创建附件消息
MimeBodyPart attachBodyPart = new MimeBodyPart();
DataHandler dataHandler = new DataHandler(new FileDataSource("附件文件路径"));
attachBodyPart.setDataHandler(dataHandler);
attachBodyPart.setFileName("附件文件名");
multipart.addBodyPart(attachBodyPart);
// 将多重消息加入邮件中
message.setContent(multipart);
message.setFrom(new InternetAddress("发送者邮件地址"));
message.setRecipient(Message.RecipientType.TO, new InternetAddress("接收者邮件地址"));
Transport.send(message);
4、附件处理
MimeBodyPart attachBodyPart = new MimeBodyPart();
DataHandler dataHandler = new DataHandler(new FileDataSource("附件文件路径"));
attachBodyPart.setDataHandler(dataHandler);
attachBodyPart.setFileName("附件文件名");
multipart.addBodyPart(attachBodyPart);
三、其他常用功能
1、邮件主题中文乱码处理
message.setSubject(MimeUtility.encodeText("邮件主题","UTF-8","B")); // B代表base64编码
2、抄送及密送邮件
message.setRecipient(Message.RecipientType.CC, new InternetAddress("抄送者邮件地址"));
message.setRecipient(Message.RecipientType.BCC, new InternetAddress("密送者邮件地址"));
3、邮件回执处理
message.setHeader("Disposition-Notification-To", "发送者邮件地址");
message.setHeader("Return-Receipt-To", "发送者邮件地址");
4、通过SSL发送邮件
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.host", "smtp.163.com");
props.setProperty("mail.smtp.ssl.enable", "true");
Session session = Session.getInstance(props);
// 建立邮件连接
Transport transport = session.getTransport();
transport.connect("发送者邮件地址", "发送者邮件密码");
// 发送邮件
transport.sendMessage(message, message.getAllRecipients());
// 关闭连接
transport.close();
四、小结
Javax.mail是Sun公司提供的一个用于处理传输邮件的服务API。它支持发送和接收邮件、构造邮件内容以及附件处理等基本操作。在实际编程中,我们可以灵活运用这些API,实现人性化的邮件功能。