zoukankan      html  css  js  c++  java
  • 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("qfanliyan@163.com"); mailInfo.setPassword("");  // 您的邮箱密码,若你的邮箱开启了客户端授权密码,则此处是您的客户端授权密码 mailInfo.setFromAddress("qfanliyan@163.com"); mailInfo.setToAddress("ifanliyan@qq.com"); 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(); } } }

        发送成功截图:

  • 相关阅读:
    3dsmax不同版本 pyside qt UI 设置max窗口为父窗口的方法
    oracle中的数据库和实例
    oracle中的表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)
    什么是WSE
    Server.Transfer,Response.Redirect的区别
    Oracle 中的几个数据类型介绍
    oracle中的连接字符串
    Oracle中的 单引号 和 双引号
    接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?
    聚簇索引
  • 原文地址:https://www.cnblogs.com/flythinking/p/6850392.html
Copyright © 2011-2022 走看看