JavaMail(五)邮件的使用

阅读: 评论:0

JavaMail(五)邮件的使用

JavaMail(五)邮件的使用

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

我们这个项目中,邮件正文部分使用的是开源富文本编辑器。前文中讲到过的数据表支持,会存放用户邮件信息,还有公司的文件系统会存放用户邮件附件信息。下面讲到的内容省去数据表数据表操作内容,这部分就是简单的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";
        String to = "123456@163";
        String subject = "test";
        String body = "test!!!";
        String smtpHost = "smtp.qq";

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

        // 创建Session实例对象
        Session session = DefaultInstance(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 = Transport("smtp");
        // 第2个参数需要填写的是QQ邮箱的SMTP的授权码,什么是授权码,它又是如何设置?
        t(from, "****************");
        // 发送,AllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
        transport.sendMessage(message, AllRecipients());
        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("ansport.protocol", "smtp");
    prop.setProperty("mail.smtp.auth", "true");
    // 1、创建session
    Session session = Instance(prop);
    Transport ts = null;
    // 2、通过session得到transport对象
    ts = Transport();
    // 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, AllRecipients());
    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("ansport.protocol", "smtp");
    prop.setProperty("mail.smtp.auth", "true");
    // 1、创建session
    Session session = Instance(prop);
    Transport ts = null;
    // 2、通过session得到transport对象
    ts = Transport();
    // 3、连上邮件服务器
    ts.connect(MAIL_SERVER_HOST, USER, PASSWORD);
    // 4、创建邮件
    Mime

本文发布于:2024-02-01 14:19:41,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170676838337205.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:邮件   JavaMail
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23