Java中使用JavaMail多发邮件及邮件的验证和附件实现

多发和用户验证
下面先来介绍如何实现将邮件发送给多个收件人和如何利用Authenticators对象实现用户验证。  
指定收件人的时候,我们可以有两种方法来指定。上篇博客是在发送邮件的时候临时指定收件人,其实还可以在Message对象中指定。

message.addRecipient(Message.RecipientType.TO,new InternetAddress(” 995812509@99.com ”));

这个只是发送给一个收件人而言,但是有多个收件人如何处理?同样有两种方法来处理。
          1、在发送邮件时Transport的sendMessage()方法指定收件人时是使用数组来指定收件人的,这个时候我们只需要多添加收件人地址即可完成。
          2、在使用Message对象来添加收件人我们可以使用InternetAddress对象的parse(String string)方法,该方法返回的是InternetAddress数组,这样同样可以实现发送给多个收件人。
 
         我们知道在进行JavaMail开发时我们必须要进行授权校验,授权校验目的是阻止他人任意乱发邮件,减少垃圾邮件的产生。
我们可以在获取Session对象的时候进行校验。在Session对象中有这两个方法:

  • getDefaultInstance(prop,authenticator),
  • getInstance(prop,authenticator),

这两个方法都有一个共同的参数authenticator,该参数是一个Authenticator对象。Authenticator对象就是帮助用户进行信息验证的,完成授权校验。Authenticator对象中有getPasswordAuthentication()方法,该方法返回返回一个PasswordAuthentication对象,PasswordAuthentication对象中有两个方法:getPassword()、getUserName()也就说我们将password、userName封装在PasswordAuthentication对象,通过这两个方法就可以获取用户名和密码了。即可完成用户信息验证。

实例如下:

public class JavaMail_02 {
  public static void main(String[] args) throws Exception {
    Properties props = new Properties();
    props.setProperty("mail.smtp.auth", "true");
    props.setProperty("mail.transport.protocol", "smtp");
    props.setProperty("mail.host", "smtp.163.com"); 

    Session session = Session.getInstance(props,
        new Authenticator(){
          protected PasswordAuthentication getPasswordAuthentication(){
            return new PasswordAuthentication("********","*********");
          }
    });
    session.setDebug(true); 

    Message msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress("chenssy995812509@163.com")); 

    msg.setSubject("JavaMail测试程序...");
    msg.setContent("<span style='color:red'>这是我的第二个javaMail测试程序....</span>", "text/html;charset=gbk");
    //msg.setRecipients(RecipientType.TO, new Address[]{new InternetAddress("1111@@qq.com"),new InternetAddress("2222@qq.cpm")});
    msg.setRecipients(RecipientType.TO, InternetAddress.parse("995812509@qq.com,1247723213@qq.com")); 

    Transport.send(msg);
  } 

}

 

带有图片和附件的邮件
在实际的电子邮件中我们一般都会涉及到更加复杂电子邮件结构,例如有附件、邮件正文里面包含图片、包含歌曲等等,在这个时候我们就必须要对邮件的结构有着很清晰的认识。在进行复合邮件开发之前需要对复合邮件的结构有一定的了解。

上面这幅图片展示了一封复合邮件的整体结构,我们可以看出一封复杂的电子邮件由多个部分组成。它有一个头部和正文,但是正文并不是像以前那么简单了,而是由几个部分组成。头部需要起到一个指示的作用,它需要说明正文需要使用什么样的分隔符来分开,正文几个部分之间使用什么样的组合关系。对于上面电子邮件它由三个部分组成,每一部分都有自己头和体,第一部分也由两个部分组成。
 
         复合邮件的组合关系:
         正文部分之间有多种组合关系。组合关系如下图:

alternative:选择关系。上面的纯文本和超文本之间就是一种选择关系。
        related:关联关系。假如上面的超文本正文是展示一幅图片,那么我们在发送邮件的时候必须要将这幅图片包含到邮件中,也就是所谓的内嵌资源,这个内嵌资源是给超文本用的。所以他们两者之间是一个关联关系。
        mixed:混合关系。在纯文本、超文本和内嵌资源组成一个整体和,他们与附件并列着,两者之间就是一个混合关系了。
 
        复合邮件组织结构的API:

MimeMessage类表示整封电子邮件。
        MimeBodyPart类表示邮件的一个MiME消息。
        MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。
 
        下面一个实例:该邮件里面包含两个附件、正文部分包括纯文本和超文本,超文本表示展示一张图片。源代码如下:

public class JavaMail_03 { 

