包括基本的文字邮件、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&&id=29&&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();
}
}
}
祝好运!