java 发送邮件带附件,正文带图片

import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
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;

public class SendEmail
{
//收件人邮箱地址
private String[] to;
//抄送人邮箱地址
private String[] copyto;
//发件人邮箱地址
private String from ="xxx";
//SMTP服务器地址 如:smtp.163.com
private String smtpServer = "xxx";
//登录SMTP服务器的用户名(不需要后面带@xxx.com)
private String username ="";
//登录SMTP服务器的密码 (服务密码,不是登录密码)
private String password ="xxx";
//邮件主题
private String subject;
//邮件正文
private String content;
//记录所有附件文件的集合
List<String> attachments = new ArrayList<String>();
// 发件人昵称 
private String senderNick = "xxx";
//无参数的构造器
public SendEmail()
{
}

public SendEmail(String[] to , String from , String smtpServer
, String username , String password
, String subject , String content,String senderNick,String[] copyto)
{
this.to = to;
this.from = from;
this.smtpServer = smtpServer;
this.username = username;
this.password = password;
this.subject = subject;
this.content = content;
this.senderNick = senderNick;
this.copyto = copyto;
}
//to属性的setter方法
public void setTo(String[] to)
{
this.to = to;
}
//to属性的setter方法
public void setCopyto(String[] copyto)
{
this.copyto = copyto;
}
//from属性的setter方法
public void setFrom(String from)
{
this.from = from;
}
//smtpServer属性的setter方法
public void setSmtpServer(String smtpServer)
{
this.smtpServer = smtpServer;
}
//username属性的setter方法
public void setUsername(String username)
{
this.username = username;
}
//password属性的setter方法
public void setPassword(String password)
{
this.password = password;
}
//subject属性的setter方法
public void setSubject(String subject)
{
this.subject = subject;
}
//content属性的setter方法
public void setContent(String content)
{
this.content = content;
}

public void setSenderNick(String senderNick)
{
this.senderNick = senderNick;
}

//把邮件主题转换为中文
public String transferChinese(String strText)
{
try
{
strText = MimeUtility.encodeText(new String(strText.getBytes() , "UTF-8"), "UTF-8", null);
}
catch(Exception e)
{
e.printStackTrace();
}
return strText;
}
//增加附件,将附件文件名添加的List集合中
public void attachfile(String fname)
{
attachments.add(fname);
}
//发送邮件
public boolean send(String path1,String path2) throws MalformedURLException
{
//创建邮件Session所需的Properties对象
Properties props = new Properties();
props.put("mail.smtp.host" , smtpServer);
props.put("mail.smtp.auth" , "true");
props.put("mail.smtp.debug" , "true");
//创建Session对象
Session session = Session.getDefaultInstance(props
//以匿名内部类的形式创建登录服务器的认证对象
, new Authenticator()
{
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(username, password);
}
});
try
{
//构造MimeMessage并设置相关属性值
MimeMessage msg = new MimeMessage(session);

String nick = "";
try {
nick = javax.mail.internet.MimeUtility.encodeText(senderNick);
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
//设置发件人
try {
msg.setFrom(new InternetAddress(from,nick));
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
//设置收件人
if (to != null && to.length > 0) {
String toListStr = getMailList(to);
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toListStr));
}

//设置抄送人
if (copyto != null && copyto.length > 0) {
String copytoListStr = getMailList(copyto);
msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(copytoListStr));
}
//InternetAddress[] addresses = {new InternetAddress(toListStr)};
//msg.setRecipients(Message.RecipientType.TO , addresses);
//设置邮件主题
subject = transferChinese(subject);
msg.setSubject(subject);
//构造Multipart
Multipart mp = new MimeMultipart();
//向Multipart添加正文
MimeBodyPart mbpContent = new MimeBodyPart();
mbpContent.setContent(content, "text/html;charset=UTF-8");
//将BodyPart添加到MultiPart中
mp.addBodyPart(mbpContent);

//path1="D:\xxx.png";
mbpContent = new MimeBodyPart();
DataSource fd = new FileDataSource(path1);
mbpContent.setDataHandler(new DataHandler(fd));
mbpContent.setHeader("Content-ID", "<image1>");
mp.addBodyPart(mbpContent);

//path2="D:\xxx.png";
mbpContent = new MimeBodyPart();
DataSource fd2 = new FileDataSource(path2);
mbpContent.setDataHandler(new DataHandler(fd2));
mbpContent.setHeader("Content-ID", "<image2>");
mp.addBodyPart(mbpContent);

//向Multipart添加附件
//遍历附件列表,将所有文件添加到邮件消息里
for(String efile : attachments)
{
MimeBodyPart mbpFile = new MimeBodyPart();
//以文件名创建FileDataSource对象
FileDataSource fds = new FileDataSource(efile);
//处理附件
mbpFile.setDataHandler(new DataHandler(fds));
try {
mbpFile.setFileName(MimeUtility.encodeText(fds.getName()));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//将BodyPart添加到MultiPart中
mp.addBodyPart(mbpFile);
}

//清空附件列表
attachments.clear();
//向Multipart添加MimeMessage
msg.setContent(mp);
//设置发送日期
msg.setSentDate(new Date());
//发送邮件
Transport.send(msg);
}
catch (MessagingException mex)
{
mex.printStackTrace();
return false;
}
return true;
}


//多用户发送用,号格开
public String getMailList(String[] mailArray) {
StringBuffer toList = new StringBuffer();
int length = mailArray.length;
if (mailArray != null && length < 2) {
toList.append(mailArray[0]);
} else {
for (int i = 0; i < length; i++) {
toList.append(mailArray[i]);
if (i != (length - 1)) {
toList.append(",");
}

}
}
return toList.toString();
}



public static void main(String[] args)
{

SendEmail sendMail = new SendEmail();
//设置收件人的地址多人用逗号隔开
String[] to = {"xxxx@xx.com", "xxx@xxxx.com"};
sendMail.setTo(to);
//设置抄送人人的地址多人用逗号隔开
String[] copyto = {"xxxx@xx.com"};
sendMail.setCopyto(copyto);

//设置标题
sendMail.setSubject("测试邮件标题!");
//设置内容
StringBuffer sb = new StringBuffer();
sb.append("<body>" );
sb.append("<p style='text-align:left'>hi,all</p>")
.append("<p style='text-align:left;text-indent:2em;'>这里是测试数据!</p>");

sendMail.setContent(sb.toString());
//附件
sendMail.attachfile("D://xxx.xls");
try {

//可以在这里设置你要发送的图片路径
if (sendMail.send(null,null))
{
System.out.println("---邮件发送成功---");
}
} catch (MalformedURLException e) {

e.printStackTrace();
}

}
}

原文地址:https://www.cnblogs.com/sx-zeng/p/7020102.html