【Mail】JavaMail发送带附件的邮件

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

生成一封复杂的邮件

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

    1 <!-- javamail -->
    2 <dependency>
    3     <groupId>javax.mail</groupId>
    4     <artifactId>mail</artifactId>
    5     <version>1.4.7</version>
    6 </dependency>
  2. 新建邮件的结构图,以及邮件MIME关系图如下
        
  3. 新建一个Demo3.java,如下:
      1 package com.hd.javamail;
      2
      3 import java.io.File;
      4 import java.io.FileOutputStream;
      5 import java.io.IOException;
      6 import java.io.OutputStream;
      7 import java.util.Properties;
      8
      9 import javax.activation.DataHandler;
     10 import javax.activation.DataSource;
     11 import javax.activation.FileDataSource;
     12 import javax.mail.Address;
     13 import javax.mail.MessagingException;
     14 import javax.mail.Multipart;
     15 import javax.mail.Session;
     16 import javax.mail.internet.InternetAddress;
     17 import javax.mail.internet.MimeBodyPart;
     18 import javax.mail.internet.MimeMessage;
     19 import javax.mail.internet.MimeMultipart;
     20 import javax.mail.internet.MimeUtility;
     21
     22 import com.sun.mail.util.MimeUtil;
     23
     24 /**
     25  *
     26  * @author H__D
     27  * @date 2016年12月6日 下午7:38:33
     28  *
     29  */
     30 public class Demo3 {
     31
     32     /**
     33      * 生成一份本地的邮件
     34      * @param args
     35      * @throws MessagingException
     36      * @throws IOException
     37      */
     38     public static void main(String[] args) throws MessagingException, IOException {
     39         //环境
     40         Session session = Session.getDefaultInstance(new Properties());
     41
     42         //邮件
     43         MimeMessage msg = new MimeMessage(session);
     44         //设置主题
     45         msg.setSubject("test123456");
     46         //发件人,注意中文的处理
     47         msg.setFrom(new InternetAddress("\"" + MimeUtility.encodeText( "某某") + "\"<[email protected]>"));
     48         //设置邮件回复人
     49         msg.setReplyTo(new Address[]{new InternetAddress("[email protected]")});
     50
     51         //整封邮件的MINE消息体
     52         MimeMultipart msgMultipart = new MimeMultipart("mixed");//混合的组合关系
     53         //设置邮件的MINE消息体
     54         msg.setContent(msgMultipart);
     55
     56         //附件1
     57         MimeBodyPart attch1 = new MimeBodyPart();
     58         //附件2
     59         MimeBodyPart attch2 = new MimeBodyPart();
     60         //正文内容
     61         MimeBodyPart content = new MimeBodyPart();
     62
     63         //把内容,附件1,附件2加入到 MINE消息体中
     64         msgMultipart.addBodyPart(attch1);
     65         msgMultipart.addBodyPart(attch2);
     66         msgMultipart.addBodyPart(content);
     67
     68         //把文件,添加到附件1中
     69         //数据源
     70         DataSource ds1 = new FileDataSource(new File("C:/Users/H__D/Desktop/1.txt"));
     71         //数据处理器
     72         DataHandler dh1 = new DataHandler(ds1 );
     73         //设置第一个附件的数据
     74         attch1.setDataHandler(dh1);
     75         //设置第一个附件的文件名
     76         attch1.setFileName("file1.jpg");
     77
     78         //把文件,添加到附件2中
     79         DataSource ds2 = new FileDataSource(new File("C:/Users/H__D/Desktop/2.txt"));
     80         DataHandler dh2 = new DataHandler(ds2 );
     81         attch2.setDataHandler(dh2);
     82         attch2.setFileName(MimeUtility.encodeText( "文件2.jpg"));
     83
     84         //正文(图片和文字部分)
     85         MimeMultipart bodyMultipart  = new MimeMultipart("related");
     86         //设置内容为正文
     87         content.setContent(bodyMultipart);
     88
     89         //html代码部分
     90         MimeBodyPart htmlPart = new MimeBodyPart();
     91         //html中嵌套的图片部分
     92         MimeBodyPart imgPart = new MimeBodyPart();
     93
     94         //正文添加图片和html代码
     95         bodyMultipart.addBodyPart(htmlPart);
     96         bodyMultipart.addBodyPart(imgPart);
     97
     98         //把文件,添加到图片中
     99         DataSource imgds = new FileDataSource(new File("C:/Users/H__D/Desktop/logo.png"));
    100         DataHandler imgdh = new DataHandler(imgds );
    101         imgPart.setDataHandler(imgdh);
    102         //说明html中的img标签的src,引用的是此图片
    103         imgPart.setHeader("Content-Location", "http://sunteam.cc/logo.jsg");
    104
    105         //html代码
    106         htmlPart.setContent("<span style=‘color:red‘>中文呵呵</span><img src=\"http://sunteam.cc/logo.jsg\">","text/html;charset=utf-8");
    107
    108         //生成文件邮件
    109         msg.saveChanges();
    110
    111         //输出
    112         OutputStream os = new FileOutputStream("C:/Users/H__D/Desktop/demo.eml");
    113         msg.writeTo(os);
    114         os.close();
    115     }
    116
    117 }
  4. 运行main方法,等到邮件文件。可以使用记事本和Foxmail打开效果如下:
    记事本效果:

    Foxmai效果:

