JavaMail(二):利用JavaMail发送复杂邮件

上一篇文章我们学习了利用JavaMail发送简单邮件,这篇文章我们利用JavaMail发送稍微复杂一点的邮件(包含文本、图片、附件)。这里只贴出核心代码,其余代码可参考JavaMail(一):利用JavaMail发送简单邮件

封装发送邮件代码

/**
 * 封装发送邮件代码
 * @author fly
 * @时间 2017-05-09
 *
 */
public class Email {
    /**
     * 创建并发送一封包含文本、图片、附件的复杂邮件
     * @throws Exception
     */
    public static void sendComplexMail(MailSenderInfo mailInfo) throws Exception{
        // 判断是否需要身份认证
        MyAuthenticator authenticator = null;
        Properties pro = mailInfo.getProperties();

        if(mailInfo.isValidate()){
             // 如果需要身份认证,则创建一个密码验证器
            authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
        }
        // 根据邮件会话属性和密码验证器构造一个发送邮件的session
        Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
        // 根据session创建一个邮件消息
        Message mailMessage = new MimeMessage(sendMailSession);
        // 创建邮件发送者地址
        Address from = new InternetAddress(mailInfo.getFromAddress());
        // 设置邮件消息的发送者
        mailMessage.setFrom(from);
        // 创建邮件的接收者地址,并设置到邮件消息中
        Address to = new InternetAddress(mailInfo.getToAddress());
        // Message.RecipientType.TO属性表示接收者的类型为TO
        mailMessage.setRecipient(Message.RecipientType.TO, to);
        // 设置邮件消息的主题
        mailMessage.setSubject(mailInfo.getSubject());
        // 设置邮件消息发送的时间
        mailMessage.setSentDate(new Date());

        MimeBodyPart image = new MimeBodyPart();
        //DataHandler为图片  FileDataSource为图片数据源 (与处理附件比较类似:区别在于您必需通过设置 MimeMultipart 构造器中的子类型(或者说用 setSubType())告知 MimeMultipart 各个相关部件,并设置图像的 Content-ID ,作为图像的 src 在 img 标记中使用)
        DataHandler dh = new DataHandler(new FileDataSource("stock-photo-189028703.jpg"));
        image.setDataHandler(dh);
        //用一个给定的 cid URL 引用图像,其中 cid 是图像附件 Content-ID 头的引用 setContent时用到这个cid
        image.setContentID("tupian");

        BodyPart text = new MimeBodyPart();
        text.setContent("美丽的图片<br/><img src=‘cid:" + image.getContentID() + "‘/>", "text/html;charset=UTF-8");

        MimeMultipart textImageRelated = new MimeMultipart();
        textImageRelated.addBodyPart(text);
        textImageRelated.addBodyPart(image);
        textImageRelated.setSubType("related");

        BodyPart textImage = new MimeBodyPart();
        textImage.setContent(textImageRelated);

        BodyPart attachment = new MimeBodyPart();
        //DataHandler为附件  FileDataSource为附件数据源     如果从 URL 中读时,附件的数据源是 URLDataSource
        DataHandler dh2 = new DataHandler(new FileDataSource(mailInfo.getAttachFileNames()[0]));
        attachment.setDataHandler(dh2);
        attachment.setFileName(MimeUtility.encodeText(dh2.getName()));

        MimeMultipart mainPart = new MimeMultipart();
        mainPart.addBodyPart(textImage);
        mainPart.addBodyPart(attachment);
        mainPart.setSubType("mixed");

        mailMessage.setContent(mainPart);
        // 连接邮件服务器、发送邮件、关闭连接
        Transport.send(mailMessage);
    }
}

测试代码:

public class JavaMailTest {

