java原生的邮箱发送工具类

这是个人项目中使用的邮箱发送的,基于ssm使用,关于springboot继承的请自行百度。 

package com.o2o.common.mail;

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

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
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;
import javax.mail.internet.MimeUtility;
/**
 * 邮箱推送工具类
 * @author Administrator
 *
 */
public class MailUtil {
	private static final MailUtil instance = new MailUtil(); /// 直接初始化一个实例对象

	private MailUtil() {

	}
	public static MailUtil getInstance() {
		return instance;
	}
	//域名服务器
	private static final String host = "";
	//用户名
	private static final String account = "";
	//授权码
	private static final String authorizationCode = "";
	//收件人邮箱
	private static final String from = "";
	
	/**
	 * 邮件发送静态方法
	 * @param host smtp服务器地址,,示例 smtp.163.com
	 * @param account   邮箱用户名 
	 * @param authorizationCode  授权码
	 */
	public  void Sendmail(String to,String subject,String content) throws Exception  {
		Properties prop = new Properties();
		prop.setProperty("mail.host", host);
		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(host, account, authorizationCode);
		// 4、创建邮件
		//Message message = createSimpleMail(session, to, subject, content);
		Message message = sendHtmlMail(session, to, subject, content);
		// 5、发送邮件
		ts.sendMessage(message, message.getAllRecipients());
		ts.close();
	}
	
    
	/**
	 * @Method: createSimpleMail
	 * @Description: 创建一封只包含文本的邮件
	 * @Anthor:刘伟刚
	 * @param session
	 * @param from   发件人邮箱地址
	 * @param to    收件人邮箱地址
	 * @param subject   邮件主题
	 * @param content    邮件文档内容,
	 * @return
	 * @throws Exception
	 */
	private MimeMessage createSimpleMail(Session session,String to,String subject,String content) throws Exception {
		// 创建邮件对象
		MimeMessage message = new MimeMessage(session);
		// 指明邮件的发件人
		message.setFrom(new InternetAddress(from));
		// 指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
		message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
		// 邮件的标题
		message.setSubject(subject);
		// 邮件的文本内容
		message.setContent(content, "text/html;charset=UTF-8");
		// 返回创建好的邮件对象
		return message;
	}                                                                                         
    
	private MimeMessage sendHtmlMail(Session session,String to,String subject,String content)throws Exception{
		// 创建邮件对象
		MimeMessage message = new MimeMessage(session);
		// 指明邮件的发件人
		message.setFrom(new InternetAddress(from));
		// 指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
		message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
		// 消息发送的时间
        message.setSentDate(new Date());
		// 邮件的标题
		message.setSubject(subject);
        // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
        Multipart mainPart = new MimeMultipart();
        // 创建一个包含HTML内容的MimeBodyPart
        BodyPart html = new MimeBodyPart();
        // 设置HTML内容
        html.setContent(content, "text/html; charset=utf-8");
        mainPart.addBodyPart(html);
        // 将MiniMultipart对象设置为邮件内容
        message.setContent(mainPart);
        return message;
    }

	
	
	/**
	 * @Method: createImageMail
	 * @Description: 生成一封邮件正文带图片的邮件
	 * @Anthor:刘伟刚
	 * @param session
	 * @return
	 * @throws Exception
	 */
	private MimeMessage createImageMail(Session session,String from,String to,String subject,String content,String imgpath) throws Exception {
		   //创建邮件                                                                                         
		   MimeMessage message = new MimeMessage(session);                                                
		   // 设置邮件的基本信息                                                                                   
		   //发件人                                                                                          
		   message.setFrom(new InternetAddress(from));                                         
		   //收件人                                                                                          
		   message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));       
		   //邮件标题                                                                                         
		   message.setSubject(subject);                                                                  
		   // 准备邮件数据                                                                                      
		   // 准备邮件正文数据                                                                                    
		   MimeBodyPart text = new MimeBodyPart();                                                        
		   text.setContent(content, "text/html;charset=UTF-8"); //"这是一封邮件正文带图片<img src='cid:xxx.jpg'>的邮件"          
		   // 准备图片数据                                                                                      
		   MimeBodyPart image = new MimeBodyPart();                                                       
		   DataHandler dh = new DataHandler(new FileDataSource(imgpath));  //"src\\1.jpg"                          
		   image.setDataHandler(dh);                                                                      
		   image.setContentID(UUID.randomUUID()+".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;                                                                                
		}
	
	
     
	/**
	 * @Method: createAttachMail
	 * @Description: 创建一封带附件的邮件
	 * @Anthor:刘伟刚
	 * 
	 * @param session
	 * @return
	 * @throws Exception
	 */
	private MimeMessage createAttachMail(Session session) throws Exception {
		MimeMessage message = new MimeMessage(session);

		// 设置邮件的基本信息
		// 发件人
		message.setFrom(new InternetAddress("[email protected]"));
		// 收件人
		message.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
		// 邮件标题
		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;
	}                                                                                                   
    
	/**
	 * @Method: createMixedMail
	 * @Description: 生成一封带附件和带图片的邮件
	 * @Anthor:刘伟刚
	 * @param session
	 * @return
	 * @throws Exception
	 */
	private  MimeMessage createMixedMail(Session session) throws Exception {
		// 创建邮件
		MimeMessage message = new MimeMessage(session);

		// 设置邮件的基本信息
		message.setFrom(new InternetAddress("[email protected]"));
		message.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
		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;
	}
	
	
	
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章