JavaWeb中JavaMail创建邮件和发送邮件

一、RFC882文档简单说明

  RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔。

  邮件头包含的内容有:

from字段   --用于指明发件人
to字段       --用于指明收件人
subject字段  --用于说明邮件主题
cc字段      -- 抄送,将邮件发送给收件人的同时抄送给另一个收件人,收件人可以看到邮件抄送给了谁
bcc字段    -- 密送,将邮件发送给收件人的同时将邮件秘密发送给另一个收件人,收件人无法看到邮件密送给了谁
  邮件体指的就是邮件的具体内容。

二、MIME协议简单介绍

  在我们的实际开发当中,一封邮件既可能包含图片,又可能包含有附件,在这样的情况下,RFC882文档规定的邮件格式就无法满足要求了。

  MIME协议是对RFC822文档的升级和补充,它描述了如何生产一封复杂的邮件。通常我们把MIME协议描述的邮件称之为MIME邮件。MIME协议描述的数据称之为MIME消息。
  对于一封复杂邮件,如果包含了多个不同的数据,MIME协议规定了要使用分隔线对多段数据进行分隔,并使用Content-Type头字段对数据的类型、以及多个数据之间的关系进行描述。

三、使用JavaMail创建邮件和发送邮件

  JavaMail创建的邮件是基于MIME协议的。因此可以使用JavaMail创建出包含图片,包含附件的复杂邮件。

3.1、JavaMail API的简单介绍

  

  

  

3.2、创建邮件发送测试项目

  

3.3、发送一封只包含文本的简单邮件

package me.gacl.main;

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;

/**
* @ClassName: Sendmail
* @Description: 发送Email
* @author: 孤傲苍狼
* @date: 2015-1-12 下午9:42:56
*
*/
public class Sendmail {

 /**
 * @param args
 * @throws Exception
 */
 public static void main(String[] args) throws Exception {

 Properties prop = new Properties();
 prop.setProperty("mail.host", "smtp.sohu.com");
 prop.setProperty("mail.transport.protocol", "smtp");
 prop.setProperty("mail.smtp.auth", "true");
 //使用JavaMail发送邮件的5个步骤
 //1、创建session
 Session session = Session.getInstance(prop);
 //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
 session.setDebug(true);
 //2、通过session得到transport对象
 Transport ts = session.getTransport();
 //3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给smtp服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。
 ts.connect("smtp.sohu.com", "gacl", "邮箱密码");
 //4、创建邮件
 Message message = createSimpleMail(session);
 //5、发送邮件
 ts.sendMessage(message, message.getAllRecipients());
 ts.close();
 }

 /**
 * @Method: createSimpleMail
 * @Description: 创建一封只包含文本的邮件
 * @Anthor:孤傲苍狼
 *
 * @param session
 * @return
 * @throws Exception
 */
 public static MimeMessage createSimpleMail(Session session)
  throws Exception {
 //创建邮件对象
 MimeMessage message = new MimeMessage(session);
 //指明邮件的发件人
 message.setFrom(new InternetAddress("gacl@sohu.com"));
 //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
 message.setRecipient(Message.RecipientType.TO, new InternetAddress("gacl@sohu.com"));
 //邮件的标题
 message.setSubject("只包含文本的简单邮件");
 //邮件的文本内容
 message.setContent("你好啊!", "text/html;charset=UTF-8");
 //返回创建好的邮件对象
 return message;
 }
}

3.4、发送包含内嵌图片的邮件

package me.gacl.main;

import java.io.FileOutputStream;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

/**
* @ClassName: Sendmail
* @Description: 发送Email
* @author: 孤傲苍狼
* @date: 2015-1-12 下午9:42:56
*
*/
public class Sendmail {

 /**
 * @param args
 * @throws Exception
 */
 public static void main(String[] args) throws Exception {

 Properties prop = new Properties();
 prop.setProperty("mail.host", "smtp.sohu.com");
 prop.setProperty("mail.transport.protocol", "smtp");
 prop.setProperty("mail.smtp.auth", "true");
 //使用JavaMail发送邮件的5个步骤
 //1、创建session
 Session session = Session.getInstance(prop);
 //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
 session.setDebug(true);
 //2、通过session得到transport对象
 Transport ts = session.getTransport();
 //3、连上邮件服务器,需要发件人提供邮箱的用户名和密码进行验证
 ts.connect("smtp.sohu.com", "gacl", "邮箱密码");
 //4、创建邮件
 Message message = createImageMail(session);
 //5、发送邮件
 ts.sendMessage(message, message.getAllRecipients());
 ts.close();
 }

