JAVAWEB创建和发送邮件

一、RFC882文档简单说明RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔。  邮件头包含的内容有:1. from字段 --用于指明发件人2. to字段 --用于指明收件人3. subject字段 --用于说明邮件主题4. cc字段 --抄送,将邮件发送给收件人的同时抄送给另一个收件人,收件人可以看到邮件抄送给了谁5. bcc字段 --密送,将邮件发送给收件人的同时将邮件秘密发送给另一个收件人,收件人无法看到邮件密送给了谁  邮件体指的就是邮件的具体内容。二、MIME协议简单介绍  在我们的实际开发当中,一封邮件既可能包含图片,又可能包含有附件,在这样的情况下,RFC882文档规定的邮件格式就无法满足要求了。MIME协议是对RFC822文档的升级和补充,它描述了如何生产一封复杂的邮件。通常我们把MIME协议描述的邮件称之为MIME邮件。MIME协议描述的数据称之为MIME消息。  对于一封复杂邮件,如果包含了多个不同的数据,MIME协议规定了要使用分隔线对多段数据进行分隔,并使用Content-Type头字段对数据的类型、以及多个数据之间的关系进行描述。三、使用JavaMail创建邮件和发送邮件JavaMail创建的邮件是基于MIME协议的。因此可以使用JavaMail创建出包含图片,包含附件的复杂邮件。3.1、JavaMail API的简单介绍 3.2、创建邮件发送测试项目最好另导入stmp包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;
 
public class SendEmail {
 