发送本地邮件文件

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

     1 package com.hd.javamail;
     2
     3 import java.io.File;
     4 import java.io.FileInputStream;
     5 import java.io.FileNotFoundException;
     6 import java.util.Properties;
     7
     8 import javax.mail.Authenticator;
     9 import javax.mail.Message;
    10 import javax.mail.MessagingException;
    11 import javax.mail.PasswordAuthentication;
    12 import javax.mail.Session;
    13 import javax.mail.Transport;
    14 import javax.mail.internet.InternetAddress;
    15 import javax.mail.internet.MimeMessage;
    16
    17 /**
    18  *
    19  * @author H__D
    20  * @date 2016年12月6日 下午7:51:43
    21  *
    22  */
    23 public class Demo4 {
    24     public static void main(String[] args) throws FileNotFoundException, MessagingException {
    25         // 属性对象
    26         Properties properties = new Properties();
    27         // 开启debug调试 ,打印信息
    28         properties.setProperty("mail.debug", "true");
    29         // 发送服务器需要身份验证
    30         properties.setProperty("mail.smtp.auth", "true");
    31         // 发送服务器端口,可以不设置,默认是25
    32         properties.setProperty("mail.smtp.port", "25");
    33         // 发送邮件协议名称
    34         properties.setProperty("mail.transport.protocol", "smtp");
    35         // 设置邮件服务器主机名
    36         properties.setProperty("mail.host", "smtp.163.com");
    37         // 环境信息
    38         Session session = Session.getInstance(properties, new Authenticator() {
    39             @Override
    40             protected PasswordAuthentication getPasswordAuthentication() {
    41                 // 在session中设置账户信息,Transport发送邮件时会使用
    42                 return new PasswordAuthentication( "[email protected]", "xxxxx");
    43             }
    44         });
    45
    46         //读取本地邮件
    47         Message message = new MimeMessage(session, new FileInputStream(new File("C:/Users/H__D/Desktop/demo.eml")));
    48
    49         //发送邮件
    50         Transport.send(message, InternetAddress.parse("[email protected]") );
    51     }
    52 }

  

时间: 2024-12-23 08:05:53

【Mail】JavaMail发送带附件的邮件的相关文章

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

本文转载自:http://redleaf.iteye.com/blog/78217 mail.java 代码 package mail; import java.util.* ; import java.io.* ; import javax.mail.* ; import javax.mail.internet.* ; import javax.activation.* ; public class Mail { //定义发件人.收件人.SMTP服务器.用户名.密码.主题.内容等 privat

Android上发送带附件的邮件

准备工作-下载最新版本的JMail https://java.net/projects/javamail/pages/Home#Download_JavaMail_1.5.2_Release http://www.oracle.com/technetwork/java/javase/downloads/index-135046.html 在android上发送邮件方式: 第一种:借助GMail APP客户端,缺点是必须使用GMail帐号,有点是比较方便 不需要写很多代码,但是不是很灵活. 第二种

自动化测试发送带附件的邮件

自动化测试发送带附件的邮件 标签(空格分隔): 带附件邮件 在我们的自动化测试中,有时候会发送报告,有时候会发送带附件的报告,具体带附件的报告怎么操作呢? 具体的步骤如下述所示:如下是QQ邮箱为例 import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart # 用于传送附件 smtpserver = 'smtp.exmail.qq.com' user = '*

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

如下的代码是关于C#发送带附件的邮件的代码. MailMessage m = new MailMessage();m.Subject = "File attachment!";m.Body = "See the attached file.";m.Attachments.Add(new Attachment(@"C:test.txt"));SmtpClient client = new SmtpClient("smtp.w3mentor

Apache Mail 发送带附件的邮件

MultiPartEmail email = new MultiPartEmail(); email.setDebug(true); email.setHostName("smtp.sina.com"); email.setAuthentication("发送邮件帐号", "邮箱登录密码"); email.setCharset("UTF-8"); try { email.setFrom("发送邮件帐号",

如何用unity3d实现发送带附件的邮件

以Gmail为例.点击屏幕的Capture按钮得到当前屏幕截图,点击Send按钮将之前的截图作为附件发送邮件. using UnityEngine; using System.Collections; using System; using System.Net; using System.Net.Mail; using System.Net.Security; using System.Security.Cryptography.X509Certificates; public class T

c# 发送带附件的邮件

using System; using System.IO; using System.Net; using System.Net.Mail; using System.Net.Mime; using System.Text; public class EmailUitls { /// <summary> /// 发送邮件 /// </summary> /// <param name="fileName">附件路径</param> ///

smtp发送带附件的邮件(直接将string类型结果保存为附件)

该方式直接保存为HTML文件,也可以是文本文件,其它格式效果不是很好    MailMessage mmsg = new MailMessage();    mmsg.Subject = "邮件标题";    mmsg.Body = "邮件内容";    mmsg.To.Add("[email protected]");//接收邮箱    byte[] bytes = System.Text.Encoding.Default.GetBytes  

【python】用SMTP模块发送带附件的邮件

第一篇博客!参考链接? 在书上看了用SMTP模块发邮件,试过之后发现并没有什么用.163邮箱开启了SMTP服务后,登陆了发送的时候却被拒收了. 找了前人的资料,发现被过期的教程害死了. 以下代码有效: import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.image import MIMEImage #全部为python内