 /**
 * @Method: createImageMail
 * @Description: 生成一封邮件正文带图片的邮件
 * @Anthor:孤傲苍狼
 *
 * @param session
 * @return
 * @throws Exception
 */
 public static MimeMessage createImageMail(Session session) throws Exception {
 //创建邮件
 MimeMessage message = new MimeMessage(session);
 // 设置邮件的基本信息
 //发件人
 message.setFrom(new InternetAddress("gacl@sohu.com"));
 //收件人
 message.setRecipient(Message.RecipientType.TO, new InternetAddress("xdp_gacl@sina.cn"));
 //邮件标题
 message.setSubject("带图片的邮件");

 // 准备邮件数据
 // 准备邮件正文数据
 MimeBodyPart text = new MimeBodyPart();
 text.setContent("这是一封邮件正文带图片<img src='cid:xxx.jpg'>的邮件", "text/html;charset=UTF-8");
 // 准备图片数据
 MimeBodyPart image = new MimeBodyPart();
 DataHandler dh = new DataHandler(new FileDataSource("src\\1.jpg"));
 image.setDataHandler(dh);
 image.setContentID("xxx.jpg");
 // 描述数据关系
 MimeMultipart mm = new MimeMultipart();
 mm.addBodyPart(text);
 mm.addBodyPart(image);
 mm.setSubType("related");

 message.setContent(mm);
 message.saveChanges();
 //将创建好的邮件写入到E盘以文件的形式进行保存
 message.writeTo(new FileOutputStream("E:\\ImageMail.eml"));
 //返回创建好的邮件
 return message;
 }
}

3.5、发送包含附件的邮件

package me.gacl.main;

import java.io.FileOutputStream;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

/**
* @ClassName: Sendmail
* @Description: 发送Email
* @author: 孤傲苍狼
* @date: 2015-1-12 下午9:42:56
*
*/
public class Sendmail {

 /**
 * @param args
 * @throws Exception
 */
 public static void main(String[] args) throws Exception {

 Properties prop = new Properties();
 prop.setProperty("mail.host", "smtp.sohu.com");
 prop.setProperty("mail.transport.protocol", "smtp");
 prop.setProperty("mail.smtp.auth", "true");
 //使用JavaMail发送邮件的5个步骤
 //1、创建session
 Session session = Session.getInstance(prop);
 //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
 session.setDebug(true);
 //2、通过session得到transport对象
 Transport ts = session.getTransport();
 //3、连上邮件服务器
 ts.connect("smtp.sohu.com", "gacl", "邮箱密码");
 //4、创建邮件
 Message message = createAttachMail(session);
 //5、发送邮件
 ts.sendMessage(message, message.getAllRecipients());
 ts.close();
 }

 /**
 * @Method: createAttachMail
 * @Description: 创建一封带附件的邮件
 * @Anthor:孤傲苍狼
 *
 * @param session
 * @return
 * @throws Exception
 */
 public static MimeMessage createAttachMail(Session session) throws Exception{
 MimeMessage message = new MimeMessage(session);

 //设置邮件的基本信息
 //发件人
 message.setFrom(new InternetAddress("gacl@sohu.com"));
 //收件人
 message.setRecipient(Message.RecipientType.TO, new InternetAddress("xdp_gacl@sina.cn"));
 //邮件标题
 message.setSubject("JavaMail邮件发送测试");

 //创建邮件正文,为了避免邮件正文中文乱码问题,需要使用charset=UTF-8指明字符编码
 MimeBodyPart text = new MimeBodyPart();
 text.setContent("使用JavaMail创建的带附件的邮件", "text/html;charset=UTF-8");

 //创建邮件附件
 MimeBodyPart attach = new MimeBodyPart();
 DataHandler dh = new DataHandler(new FileDataSource("src\\2.jpg"));
 attach.setDataHandler(dh);
 attach.setFileName(dh.getName()); //

 //创建容器描述数据关系
 MimeMultipart mp = new MimeMultipart();
 mp.addBodyPart(text);
 mp.addBodyPart(attach);
 mp.setSubType("mixed");

 message.setContent(mp);
 message.saveChanges();
 //将创建的Email写入到E盘存储
 message.writeTo(new FileOutputStream("E:\\attachMail.eml"));
 //返回生成的邮件
 return message;
 }
}

