JavaMail(五)邮件的使用

本文详细介绍了使用JavaMail进行邮件操作的各个方面,包括邮件草稿、发送、接收、回复、转发和附件处理。提供了发送纯文本、HTML内容及带有附件的邮件的示例代码,以及邮件收件的实现。同时,讨论了处理大量邮件和附件时的策略,如限制收取日期、采用定时任务和异步处理。
摘要由CSDN通过智能技术生成

本章内容将进入到实战的环节。将会介绍邮件草稿、发送、收取、回复、转发、附件操作、解析工具类等内容。

我们这个项目中,邮件正文部分使用的是开源富文本编辑器。前文中讲到过的数据表支持,会存放用户邮件信息,还有公司的文件系统会存放用户邮件附件信息。下面讲到的内容省去数据表数据表操作内容,这部分就是简单的CRUD。

一、邮件草稿

草稿的意思,就是将用户编辑的邮件信息保存到数据库中,并给它一个状态,下次用户打开草稿箱指定邮件时,去数据库中查询并回填相应信息

二、发送邮件

JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送协议的底层实施细节,应用程序调用这个类中的方法就可以把Message对象中封装的邮件数据发送到指定的SMTP服务器。使用JavaMail发送邮件时设计到的主要API之间的工作关系如下所示:

1、从Session对象中获得实现了某种邮件发送协议的Transport对象;

2、使用Session对象创建Message对象,并调用Message对象的方法封装邮件数据;

3、连接指定的SMTP服务器,调用Transport对象中的邮件发送方法Message对象中封装的邮件数据。

这部分内容网上现成的例子很多,这里只摘录了一些基本的实现方式,如果您需要具体使用,还要麻烦去网上搜索相应需求的具体操作帖子,不过无外乎就是纯文本、html、附件这些个情况。当然一封复杂的邮件体(多层嵌套)还是很复杂的,需要我们用心去处理。复杂内容,主要使用的是MimeMessage,MimeBodyPart和MimeMultipart这3个主要的类,前文中有所介绍。

发送纯文本邮件

import java.util.Date;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SendTextMail {
    public static void main(String[] args) throws Exception {
        String from = "123456@qq.com";
        String to = "123456@163.com";
        String subject = "test";
        String body = "test!!!";
        String smtpHost = "smtp.qq.com";

        Properties props = new Properties();
        props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)
        props.setProperty("mail.smtp.host", smtpHost); // 发件人的邮箱的 SMTP服务器地址
        props.setProperty("mail.smtp.auth", "true"); // 请求认证,参数名称与具体实现有关

        // 创建Session实例对象
        Session session = Session.getDefaultInstance(props);
        // 创建MimeMessage实例对象
        MimeMessage message = new MimeMessage(session);
        // 设置发件人
        message.setFrom(new InternetAddress(from));
        // 设置收件人
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
        // 设置发送日期
        message.setSentDate(new Date());
        // 设置邮件主题
        message.setSubject(subject);
        // 设置纯文本内容的邮件正文
        message.setText(body);
        // 保存并生成最终的邮件内容
        message.saveChanges();
        // 设置为debug模式, 可以查看详细的发送 log
        session.setDebug(true);
        // 获取Transport对象
        Transport transport = session.getTransport("smtp");
        // 第2个参数需要填写的是QQ邮箱的SMTP的授权码,什么是授权码,它又是如何设置?
        transport.connect(from, "****************");
        // 发送,message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    }
}

发送html内容的邮件

public static void main(String[] args) throws Exception {
    Properties prop = new Properties();
    prop.setProperty("mail.debug", "true");
    prop.setProperty("mail.host", MAIL_SERVER_HOST);
    prop.setProperty("mail.transport.protocol", "smtp");
    prop.setProperty("mail.smtp.auth", "true");
    // 1、创建session
    Session session = Session.getInstance(prop);
    Transport ts = null;
    // 2、通过session得到transport对象
    ts = session.getTransport();
    // 3、连上邮件服务器
    ts.connect(MAIL_SERVER_HOST, USER, PASSWORD);
    // 4、创建邮件
    MimeMessage message = new MimeMessage(session);
    // 邮件消息头
    message.setFrom(new InternetAddress(MAIL_FROM)); // 邮件的发件人
    message.setRecipient(Message.RecipientType.TO, new InternetAddress(MAIL_TO)); // 邮件的收件人
    message.setRecipient(Message.RecipientType.CC, new InternetAddress(MAIL_CC)); // 邮件的抄送人
    message.setRecipient(Message.RecipientType.BCC, new InternetAddress(MAIL_BCC)); // 邮件的密送人
    message.setSubject("测试HTML邮件"); // 邮件的标题
    String htmlContent = "<h1>Hello</h1>" + "<p>显示图片<img src='cid:abc.jpg'>1.jpg</p>";
    MimeBodyPart text = new MimeBodyPart();
    text.setContent(htmlContent, "text/html;charset=UTF-8");
    MimeBodyPart image = new MimeBodyPart();
    DataHandler dh = new DataHandler(new FileDataSource("D://[04]Temp//img//1.jpg"));
    image.setDataHandler(dh);
    image.setContentID("abc.jpg");
    // 描述数据关系
    MimeMultipart mm = new MimeMultipart();
    mm.addBodyPart(text);
    mm.addBodyPart(image);
    mm.setSubType("related");
    message.setContent(mm);
    message.saveChanges();
    // 5、发送邮件
    ts.sendMessage(message, message.getAllRecipients());
    ts.close();
}

发送待附件的邮件

public static void main(String[] args) throws Exception {
    Properties prop = new Properties();
    prop.setProperty("mail.debug", "true");
    prop.setProperty("mail.host", MAIL_SERVER_HOST);
    prop.setProperty("mail.transport.protocol", "smtp");
    prop.setProperty("mail.smtp.auth", "true");
    // 1、创建session
    Session session = Session.getInstance(prop);
    Transport ts = null;
    // 2、通过session得到transport对象
    ts = session.getTransport();
    // 3、连上邮件服务器
    ts.connect(MAIL_SERVER_HOST, USER, PASSWORD);
    // 4、创建邮件
    MimeMessage message = new MimeMessage(session);<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值