  public static void main(String[] args) throws Exception {
    Properties props = new Properties();
    props.setProperty("mail.smtp.auth", "true");
    props.setProperty("mail.transport.protocol", "smtp");
    props.setProperty("mail.host", "smtp.163.com");
    Session session = Session.getInstance(props,
        new Authenticator(){
          protected PasswordAuthentication getPasswordAuthentication(){
            return new PasswordAuthentication("*****","******");
          }
    }); 

    Message message = new MimeMessage(session);
    message.setSubject("第三个JavaMail测试程序");
    message.setFrom(new InternetAddress("\""+MimeUtility.encodeText("陈明")+"\"<chenssy995812509@163.com>"));
    message.setRecipients(RecipientType.TO, new Address[]{new InternetAddress("995812509@qq.com")}); 

    //邮件正文
    MimeMultipart multipart = new MimeMultipart("mixed");
    message.setContent(multipart);
    /*
     * 创建邮件的内容
     * 包括一个邮件正文和两个附件
     */
    MimeBodyPart content = new MimeBodyPart();   //邮件内容
    MimeBodyPart attch1 = new MimeBodyPart();   //附件1
    MimeBodyPart attch2 = new MimeBodyPart();   //附件2
    //将邮件内容添加到multipart中
    multipart.addBodyPart(content);
    multipart.addBodyPart(attch1);
    multipart.addBodyPart(attch2); 

    //设置附件1
    DataSource ds1 = new FileDataSource("G:\\电子书\\oracle口令.txt");
    DataHandler dh1 = new DataHandler(ds1);
    attch1.setDataHandler(dh1);
    attch1.setFileName("oracle.txt");
    //设置附件2
    DataSource ds2 = new FileDataSource("G:\\电子书\\账号.txt");
    DataHandler dh2 = new DataHandler(ds2);
    attch2.setDataHandler(dh2);
    attch2.setFileName(MimeUtility.encodeText("账号.txt"));
    /*
     * 设置内容(正文)---是一个复杂体
     * 包括HTML正文和显示一张图片
     */
    MimeMultipart bodyMultipart = new MimeMultipart("related");
    content.setContent(bodyMultipart);
    //构造正文
    MimeBodyPart htmlBody = new MimeBodyPart();
    MimeBodyPart gifBody = new MimeBodyPart();
    bodyMultipart.addBodyPart(htmlBody);
    bodyMultipart.addBodyPart(gifBody); 

    //设置图片
    DataSource gifds = new FileDataSource("F:\\图片\\图片\\4.jpg");
    DataHandler gifdh = new DataHandler(gifds);
    gifBody.setDataHandler(gifdh);
    gifBody.setHeader("Content-ID", "<"+gifds.getName()+">");
    //gifBody.setHeader("Content-Location", "http://www.itcast.cn/logo.gif");
    //设置HTML正文
    htmlBody.setContent("<span style='color:red;font-size:16px'>这是我的第三个JavaMail测试哦!包括了附件和图片,有点儿复杂...</span><br>" +
        "显示的图片<img src='cid:4.jpg'/>", "text/html;charset=UTF-8"); 

    message.saveChanges();    //生成邮件
    Transport.send(message);
  } 

}
(0)

相关推荐

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

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

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

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

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

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

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

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

  • 基于JavaMail的常用类详细介绍

    应用服务器(1) javax.mail.Properties类 JavaMail需要Properties来创建一个session对象.它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机. 用法: 复制代码 代码如下: Properties props = new Properties ();   props.put("mail.smtp.host", "smtp.163.com");//可以换上你的smtp主机名. 复制代码

  • JavaMail访问Hotmail邮箱

    相信许多人都有MSN聊天工具的帐号,例如abc@hotmail.com ,这个账号其实也是一个邮件地址,可以进行正常的邮件收发功能,你可以通过网址 http://www.hotmail.com 来访问和操作这个邮箱进行邮件的收发.但是这个邮箱有一个限制就是它并不提供POP3或者SMTP服务,也就是说一般的邮件客户端工具无法使用这个邮箱,虽然现在有不少的邮件工具可以支持Hotmail邮箱,但是如果我们需要在我们的Java项目中增加对Hotmail邮箱的支持,那往往会不知从什么地方开始入手,因为SU

  • struts2集成javamail发邮件示例详解

    一.代码预览这两天在做struts2上的邮件发送.以前的项目有用到spring,用spring提供的邮件支持类很方便可以完成这个功能,但是现在只用struts2的话,就碰到了一系列的问题. 请先将自己下载的 mail.jar,及activation.jar加入到classpath 复制代码 代码如下: package com.nerve.cloudoffice.common.util; import java.util.List;import java.util.Properties; impo

  • 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加入到工程,这

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

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

  • Java使用JavaMail发送邮件的方法

    本文实例讲述了Java使用JavaMail发送邮件的方法.分享给大家供大家参考,具体如下: 代码一.Email_Autherticator.java 服务器验证代码 import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; public class Email_Autherticator extends Authenticator { String username = "你邮箱的用户名"; S

随机推荐