上一篇讲了使用JavaMail发送普通邮件(【Mail】JavaMail介绍及发送邮件(一)),本例讲发送复杂的邮件(带有附件的邮件)

生成一封复杂的邮件

  1.   新建一个JavaWeb的Maven工程,引入javamail.jar包,maven引用如下:

     <!-- javamail -->
    <dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
    </dependency>
  2. 新建邮件的结构图,以及邮件MIME关系图如下
        
  3. 新建一个Demo3.java,如下:
     package com.hd.javamail;
    
     import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.Properties; import javax.activation.DataHandler;
    import javax.activation.DataSource;
    import javax.activation.FileDataSource;
    import javax.mail.Address;
    import javax.mail.MessagingException;
    import javax.mail.Multipart;
    import javax.mail.Session;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;
    import javax.mail.internet.MimeUtility; import com.sun.mail.util.MimeUtil; /**
    *
    * @author H__D
    * @date 2016年12月6日 下午7:38:33
    *
    */
    public class Demo3 { /**
    * 生成一份本地的邮件
    * @param args
    * @throws MessagingException
    * @throws IOException
    */
    public static void main(String[] args) throws MessagingException, IOException {
    //环境
    Session session = Session.getDefaultInstance(new Properties()); //邮件
    MimeMessage msg = new MimeMessage(session);
    //设置主题
    msg.setSubject("test123456");
    //发件人,注意中文的处理
    msg.setFrom(new InternetAddress("\"" + MimeUtility.encodeText( "某某") + "\"<xxxxxx@163.com>"));
    //设置邮件回复人
    msg.setReplyTo(new Address[]{new InternetAddress("123456@163.com")}); //整封邮件的MINE消息体
    MimeMultipart msgMultipart = new MimeMultipart("mixed");//混合的组合关系
    //设置邮件的MINE消息体
    msg.setContent(msgMultipart); //附件1
    MimeBodyPart attch1 = new MimeBodyPart();
    //附件2
    MimeBodyPart attch2 = new MimeBodyPart();
    //正文内容
    MimeBodyPart content = new MimeBodyPart(); //把内容,附件1,附件2加入到 MINE消息体中
    msgMultipart.addBodyPart(attch1);
    msgMultipart.addBodyPart(attch2);
    msgMultipart.addBodyPart(content); //把文件,添加到附件1中
    //数据源
    DataSource ds1 = new FileDataSource(new File("C:/Users/H__D/Desktop/1.txt"));
    //数据处理器
    DataHandler dh1 = new DataHandler(ds1 );
    //设置第一个附件的数据
    attch1.setDataHandler(dh1);
    //设置第一个附件的文件名
    attch1.setFileName("file1.jpg"); //把文件,添加到附件2中
    DataSource ds2 = new FileDataSource(new File("C:/Users/H__D/Desktop/2.txt"));
    DataHandler dh2 = new DataHandler(ds2 );
    attch2.setDataHandler(dh2);
    attch2.setFileName(MimeUtility.encodeText( "文件2.jpg")); //正文(图片和文字部分)
    MimeMultipart bodyMultipart = new MimeMultipart("related");
    //设置内容为正文
    content.setContent(bodyMultipart); //html代码部分
    MimeBodyPart htmlPart = new MimeBodyPart();
    //html中嵌套的图片部分
    MimeBodyPart imgPart = new MimeBodyPart(); //正文添加图片和html代码
    bodyMultipart.addBodyPart(htmlPart);
    bodyMultipart.addBodyPart(imgPart); //把文件,添加到图片中
    DataSource imgds = new FileDataSource(new File("C:/Users/H__D/Desktop/logo.png"));
    DataHandler imgdh = new DataHandler(imgds );
    imgPart.setDataHandler(imgdh);
    //说明html中的img标签的src,引用的是此图片
    imgPart.setHeader("Content-Location", "http://sunteam.cc/logo.jsg"); //html代码
    htmlPart.setContent("<span style='color:red'>中文呵呵</span><img src=\"http://sunteam.cc/logo.jsg\">","text/html;charset=utf-8"); //生成文件邮件
    msg.saveChanges(); //输出
    OutputStream os = new FileOutputStream("C:/Users/H__D/Desktop/demo.eml");
    msg.writeTo(os);
    os.close();
    } }
  4. 运行main方法,等到邮件文件。可以使用记事本和Foxmail打开效果如下:
    记事本效果:

    Foxmai效果: 

发送本地邮件文件

  •   新建一个Demo4.类,如下:

     package com.hd.javamail;
    
     import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.util.Properties; import javax.mail.Authenticator;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage; /**
    *
    * @author H__D
    * @date 2016年12月6日 下午7:51:43
    *
    */
    public class Demo4 {
    public static void main(String[] args) throws FileNotFoundException, MessagingException {
    // 属性对象
    Properties properties = new Properties();
    // 开启debug调试 ,打印信息
    properties.setProperty("mail.debug", "true");
    // 发送服务器需要身份验证
    properties.setProperty("mail.smtp.auth", "true");
    // 发送服务器端口,可以不设置,默认是25
    properties.setProperty("mail.smtp.port", "25");
    // 发送邮件协议名称
    properties.setProperty("mail.transport.protocol", "smtp");
    // 设置邮件服务器主机名
    properties.setProperty("mail.host", "smtp.163.com");
    // 环境信息
    Session session = Session.getInstance(properties, new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
    // 在session中设置账户信息,Transport发送邮件时会使用
    return new PasswordAuthentication( "xxxx@163.com", "xxxxx");
    }
    }); //读取本地邮件
    Message message = new MimeMessage(session, new FileInputStream(new File("C:/Users/H__D/Desktop/demo.eml"))); //发送邮件
    Transport.send(message, InternetAddress.parse("123456@qq.cn") );
    }
    }

  