    /**
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        
       Properties prop = new Properties();
        prop.setProperty("mail.host","smtp.qq.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服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。
        //qq账号需要授权填写的密码为授权码,不是账号登录密码,其他如sina,163,sohu等邮箱为检测视情况而定
       //QQ邮箱需要使用SSL,端口号465或587       ts.connect("smtp.qq.com",587,"QQ号","授权码");
       //4、创建邮件
       Message message;
try {
message = createSimpleMail(session);
//5、发送邮件
         ts.sendMessage(message,message.getAllRecipients());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
       ts.close();
 }
public static MimeMessage createSimpleMail(Sessionsession)
        throws Exception {
   //创建邮件对象
    MimeMessage message = new MimeMessage(session);
   //指明邮件的发件人
   message.setFrom(new InternetAddress("xxx@qq.com"));
    //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
   message.setRecipient(Message.RecipientType.TO,new InternetAddress("xxx@qq.com"));
   //邮件的标题
   message.setSubject("只包含文本的简单邮件");
    //邮件的文本内容
   message.setContent("你好啊!","text/html;charset=UTF-8");
   //返回创建好的邮件对象
   return message;
 
  }
 
}
3.4、发送包含内嵌图片的邮件
import  java.io.FileOutputStream;
import java.security.GeneralSecurityException;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
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;
 
public class MailTool {
public static void main(String[]args)throws MessagingException, GeneralSecurityException {     
 Properties prop = new Properties();
        prop.setProperty("mail.host","smtp.qq.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.qq.com",587,"QQ号", "授权码");
        //4、创建邮件
        Message message;
try {
message = createImageMail(session);
//5、发送邮件
        ts.sendMessage(message,message.getAllRecipients());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
        
        ts.close();
    }
    
    public static MimeMessage createImageMail(Sessionsession)throws Exception {
        //创建邮件
        MimeMessage message = new MimeMessage(session);
        // 设置邮件的基本信息
        //发件人
        message.setFrom(new InternetAddress("xxx@qq.com"));
        //收件人
        message.setRecipient(Message.RecipientType.TO,new InternetAddress("xxx@qq.com"));
        //邮件标题
        message.setSubject("带图片的邮件");
 
        // 准备邮件数据
        // 准备邮件正文数据
        MimeBodyPart text = new MimeBodyPart();
        //设置为一个简单的纯文本内容
        text.setContent("这是一封邮件正文带图片<img src='cid:ty.jpg'>的邮件","text/html;charset=UTF-8");
        // 准备图片数据
        MimeBodyPart image = new MimeBodyPart();
        DataHandler dh = new DataHandler(new FileDataSource("src\\ty.jpg"));
        image.setDataHandler(dh);
        System.out.println(dh.getName());
        image.setContentID("ty.jpg");
        // 描述数据关系
        MimeMultipart mm = new MimeMultipart();
        mm.addBodyPart(text);
        mm.addBodyPart(image);
        //multipart类型
        mm.setSubType("related");
        //设置MimeMessage对象的邮件体
        message.setContent(mm);
        //更新并保存MimeMessage对象中的数据
        message.saveChanges();
        //把MimeMessage对象中的数据输出到一个RFC822格式的输出流中
        //将创建好的邮件写入到E盘以文件的形式进行保存
        message.writeTo(new FileOutputStream("E:\\ImageMail.eml"));
        //返回创建好的邮件
        return message;
    }
 
}
3.5、发送包含附件的邮件
import java.io.FileOutputStream;
import java.security.GeneralSecurityException;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
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;
public class MailTool {
public static void main(String[]args)throws MessagingException, GeneralSecurityException {     
 Properties prop = new Properties();
        prop.setProperty("mail.host","smtp.qq.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.qq.com",587,"QQ号", "授权码");
        //4、创建邮件
        Message message;
try {
message = createImageMail(session);
//5、发送邮件
        ts.sendMessage(message,message.getAllRecipients());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
        ts.close();
    }
    
    public static MimeMessage createImageMail(Sessionsession)throws Exception {
        //创建邮件
        MimeMessage message = new MimeMessage(session);
        // 设置邮件的基本信息
        //发件人
        message.setFrom(new InternetAddress("xxx@qq.com"));
        //收件人
        message.setRecipient(Message.RecipientType.TO,new InternetAddress("xxx@qq.com"));
        //邮件标题
        message.setSubject("带图片的邮件");
 
        // 准备邮件数据
        // 准备邮件正文数据
        MimeBodyPart text = new MimeBodyPart();
        //设置为一个简单的纯文本内容
        text.setContent("这是一封带附件邮件","text/html;charset=UTF-8");
        // 准备图片数据
        MimeBodyPart image = new MimeBodyPart();
        DataHandler dh = new DataHandler(new FileDataSource("src\\ty.jpg"));
        image.setDataHandler(dh);
        System.out.println(dh.getName());
        image.setContentID(dh.getName());
        //image.setContentID("ty.jpg");
        // 描述数据关系
        MimeMultipart mm = new MimeMultipart();
        mm.addBodyPart(text);
        mm.addBodyPart(image);
        //multipart类型
        mm.setSubType("mixed");
        //设置MimeMessage对象的邮件体
        message.setContent(mm);
        //更新并保存MimeMessage对象中的数据
        message.saveChanges();
        //把MimeMessage对象中的数据输出到一个RFC822格式的输出流中
        //将创建好的邮件写入到E盘以文件的形式进行保存
        message.writeTo(new FileOutputStream("E:\\ImageMail.eml"));
        //返回创建好的邮件
        return message;
    }
 
}
3.6、发送包含内嵌图片和附件的复杂邮件
package com.lbf.controller;
import java.io.FileOutputStream;
import java.security.GeneralSecurityException;
import java.util.Properties;
 
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
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;
public class MailTool {
public static void main(String[]args)throws MessagingException, GeneralSecurityException {     
    Properties prop = new Properties();
        prop.setProperty("mail.host","smtp.qq.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.qq.com",587,"QQ号", "授权码");
        //4、创建邮件
        Message message;
try {
message = createImageMail(session);
//5、发送邮件
        ts.sendMessage(message,message.getAllRecipients());
} catch (Exception e) {
e.printStackTrace();
}
        
        ts.close();
    }
    
    public static MimeMessage createImageMail(Sessionsession)throws Exception {
        //创建邮件
        MimeMessage message = new MimeMessage(session);
        // 设置邮件的基本信息
        //发件人
        message.setFrom(new InternetAddress("xxx@qq.com"));
        //收件人
        message.setRecipient(Message.RecipientType.TO,new InternetAddress("xxx@qq.com"));
        //邮件标题
        message.setSubject("带附件和带图片的的邮件");
 
        // 准备邮件数据
        // 邮件正文
        MimeBodyPart text = new MimeBodyPart();
        text.setContent("复杂邮件<br/><img src='cid:t.jpg'>","text/html;charset=UTF-8");
        // 图片
        MimeBodyPart image = new MimeBodyPart();
        image.setDataHandler(new DataHandler(new FileDataSource("src\\ty.jpg")));
        image.setContentID("t.jpg");
        //附件1
        MimeBodyPart attach = new MimeBodyPart();
        DataHandler dh = new DataHandler(new FileDataSource("src\\Filter.txt"));
        attach.setDataHandler(dh);
        attach.setFileName(dh.getName());
        //附件2
        MimeBodyPart attach2 = new MimeBodyPart();
            DataHandler dh2 = new DataHandler(new FileDataSource("src\\上传Servlet.rar"));
            attach2.setDataHandler(dh2);
            attach2.setFileName(MimeUtility.encodeText(dh2.getName()));
            //描述关系:正文和图片
        MimeMultipart mm1 = new MimeMultipart();
        mm1.addBodyPart(text);
        mm1.addBodyPart(image);
        mm1.setSubType("related");
       //描述关系:正文和附件
        MimeMultipart mm2 = new MimeMultipart();
        mm2.addBodyPart(attach);
        mm2.addBodyPart(attach2);
        mm2.setSubType("mixed");
        //代表正文的bodypart
            MimeBodyPart content = new MimeBodyPart();
            content.setContent(mm1);
            mm2.addBodyPart(content);
            mm2.setSubType("mixed");
         
            message.setContent(mm2);
            message.saveChanges();
        //把MimeMessage对象中的数据输出到一个RFC822格式的输出流中
        //将创建好的邮件写入到E盘以文件的形式进行保存
        message.writeTo(new FileOutputStream("E:\\MAXMail.eml"));
        //返回创建好的邮件
        return message;
    }
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值