3.6、发送包含内嵌图片和附件的复杂邮件

package me.gacl.main;

import java.io.FileOutputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
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;

/**
* @ClassName: Sendmail
* @Description: 发送Email
* @author: 孤傲苍狼
* @date: 2015-1-12 下午9:42:56
*
*/
public class Sendmail {

 /**
 * @param args
 * @throws Exception
 */
 public static void main(String[] args) throws Exception {

 Properties prop = new Properties();
 prop.setProperty("mail.host", "smtp.sohu.com");
 prop.setProperty("mail.transport.protocol", "smtp");
 prop.setProperty("mail.smtp.auth", "true");
 //使用JavaMail发送邮件的5个步骤
 //1、创建session
 Session session = Session.getInstance(prop);
 //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
 session.setDebug(true);
 //2、通过session得到transport对象
 Transport ts = session.getTransport();
 //3、连上邮件服务器
 ts.connect("smtp.sohu.com", "gacl", "邮箱密码");
 //4、创建邮件
 Message message = createMixedMail(session);
 //5、发送邮件
 ts.sendMessage(message, message.getAllRecipients());
 ts.close();
 }

 /**
 * @Method: createMixedMail
 * @Description: 生成一封带附件和带图片的邮件
 * @Anthor:孤傲苍狼
 *
 * @param session
 * @return
 * @throws Exception
 */
 public static MimeMessage createMixedMail(Session session) throws Exception {
 //创建邮件
 MimeMessage message = new MimeMessage(session);

 //设置邮件的基本信息
 message.setFrom(new InternetAddress("gacl@sohu.com"));
 message.setRecipient(Message.RecipientType.TO, new InternetAddress("xdp_gacl@sina.cn"));
 message.setSubject("带附件和带图片的的邮件");

 //正文
 MimeBodyPart text = new MimeBodyPart();
 text.setContent("xxx这是女的xxxx<br/><img src='cid:aaa.jpg'>","text/html;charset=UTF-8");

 //图片
 MimeBodyPart image = new MimeBodyPart();
 image.setDataHandler(new DataHandler(new FileDataSource("src\\3.jpg")));
 image.setContentID("aaa.jpg");

 //附件1
 MimeBodyPart attach = new MimeBodyPart();
 DataHandler dh = new DataHandler(new FileDataSource("src\\4.zip"));
 attach.setDataHandler(dh);
 attach.setFileName(dh.getName());

 //附件2
 MimeBodyPart attach2 = new MimeBodyPart();
 DataHandler dh2 = new DataHandler(new FileDataSource("src\\波子.zip"));
 attach2.setDataHandler(dh2);
 attach2.setFileName(MimeUtility.encodeText(dh2.getName()));

 //描述关系:正文和图片
 MimeMultipart mp1 = new MimeMultipart();
 mp1.addBodyPart(text);
 mp1.addBodyPart(image);
 mp1.setSubType("related");

 //描述关系:正文和附件
 MimeMultipart mp2 = new MimeMultipart();
 mp2.addBodyPart(attach);
 mp2.addBodyPart(attach2);

 //代表正文的bodypart
 MimeBodyPart content = new MimeBodyPart();
 content.setContent(mp1);
 mp2.addBodyPart(content);
 mp2.setSubType("mixed");

 message.setContent(mp2);
 message.saveChanges();

 message.writeTo(new FileOutputStream("E:\\MixedMail.eml"));
 //返回创建好的的邮件
 return message;
 }
}

以上就是使用JavaMail的API创建邮件和发送邮件的全部内容,希望对大家的学习有所帮助。

(0)