【Mail】JavaMail发送带附件的邮件(二)的更多相关文章

  1. 使用JavaMail发送带附件的邮件

    所需jar包 链接:http://pan.baidu.com/s/1dFo4cDz 密码:akap 工具类: package com.javamail.utils; import java.util. ...

  2. (转)用javamail发送带附件的邮件

    本文转载自:http://redleaf.iteye.com/blog/78217 mail.java 代码 package mail; import java.util.* ; import jav ...

  3. UiPath: Send SMTP Mail Message 发送带附件的邮件

    Tips:关于Hotmail的server和port的获取方式,请参考以下链接 https://support.office.com/en-us/article/Server-settings-you ...

  4. [SpringBoot] - 发送带附件的邮件

    <!--发送email依赖--> <dependency> <groupId>org.springframework.boot</groupId> &l ...

  5. java发送带附件的邮件

    /** * java发送带附件的邮件 * 周枫 * 2013.8.10 */ package com.dsideal.Util; import javax.mail.*; import javax.m ...

  6. 利用Python+163邮箱授权码发送带附件的邮件

    背景 前段时间写了个自动爬虫的脚本,定时在阿里云服务器上执行,会从某个网站上爬取链接保存到txt文本中,但是脚本不够完善,我需要爬虫完毕之后通过邮件把附件给我发送过来,之前写过一个<利用Pyth ...

  7. C#发送带附件的邮件的代码

    如下的代码是关于C#发送带附件的邮件的代码. MailMessage m = new MailMessage();m.Subject = "File attachment!";m. ...

  8. 接口测试基础——第2篇smtplib发送带附件的邮件

    我先给大家补充一个用QQ发送纯文本电子邮件的代码,用QQ的朋友可以参考一下: # coding=utf-8 import smtplib from email.mime.text import MIM ...

  9. spring boot:发送带附件的邮件和html内容的邮件(以163.com邮箱为例/spring boot 2.3.2)

    一,网站哪些情况下需要发送电子邮件? 作为一个电商网站,以下情况需要发邮件通知用户: 注册成功的信息 用邮箱接收验证码 找回密码时发链接 发送推广邮件 下单成功后的订单通知 给商户的对账单邮件 说明: ...

随机推荐

  1. C# 异常处理 <-> 连接远程数据库遇到的问题

    PS : 移植类库需要重新生成解决方案:(要不然不能将类库添加进项目)

  2. 磁盘阵列(RAID)实例

    raid技术分类可以分为基于软件raid技术和基于硬件raid技术 raid又分为raid-0.raid-1.raid-5和raid-10 Raid有”廉价磁盘冗余阵列”的意思,就是利用多块廉价的硬盘 ...

  3. RegExp对象

    RegExp()构造函数带有两个字符串参数,其中第二个是可选的,如果提供第二个参数,它就指定正则表达式的修饰符.第一个函数包含正则表达式的主题部分,也就是正则表达式直接量中两条斜线之间的文本.无论是字 ...

  4. Web 项目中分享到微博、QQ空间等分享功能

    Web 项目中分享到微博.QQ空间等分享功能 网上有很多的模板以及代码,但是有很多都不能分享内容,简单的测试了下: 以新浪微博为例,文本框中的内容是title属性,下面的链接是url属性,如果你的链接 ...

  5. Ajax完整结构和删除

    1.ajax完整结构 注意:(1)最后一个没有"," (2)ajax对网速要求高,最好有各种提示和使用按钮(可使其失效,防止重复加载) $.ajax({ url: "aj ...

  6. SQL Server查询结果插入表

    a) 插入新表 select * into newtable from table b) 插入已经存在的表 insert into table select * from table2 where.. ...

  7. Python os模块之文件操作

    基本概念:C:\\haoguo.txt 路径: C:\\ 文件名: haoguo 后缀名:.txt 1. 文件名与后缀分离 2. 路径与文件分离 3. 获取当前路径 4. 文件名与后缀合并 5. 路径 ...

  8. SWT组件添加事件的四种方式

    在我们CS日常开发过程中会经常去为组件添加事件,我们常用的为AWT与SWT.SWT的事件模型是和标准的AWT基本一样的.下面将按照事件的四种写法来实现它. 一.匿名内部类的写法 new MouseAd ...

  9. modelsim 中 WAVE窗口中能不能只显示变量名,而不显示路径

    可以的,在wave窗口左下角有一个黑色的logo,你点击它就可以省电路径,只显示port名称,再点击就切换回来了,如图红色圈圈标记的logo,你可以试试!

  10. [OC笔记] protocol之我的见解

    OC中的protocol就是和JAVA中interface差不多的东西,但是又不是完全一样的.这个protocol常用来实现委托,也就是自己不实现,当事件产生的时候去回调委托者. 让委托者去执行响应的 ...