`

javaMail学习(七)——使用javaMail发复杂邮件

阅读更多

包括基本的文字邮件、html邮件、有图片的、有附件的邮件。没什么可说的,直接上代码:

package com.wjl.mail.utils;

import java.io.File;
import java.net.URL;
import java.security.GeneralSecurityException;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.activation.URLDataSource;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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;

/**
 * 邮 件 发 送 的工具类
 * 易 邮 各个账号之间互相 发 送 消息:包括简单的文字邮 件、html邮 件、图片邮 件、附件邮 件等信息
 */
public class MailUtils7 {
	private static String userName = "user03@wjl.com";// 发 送 邮 件的人
	private static String password = "123456";// 发 送 邮 件的 账 户 的密 码
	private static String userNameForTO = "user04@wjl.com";//接收邮 件的人
	private static String userNameForCC = "user01@wjl.com,user02@wjl.com";//抄送人
	private static String userNameForBCC = "Admin@wjl.com";//密送人
	
	private static String port = "25";//465、587
	
	//该方法用来设置smtp 服 务 器的基本信息
	public static Properties setPropertiesForMai() throws GeneralSecurityException{
		Properties props = new Properties();
		//开 启debug调试  
        props.setProperty("mail.debug", "true");  
        //stmp 服 务 器需要进行身份验 证,也就是用 户 名和密 码的校 验,这样才能通过验 证
        props.setProperty("mail.smtp.auth", "true"); 
        // 发 送 邮 件协议名称  
        props.setProperty("mail.transport.protocol", "smtp");  
        //设置 邮 件 服 务 器主机名  
        props.setProperty("mail.host", "127.0.0.1");//本地
        //设 端 口 号(该配置可写可不写)
        props.setProperty("mail.smtp.port", port);
        return  props;
	}
	
	/**
	 * 该方法用来 发 送 邮 件
	 * @param to:给谁发邮 件
	 * @param copyTo:抄送人
	 * @param copyTo2:密送人
	 * 抄送跟密送的区别:
	 * 抄送人:所有的邮 件接受者(包括收件人、抄送人、密送人)都能看到该封邮 件抄送给了谁,不能看到密送给了谁
	 * 密送人:可以收到邮 件,也能看到收件人是谁、抄送人是谁(当你发现收件人、抄送人都没有你你却收到邮 件时,说明你是密送人,嘎嘎)
	 * 举例:user04给user03发邮 件,抄送给user01、user02,密送给Admin
	 * 那么:user03(收件人)、user01(抄送人)、user02(抄送人)、Admin(密送人)都能收到邮 件,且能看到发件人是user04、收件人是user03、抄送人是user01和user02,看不到密送人信息
	 * Admin(密送人)能收到邮 件,也能看到发件人、收件人、抄送人信息(真神奇)。
	 * **/
	public static void sendMain(String to,String copyTo,String copyTo2) throws Exception{
		//1、创建连接对象,连接到邮 箱 服 务 器
		Properties props = setPropertiesForMai();
		
		//Authenticator:认证信息
		Session session = Session.getInstance(props, new Authenticator(){
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(userName,password);//使用它给其他 账 户 发邮 件
			}
		});
		
		//2、创建邮 件对象
		Message message = new MimeMessage(session);
		//2.1设置发件人
		message.setFrom(new InternetAddress(userName));
		//2、2设置收件人
		message.setRecipient(RecipientType.TO, new InternetAddress(to));
		
		//2.2.1 抄送人
		if(copyTo!=null){
			message.setRecipients(RecipientType.CC,InternetAddress.parse(copyTo));
		}
		//2.2.2 密送人
		if(copyTo2!=null){
			message.setRecipients(RecipientType.BCC,InternetAddress.parse(copyTo2));
		}
		
		//2.3邮 件的主题
		message.setSubject(" 测 试 发复杂消息:有附件的邮 件");
		//2.4邮 件的正文(即邮 件的内容)
		
		/*
		//第一:文本邮 件
		message.setSubject(" 测 试 发复杂消息:文本邮 件");
		message.setText(" 测 试 文本邮 件");
		*/
		/*
		//第二:html邮 件:
		//向multipart对象中添加邮 件的各个部分内容,包括文本内容和附件
		message.setSubject(" 测 试 发复杂消息:HTML邮 件");
		Multipart multipart = new MimeMultipart();
		//设置邮 件的文本内容
		BodyPart htmlContent = new MimeBodyPart();
		htmlContent.setContent(appendHtmlForMail(), "text/html;charset=utf-8");
		multipart.addBodyPart(htmlContent);
		message.setContent(multipart);
		*/
		//第三:有附件的邮 件
		//邮 件内容
		Multipart multipart = new MimeMultipart();
		String url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1515670086235&di=6adfad147f9fa257e93828dbd65a228d&imgtype=0&src=http%3A%2F%2Fpic30.nipic.com%2F20130607%2F9908282_110512457172_2.jpg";
		//文本内容
		BodyPart contentPart = new MimeBodyPart();
		contentPart.setContent("<p>这是一封有附件的邮 件</p><p>第一个附件是这个样子的:</p><img src=\""+url+"\" />","text/html;charset=utf-8");
		multipart.addBodyPart(contentPart);
		
		//附件1:网络图片
		BodyPart filePartForURL = new MimeBodyPart();
		//设置文件名称
		filePartForURL.setFileName(MimeUtility.encodeText("附件1.jpg"));//MimeUtility.encodeText:解决中文乱码
		DataSource urlDataSorce = new URLDataSource(new URL(url));
		DataHandler urlDataHandler= new DataHandler(urlDataSorce);
		filePartForURL.setDataHandler(urlDataHandler);
		multipart.addBodyPart(filePartForURL);
		
		//附件2:本地文件
		BodyPart filePartForLocal = new MimeBodyPart();
		filePartForLocal.setFileName(MimeUtility.encodeText("附件2.txt"));
		DataSource localDataSorce = new FileDataSource(new File("D:\\test.txt"));
		DataHandler localDataHandler= new DataHandler(localDataSorce);
		filePartForLocal.setDataHandler(localDataHandler);
		multipart.addBodyPart(filePartForLocal);
		
		//附件3:本地中文名称的文件
		BodyPart filePartForLocal2 = new MimeBodyPart();
		filePartForLocal2.setFileName(MimeUtility.encodeText("附件3.doc"));//该名称的后缀名与FileDataSource()中的文件名称的后缀必须一致,否则无法预览(使用foxMail进行预览)
		DataSource localDataSorce2 = new FileDataSource(new File("D:\\请假.doc"));
		DataHandler localDataHandler2= new DataHandler(localDataSorce2);
		filePartForLocal2.setDataHandler(localDataHandler2);
		multipart.addBodyPart(filePartForLocal2);
		
		//将multipart添加到message
		message.setContent(multipart);
		//3. 发 送 邮 件
		Transport trans = session.getTransport();
		//连接邮 件 服 务 器
        trans.connect(userName, password);  
		// 发 送 邮 件
        trans.sendMessage(message, message.getAllRecipients());  
        //关闭连接
        trans.close();
        
        //Transport.send(message);(两种方式都可以)
		System.out.println("发 送 成 功 ");
	}
	
	//该方法用来拼接HTML(较复杂)
	public static String appendHtmlForMail(){
		StringBuffer html = new StringBuffer(); 
		html.append("<p style=\"font-size:14px; font-family:verdana; margin:0 0 10px; line-height:22px; text-align:left\">很抱歉您 发 送 的邮 件被退回,以下是该邮 件的相关信息:</p>")
			.append("<table style=\"width:90%; border-collapse:collapse; margin:0 0 15px\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">")
			.append("<tbody><tr>")
			.append("<td style=\"width:120px; font-family:verdana; font-size:14px; font-weight:bold; text-align:center; background:#E0ECF9; border:1px solid #C1D9F3\">被退回邮 件</td>")
			.append("<td style=\"border:1px solid #C1D9F3; font-family:verdana; padding:5px 15px; line-height:20px; font-size:14px;\">主 题: 测 试 QQ与易邮之间发邮 件 <br>时 间:<span style=\"border-bottom: 1px dashed rgb(204, 204, 204); position: relative;\" t=\"5\" times=\" 10:58\">2018-01-10</span> 10:58:25 </td>")
			.append("</tr></tbody></table>")
			.append("<table style=\"width:90%; border-collapse:collapse; margin:0 0 10px\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">")
			.append("<tbody><tr>")
			.append("<td colspan=\"2\" style=\"font-size:14px;font-weight:bold;padding:5px 10px;  border:1px solid #C1D9F3; background:#C1D9F3\">无法 发 送 到 <a href=\"mailto:user01@wjl.com\" target=\"_blank\">user01@wjl.com</a></td>")
			.append("</tr>")
			.append("<tr>")
			.append("<td style=\"width:120px; font-size:14px;text-align:center; background:#EFF5FB; border:1px solid #C1D9F3\">退信原因</td>")
			.append("<td style=\"border:1px solid #C1D9F3; font-family:verdana; padding:5px 15px; line-height:20px; font-size:14px;\">")
			.append("无法与收件人(<a href=\"mailto:user01@wjl.com\" target=\"_blank\">user01@wjl.com</a>)所在服务商建立连接,收件人域名可能不存在。 <br> connect to wjl.com[103.224.182.212]: Connection refused (port 25) </td>")
			.append("</tr>")
			.append("<tr>")
			.append("<td style=\"width:120px; font-size:14px; text-align:center; background:#EFF5FB; border:1px solid #C1D9F3\">解决方案</td>")
			.append("<td style=\"border:1px solid #C1D9F3; font-family:verdana; padding:5px 15px; line-height:20px; font-size:14px;\">请确认您的收件人地址无误,稍后重新尝试 发 送 您的邮 件。 您也可以向管理员报告此退信。</td>")
			.append("</tr></tbody></table>")
			.append("<p style=\"font-size:14px; width:90%;font-family:verdana; margin:0 0 10px; line-height:22px; text-align:left\"> 发 送 尝试已经持续进行了 4 小时。不会再有任何动作来尝试 发 送 你的邮 件了。请联系你的系统管理员或先通过其它非电子邮 件的方式向你的朋友 发 送 信息以免耽误。</p>")
			.append("<p style=\"font-size:14px; font-family:verdana; margin:0 0 10px; line-height:22px; text-align:left\">此外,您还可以 <a href=\"http://service.mail.qq.com/cgi-bin/help?subtype=1&amp;&amp;id=29&amp;&amp;no=188\" target=\"_blank\">点击这里</a> 获取更多关于退信的帮助信息。</p>")
		;
		return html.toString();
	}
	
	public static void main(String[] args) {
		try {
			sendMain(userNameForTO,userNameForCC,userNameForBCC);
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
}

 祝好运!

分享到:
评论

相关推荐

    JavaMail(3)——发送带附件的邮件.docx

    总的来说,JavaMail提供了一套丰富的API来处理复杂的邮件任务,包括发送带附件的邮件。通过`MimeMultipart` 和 `MimeBodyPart`,我们可以方便地组织邮件的结构,添加各种内容和附件,从而实现功能丰富的邮件服务。

    JAVA-JSP学习系列之JavaMail发邮件

    通常情况下,JavaMail的使用还依赖于另一个库——JavaBeans Activation Framework (JAF),该框架主要用于处理邮件中的附件等复杂内容。 对于不同的操作系统(如Windows 2000等),可能还需要指定一些特定的库路径。...

    JavaMail相关jar包

    本篇文章将深入探讨JavaMail的核心概念、关键组件以及如何使用这两个特定的jar包——`jaf-1_1_1.zip`和`javamail1_4_7.zip`。 首先,让我们了解JavaMail的基本组件: 1. **JavaMail API**:这是JavaMail的核心部分...

    JAVA发送邮件的JAR包

    这个JAR包——javamail-1.4.3,是JavaMail的一个版本,它包含了处理邮件所需的所有核心组件。 在JavaMail中,主要涉及以下几个关键知识点: 1. **MIME(Multipurpose Internet Mail Extensions)**:MIME是一种...

    javamail-1_4_1

    JavaMail支持MIME,所以你可以创建包含附件和HTML内容的复杂邮件。 3. **Message类**:这是JavaMail API的核心类,用于表示邮件消息。你可以设置发件人、收件人、主题、正文等信息,并添加附件。 4. **Session类**...

    javamail发送邮件

    它提供了丰富的API,能够处理复杂的邮件功能,包括添加附件、设置HTML内容以及我们关注的焦点——发送带有可点击链接的邮件。在这个场景中,JavaMail 被用来创建一封包含可点击链接的邮件,该链接可以引导收件人进行...

    javamail包 mail.jar activation.jar additionnal.jar

    例如,他们可以编写程序自动检查邮箱,过滤垃圾邮件,发送带有附件的复杂邮件,甚至实现邮件通知系统。在实际开发中,通常会将这些库添加到项目的类路径中,以便调用其API进行邮件操作。 JavaMail的使用通常包括...

    James学习笔记

    在工具方面,JavaMail 提供了实用的工具类,例如`MimeMessage`用于构建符合MIME标准的复杂邮件,`Address`类则用于处理收件人、发件人和抄送人的地址信息。此外,JavaMail 还支持附件、HTML内容、多部分消息和国际化...

    java发送邮件jar包和demo

    Java发送邮件功能是Java开发中常见的一项任务,主要用于企业级应用中的通知、验证或客户服务等场景。本资源包含实现这一功能所需的...在实际使用过程中,根据具体需求调整代码和配置,即可实现各种复杂的邮件发送功能。

    最新 JavaMail JAR 包 1.4.5,官方原版

    总之,JavaMail 1.4.5 是一个强大的工具,它使得 Java 开发者能够轻松地集成邮件功能,无论是简单的文本邮件还是复杂的多媒体邮件,都能够轻松处理。尽管现在可能有更新的版本,但 JavaMail 1.4.5 对于那些需要兼容...

    java发送邮件相关jar包

    `MimeMessage`是JavaMail API中最常用的邮件对象,它允许我们设置邮件的各个部分,包括发件人、收件人、主题、正文和附件。最后,通过`Transport`类的`send`方法发送邮件。 在实际开发中,我们常常结合Spring的邮件...

    Jmail结合JSP实现邮件的收发

    综上所述,通过结合使用JavaMail API和JSP技术,可以实现一个功能强大、易于使用的邮件收发系统,该系统不仅能够处理普通的文本邮件,还能够处理包含多媒体内容的复杂邮件。此外,正确处理中文邮件和字符集转换也是...

    Java发送普通邮件

    为了发送带有附件的邮件,我们还需要使用`MimeMultipart`类,它可以将多个`BodyPart`组合成一封包含文本、图片、文件等的复杂邮件。 总结起来,Java发送普通邮件涉及到的主要知识点包括: 1. JavaMail API的使用,...

    邮件必须包 activation.jar mail.jar.rar

    标题"邮件必须包 activation.jar mail.jar.rar"暗示了我们需要两个关键的JAR文件——`activation.jar`和`mail.jar`,它们是JavaMail API的重要组成部分。JavaMail API允许Java开发者编写能够处理邮件的程序,包括...

    java一键发送邮件,封装好的工具类

    总之,`EasyEmailUtil`简化了Java邮件发送的过程,通过封装邮件服务器配置和邮件构建,使得开发者能快速地实现邮件功能,无论是发送简单的文本邮件,还是包含复杂HTML内容和附件的邮件。在实际应用中,这样的工具类...

    james邮件内外网收发讲解

    `SendMail.java`可能是演示如何通过JavaMail API与SMTP服务器交互的示例代码,展示如何设置发件人、收件人、主题和正文,然后通过SMTP服务器发送邮件。 **POP3/IMAP4服务配置** 对于邮件接收,James提供了POP3和...

    oracle 发送带附件的邮件

    因此,如果需要发送带有附件的邮件,一般会使用UTL_SMTP,这是一个低级别的接口,可以构建复杂的邮件结构,包括多部分MIME消息,适合添加附件。或者,更常见的方式是通过调用Java存储过程,利用JavaMail API的功能。...

    mail-jar.zip包

    《Java邮件API详解——以mail.jar为例》 在Java编程领域,邮件处理是一个常见的需求,例如发送自动通知、订阅确认等。JavaMail API是Java平台上的标准库,它提供了发送和接收电子邮件的能力。本文将围绕"mail.jar...

    经典Java EE企业应用开发实战codes07

    在第七章中,我们将学习如何通过JavaMail API实现在Java应用程序中发送和接收邮件。 JavaMail API是Java平台上的一个开源库,用于处理SMTP(简单邮件传输协议)、POP3(邮局协议)和IMAP(因特网消息访问协议)等...

Global site tag (gtag.js) - Google Analytics