您的位置:首页 > 编程语言 > Java开发

java发送email

2015-07-14 17:22 639 查看
package com.zhou.email;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
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 AttchImgMail {

/**
* Message对象将存储我们实际发送的电子邮件信息,
* Message对象被作为一个MimeMessage对象来创建并且需要知道应当选择哪一个JavaMail session。
*/
private MimeMessage message;

/**
* Session类代表JavaMail中的一个邮件会话。
* 每一个基于JavaMail的应用程序至少有一个Session(可以有任意多的Session)。
*
* JavaMail需要Properties来创建一个session对象。
* 寻找"mail.smtp.host"    属性值就是发送邮件的主机
* 寻找"mail.smtp.auth"    身份验证,目前免费邮件服务器都需要这一项
*/
private Session session;

/***
* 邮件是既可以被发送也可以被受到。JavaMail使用了两个不同的类来完成这两个功能:Transport 和 Store。
* Transport 是用来发送信息的,而Store用来收信。对于这的教程我们只需要用到Transport对象。
*/
private Transport transport;

private String mailHost="";
private String sender_username="";
private String sender_password="";
private String sendto_names = "";
private String sendtocc_names = "";

private Properties properties = new Properties();
/*
* 初始化方法
*/
public AttchImgMail(boolean debug) {
InputStream in = AttchImgMail.class.getClassLoader().getResourceAsStream("message.properties");
try {
properties.load(in);
this.mailHost = properties.getProperty("mail.smtp.host");
this.sender_username = properties.getProperty("mail.sender.username");
this.sender_password = properties.getProperty("mail.sender.password");
this.sendto_names = properties.getProperty("mail.sendto.username");
this.sendtocc_names = properties.getProperty("mail.sendtocc.username");
} catch (IOException e) {
e.printStackTrace();
}

session = Session.getInstance(properties);
session.setDebug(debug);//开启后有调试信息
message = new MimeMessage(session);
}
/**
*
* @param imgPath
* @param imgPath1
* @param sender 发件人
* @param toUser 收件人
* @param toCcUser 抄送人
* @param content
* @param subject
* @throws Exception
* JavaMail需要Properties来创建一个session对象。它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机.
*/
public void doSendHtmlEmail(String imgPath,String imgPath1,String toUser,String toCcUser,String content,String subject) throws Exception {
Properties properties = new Properties();
properties.put("mail.smtp.host", mailHost);// 设置smtp主机
properties.put("mail.smtp.auth", "true");// 使用smtp身份验证
properties.put("mail.sender.username",sender_username);
properties.put("mail.sender.password",sender_password);
/*
* 在 JavaMail 中,可以通过 extends Authenticator 抽象类,在子类中覆盖父类中的
* getPasswordAuthentication() 方法,就可以实现以不同的方式来进行登录邮箱时的用户身份认证。JavaMail
* 中的这种设计是使用了策略模式(Strategy
*/
session = Session.getInstance(properties);
// 设置邮件的属性
// 设置邮件的发件人
message.setFrom(new InternetAddress("datacenter@imtzp.com"));
// 设置邮件的收件人 cc表示抄送 bcc 表示暗送
//message.setRecipient(Message.RecipientType.TO, new InternetAddress(toUser));
//message.setRecipient(Message.RecipientType.CC, new InternetAddress(toCcUser));
// 设置邮件的主题
message.setSubject(subject);
// 创建邮件的正文
MimeBodyPart text = new MimeBodyPart();
// setContent(“邮件的正文内容”,”设置邮件内容的编码方式”)
text.setContent(content+"<br><br><img src='cid:a'><br><br><img src='cid:b'>",
"text/html;charset=gb2312");

// 点到点的发送
// 一对多发送只要改一个地方如下:

// // 构建一个群发地址数组
String[] toMore = toUser.split(",");
InternetAddress[] adr=new InternetAddress[toMore.length];
for(int i=0;i<toMore.length;i++){
adr[i]=new InternetAddress(toMore[i]);
}
//Message的setRecipients方法支持群发。。注意:setRecipients方法是复数和点 到点不一样
message.setRecipients(Message.RecipientType.TO,adr);

String[] ccMore = toCcUser.split(",");
InternetAddress[] adrcc=new InternetAddress[ccMore.length];
for(int i=0;i<ccMore.length;i++){
adrcc[i]=new  InternetAddress(ccMore[i]);
}
//Message的setRecipients方法支持群发。。注意:setRecipients方法是复数和点 到点不一样
message.setRecipients(Message.RecipientType.CC,adrcc);

// 创建图片
MimeBodyPart img = new MimeBodyPart();
/*
* JavaMail API不限制信息只为文本,任何形式的信息都可能作茧自缚MimeMessage的一部分.
* 除了文本信息,作为文件附件包含在电子邮件信息的一部分是很普遍的. JavaMail
* API通过使用DataHandler对象,提供一个允许我们包含非文本BodyPart对象的简便方法.
*/
DataHandler dh = new DataHandler(new FileDataSource(imgPath));//图片路径
img.setDataHandler(dh);
// 创建图片的一个表示用于显示在邮件中显示
img.setContentID("a");

MimeBodyPart img2 = new MimeBodyPart();
DataHandler dh2 = new DataHandler(new FileDataSource(imgPath1));//第二张图片路径
img2.setDataHandler(dh2);
img2.setContentID("b");
// 创建附件
// MimeBodyPart attch = new MimeBodyPart();
// DataHandler dh1 = new DataHandler(new FileDataSource("src//b.jpg"));
// attch.setDataHandler(dh1);
// String filename1 = dh1.getName();
// MimeUtility 是一个工具类,encodeText()用于处理附件字,防止中文乱码问题
// attch.setFileName(MimeUtility.encodeText(filename1));
// 关系 正文和图片的
MimeMultipart mm = new MimeMultipart();
mm.addBodyPart(text);
mm.addBodyPart(img);
mm.setSubType("related");// 设置正文与图片之间的关系
// 图班与正文的 body
MimeBodyPart all = new MimeBodyPart();
all.setContent(mm);
// 附件与正文(text 和 img)的关系
MimeMultipart mm2 = new MimeMultipart();
mm2.addBodyPart(all);
mm2.addBodyPart(img2);
mm2.setSubType("mixed");// 设置正文与附件之间的关系

message.setContent(mm2);
message.saveChanges(); // 保存修改

transport = session.getTransport("smtp");
// smtp验证,就是你用来发邮件的邮箱用户名密码
transport.connect(mailHost, sender_username, sender_password);
// 发送
transport.sendMessage(message, message.getAllRecipients());

System.out.println("邮件发送成功");

}

public static void main(String[] args) throws Exception {
AttchImgMail atm = new AttchImgMail(false);
atm.doSendHtmlEmail("e:\\version\\img\\110.png", "e:\\version\\img\\110.png",atm.sendto_names,atm.sendtocc_names,"ccc","ccc");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  email java 邮件