    public static void main(String[] args) {    //设置邮件相关信息
        MailSenderInfo mailInfo = new MailSenderInfo();
        mailInfo.setMailServerHost("smtp.163.com");
        mailInfo.setMailServerPort("25");
        mailInfo.setValidate(true);
        mailInfo.setUserName("[email protected]");
        mailInfo.setPassword("");         // 您的邮箱密码,若你的邮箱开启了客户端授权密码,则此处是您的客户端授权密码
        mailInfo.setFromAddress("[email protected]");
        mailInfo.setToAddress("[email protected]");
        mailInfo.setSubject("这是一封测试邮件");
        mailInfo.setContent("你好!这是一封测试邮件");
         String[] fileName = {"手艺人.docx"};
         mailInfo.setAttachFileNames(fileName);
        try {
            //Email.sendTextMail(mailInfo);
            //Email.sendHtmlMail(mailInfo);
            Email.sendComplexMail(mailInfo);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

发送成功截图:

时间: 2024-10-27 14:10:45

JavaMail(二):利用JavaMail发送复杂邮件的相关文章

JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件

一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔. 邮件头包含的内容有: from字段  --用于指明发件人 to字段      --用于指明收件人 subject字段  --用于说明邮件主题 cc字段     -- 抄送,将邮件发送给收件人的同时抄送给另一个收件人,收件人可以看到邮件抄送给了谁 bcc字段   -- 密送,将邮件发送给收件人的同时将邮件秘密发送给另一个收件人,收件人

(转载)JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件

博客源地址:http://www.cnblogs.com/xdp-gacl/p/4216311.html 一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔. 邮件头包含的内容有: from字段  --用于指明发件人 to字段      --用于指明收件人 subject字段  --用于说明邮件主题 cc字段     -- 抄送,将邮件发送给收件人的同时抄送给另一个收件人,收件人可以看

spring+velocity+javamail发送模板邮件

有时候当我们注册完的时候系统会提示有一封邮件发送到了你的邮箱,如何做呢? 就要用到spring+velocity+javamail这3个玩意,其实只用了spring,因为其他2个都被spring集成了. 先看代码 package com.worthtech.app.util; import java.io.File; import java.util.Map; import javax.mail.MessagingException; import javax.mail.internet.Mim

javamail模拟邮箱功能发送电子邮件-中级实战篇【新增附件发送方法】(javamail API电子邮件实例)

引言: 此篇是紧随上篇文章而封装出来的,阅读本篇章建议先阅读上一篇  --> javamail模拟邮箱功能发送电子邮件-基础实战篇 上一篇章简单讲解了javamail发送邮件的基本基础和用到的几个类,并且所有初始化和发送方法都封装在一个类里面(为了代码方便演示),本章节将对各个模块进行拆分和优化,并且引入附件发送的方法 要想邮件发送附件,就要引入两个新类  Multipart 和 BodyPart 两类 Multipart(报文部件容器) 实则为一个报文容器,而邮件消息  Msage 是由各个子

javamail模拟邮箱功能发送电子邮件-基础篇(java电子邮件实例)

引言: JavaMail 是一种可选的.能用于读取.编写和发送电子消息的包 JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html JavaMail  API中包含了多种邮件传输协议: SMTP   POP(最新为pop3)  IMAP  MIME 四大类  (本章主要讲解常用的 SMTP) 该API的几大核心类:会话(session).消息(message).地址(address).验证程序(Au

JavaMail实现带附件的收发邮件

一.前言 参考博客: http://blog.csdn.net/xietansheng/article/details/51722660 http://www.cnblogs.com/HigginCui/p/5764509.html 关于JavaMail实现带附件的收发邮件网上的例子很多,自己兴趣来了,自己也动手尝试了一番. 其中问题大部分在代码注释中,这里也就不过多描述了,直接上代码作为记录,方便以后查阅. 二.工程目录 三.工程代码 1.Mail.java package com.xie.u

Spring集成JavaMail并利用线程池发送邮件

我们系统存在大量发送邮件的需求,项目使用的是Spring框架而JavaMail也能很好的跟Spring进行集成,由于发送邮件最好还是使用异步进行发送,所以这里就采用线程池+JavaMail进行邮件发送,下面看具体代码实现: Step1.引入JavaMail <mail.version>1.4.7</mail.version> <dependency> <groupId>javax.mail</groupId> <artifactId>

JavaMail入门第五篇 解析邮件

上一篇JavaMail入门第四篇 接收邮件中,控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类型的数据处理模块,我们只需要在把数据流传输给浏览器之前明确地指定该数据流属于哪种数据类型即可,之后一切的解析操作由浏览器自动帮我们完成.下面这张图可以很好的说明解析邮件的步骤 1.调用Message对象的getFrom.getSubject等方法,可以得到邮件的发件人和主题等信息,调用getCont

JavaMail学习(带附件发送)

以前觉得JavaMail是一种很高大上玩意,所以就在网上找了关于JavaMail的知识,其实也没想像中那么高大上,我就只学习了发送邮件的部分,那么我就来贴上自己写的代码啦,具体实现代码有详细的解释了 第一个是发送普通邮件 // 发送普通邮件 public static void sendTextmail() throws MessagingException { // 第一步.获取Session(注:这个是javax.mail下的类) /* * public static Session get