相关推荐

  • Java使用JavaMail API发送和接收邮件的代码示例

    使用Javamail发送邮件,必需的jar包(请下载javamail的源文件,官方下载页:http://www.oracle.com/technetwork/java/javamail/index-138643.html): mailapi.jar.定义了收发邮件所使用到的接口API: smtp.jar.包含了发送邮件使用到的类: pop3.jar.包含了收邮件使用到的类: 我们通常发送邮件使用的协议是smtp协议,接受邮件使用的协议是pop3协议.或者,我们直接将mail.jar加入到工程,这

  • JavaMail实现邮件发送的方法

    本文实例讲述了JavaMail实现邮件发送的方法.分享给大家供大家参考.具体如下: 下载 activation.jar 和 mail.jar 配置CLASSPATH,将上面两个jar包加入到CLASSPATH中. JavaBean : "SendEmail.java" package cls; import java.util.Date; import java.util.Properties; import javax.mail.*; import javax.mail.intern

  • Java程序中使用JavaMail发送带图片和附件的邮件

    我们常常在邮件中添加附件,以达到传输较大文件的目的.而上一篇文章只是将本机的一张图片内嵌到邮件的 HTML 格式的正文当中,这样的邮件显得不够丰富多彩.我们想要一封正文部分图文并茂,而游客附带若干附件的邮件. 下面是代码结构中3个重要的方法: MimeBodyPart createAttachment(String fileName) 方法用于创建附件并返回: MimeBodyPart createContent(String body, String fileName) 方法用于创建正文部分并

  • java中javamail发送带附件的邮件实现方法

    本文实例讲述了java中javamail发送带附件的邮件实现方法.分享给大家供大家参考.具体分析如下: JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输,JavaMail是可选包,因此如果需要使用的话你需要首先从java官网上下载.目前最新版本是JavaMail1.5.0,下面我们来看看javamail发送带附件的邮件实例 mail.java 代码: 复制代码 代码如下: package mail;

  • javamail 发送邮件的实例代码分享

    注意:要先导入javamail的mail.jar包.以下三段代码是我的全部代码,朋友们如果想用,直接复制即可.第一个类:MailSenderInfo.java 复制代码 代码如下: package com.util.mail;import java.util.Properties;/** * 发送邮件需要使用的基本信息 */public class MailSenderInfo {    //发送邮件的服务器的IP和端口    private String mailServerHost;   

  • 邮件收发原理你了解吗? 邮件发送基本过程与概念详解(一)

    相信大家在日常工作生活中少不了和邮件打交道,比如我们会用邮件进行信息交流,向上级汇报日常工作:再比如大家熟悉的某个WEB系统注册阶段,通常会有一个功能,点击发送到目标邮箱的链接完成账户激活.但是邮件发送的原理是什么?邮件是如何发送的呢?本系列教程将会讲解邮件的基本常识与概念,邮件的协议以及邮件服务器的工作原理,然后用JavaMail 发送邮件的基本实现过程,邮件内嵌图片等高级邮件技巧.相信大家看完后,一定会有所收获. 1.电子邮件的发送和接收过程 和以往博客一样,LZ这里先给出用户A从QQ邮箱发

  • Java基于JavaMail实现向QQ邮箱发送邮件

    最近项目在做新闻爬虫,想实现这个功能:爬虫某个页面失败后,把这个页面的 url 发到邮箱.最终实现的效果图如下,后期可以加上过滤标签.失败状态码等,方便分类搜索异常. 开发人员可以根据邮件里的 url 和堆栈信息,分析爬虫失败的原因. 是不是服务器 down 了? 还是爬虫的 Dom 解析没有解析到内容? 还是正则表达式对于这个页面不适用? 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 SMTP 服务 注意开启完之后,QQ 邮箱会生成一个授权码,在代码里连接邮箱使用这个授权码而不是原

  • JavaMail实现发送超文本(html)格式邮件的方法

    本文实例讲述了JavaMail实现发送超文本(html)格式邮件的方法.分享给大家供大家参考.具体如下: 附件以超文本形式,很常用,与普通的邮件,只是查了一些设置,只有处理方式有些细微的差别 代码如下: <%@ page contentType="text/html;charset=GBK" %> <%@ page import="java.util.*"%> <%@ page import="javax.mail.*&quo

  • 基于SSM框架+Javamail发送邮件的代码实例

    本篇介绍基于SSM框架(Spring4.0+SpringMVC+Mybatis)组合的Javamail应用,邮箱的话基于腾讯的QQ邮箱,其实也是Foxmail邮箱 先要了解一下SMTP协议和SSL加密 SMTP:称为简单邮件传输协议(Simple Mail Transfer Protocal),目标是向用户提供高效.可靠的邮件传输.SMTP是一种请求响应的协议,也就是客户机向远程服务器发送请求,服务器响应,监听端口是25,所以其工作模式有两种:发送SMTP,接收SMTP. SSL加密:用来保障浏

  • JavaWeb中使用JavaMail实现发送邮件功能实例详解

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能,用户注册成功之后,就将用户的注册信息以Email的形式发送到用户的注册邮箱当中,实现发送邮件功能就得借助于JavaMail了. 一.搭建开发环境 1.1.创建Web项目 1.2.用户注册的Jsp页面 register.jsp <%@ page language="java" pag

随机推荐