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"); } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 垃圾邮件过滤器 python简单实现
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树