发送邮件
2014-01-21 11:21
211 查看
package com.justservice.expap.audit.action; import java.io.File; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Date; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Address; import javax.mail.Authenticator; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; 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; import sun.misc.BASE64Encoder; public class MailSend { /** * 更强大的发送邮件案例 发件方式枚举 * * @author wangmx */ public enum SendTypeEnum { TO(0, "发件方式 - 普通发送"), CS(1, "发件方式 - 抄送"), MCS(2, "发件方式 - 密件抄送"); private int type; private String description; SendTypeEnum(int type, String desc) { this.type = type; this.description = desc; } public int intValue() { return this.type; } public String getDescription() { return this.description; } } /** 邮件相关信息 - SMTP 服务器 */ private String smtpHost = null; /** 邮件相关信息 - 邮件用户名 */ private String username = null; /** 邮件相关信息 - 密码 */ private String password = null; /** 邮件相关信息 - 发件人邮件地址 */ private String fromAddress = null; /** 邮件相关信息 - 邮件主题 */ private String subject = ""; /** 邮件相关信息 - 邮件发送地址 */ private Address[] toAddress = null; /** 邮件相关信息 - 邮件抄送地址 */ private Address[] csAddress = null; /** 邮件相关信息 - 邮件密件抄送地址 */ private Address[] mcsAddress = null; /** 邮件相关信息 - 邮件正文(复合结构) */ private MimeMultipart context = null; public MailSend() { context = new MimeMultipart(); } /** * 设置 SMTP 服务器 * * @param strSMTPHost * 邮件服务器名称或 IP * @param strUser * 邮件用户名 * @param strPassword * 密码 */ public void setSMTP(String strSMTPHost, String strUser, String strPassword) { this.smtpHost = strSMTPHost; this.username = strUser; this.password = strPassword; } /** * 设置邮件发送地址 * * @param strFromAddress * 邮件发送地址 */ public void setFromAddress(String strFromAddress) { this.fromAddress = strFromAddress; } /** * 设置邮件目的地址 * * @param strAddress * 邮件目的地址列表, 不同的地址可用;号分隔 * @param iAddressType * 邮件发送方式 (SendTypeEnum.TO 0, SendTypeEnum.CS 1, SendTypeEnum.MCS * 2) 枚举已在本类定义 * @throws AddressException */ public void setAddress(String strAddress, SendTypeEnum iAddressType) throws AddressException { if (iAddressType == SendTypeEnum.TO) { ArrayList alAddress = splitStr(strAddress, ';'); toAddress = new Address[alAddress.size()]; for (int i = 0; i < alAddress.size(); i++) { toAddress[i] = new InternetAddress((String) alAddress.get(i)); } } else if (iAddressType == SendTypeEnum.CS) { ArrayList alAddress = splitStr(strAddress, ';'); csAddress = new Address[alAddress.size()]; for (int i = 0; i < alAddress.size(); i++) { csAddress[i] = new InternetAddress((String) alAddress.get(i)); } } else if (iAddressType == SendTypeEnum.MCS) { ArrayList alAddress = splitStr(strAddress, ';'); mcsAddress = new Address[alAddress.size()]; for (int i = 0; i < alAddress.size(); i++) { mcsAddress[i] = new InternetAddress((String) alAddress.get(i)); } } } /** * 设置邮件主题 * * @param strSubject * 邮件主题 */ public void setSubject(String strSubject) { this.subject = strSubject; } /** * 设置邮件文本正文 * * @param strTextBody * 邮件文本正文 * @throws MessagingException */ public void setContext(String strTextBody) throws MessagingException { MimeBodyPart mimebodypart = new MimeBodyPart(); mimebodypart.setText(strTextBody, "UTF-8"); context.addBodyPart(mimebodypart); } /** * 设置邮件超文本正文 * * @param strHtmlBody * 邮件超文本正文 * @throws MessagingException */ public void setHtmlContext(String strHtmlBody) throws MessagingException { MimeBodyPart mimebodypart = new MimeBodyPart(); mimebodypart.setDataHandler(new DataHandler(strHtmlBody, "text/html;charset=UTF-8")); context.addBodyPart(mimebodypart); } /** * 设置邮件正文外部链接 URL, 信体中将包含链接所指向的内容 * * @param strURLAttachment * 邮件正文外部链接 URL * @throws MessagingException * @throws MalformedURLException */ public void setURLAttachment(String strURLAttachment) throws MessagingException, MalformedURLException { MimeBodyPart mimebodypart = new MimeBodyPart(); mimebodypart.setDataHandler(new DataHandler(new URL(strURLAttachment))); context.addBodyPart(mimebodypart); } /** * 设置邮件附件 * * @param strFileAttachment * 文件的全路径 * @throws MessagingException * @throws UnsupportedEncodingException */ public void setFileAttachment(String strFileAttachment) throws MessagingException, UnsupportedEncodingException { File path = new File(strFileAttachment); if (!path.exists() || path.isDirectory()) { return; } String strFileName = path.getName(); MimeBodyPart mimebodypart = new MimeBodyPart(); mimebodypart.setDataHandler(new DataHandler(new FileDataSource( strFileAttachment))); sun.misc.BASE64Encoder base64 = new BASE64Encoder(); strFileName = java.net.URLDecoder.decode(strFileName, "UTF-8"); strFileName = MimeUtility.encodeText(strFileName, "UTF-8", "Q"); mimebodypart.setFileName(strFileName); // end of modify context.addBodyPart(mimebodypart); } /** * 主方法:邮件发送(一次发送多个地址, 优点速度快, 但是有非法邮件地址时将中断发送操作) 前提条件{ setSMTP();【必选】 * setFromAddress();【必选】 setAddress();【必选】 setSubject();【必选】 * set*Context();【必选】 set*Attachment();【可选】 } * * @throws MessagingException */ @SuppressWarnings("static-access") public void sendBatch() throws MessagingException { Properties properties = new Properties(); //<<<<<<< MailSend.java //// properties.put("mail.smtp.localhost", "221.122.112.250"); //// properties.put("mail.smtp.auth", "true");// 必须 //======= // properties.put("mail.smtp.localhost", "221.122.112.250"); //// properties.put("mail.smtp.host", "mail.medmail.com.cn"); // properties.put("mail.smtp.auth", "true");// 必须 //>>>>>>> 1.7 // properties.put("mail.smtp.host", this.smtpHost); // properties.put("mail.smtp.auth", "true");// 必须 // 设置邮件服务器 properties.put("mail.smtp.host", "mail.medmail.com.cn"); properties.put("mail.smtp.auth", "true");// 验证 Session session = Session.getInstance(properties, new Authenticator() { protected javax.mail.PasswordAuthentication getPasswordAuthentication() {// 这个很重要,当今mail服务器大多都是通过认证才能发信的 return new javax.mail.PasswordAuthentication( MailSend.this.username, MailSend.this.password); } }); MimeMessage mimemessage = new MimeMessage(session); mimemessage.setFrom(new InternetAddress(this.fromAddress)); /* * if (toAddress != null) { * mimemessage.addRecipients(javax.mail.Message.RecipientType.TO, * this.toAddress); } if (csAddress != null) { * mimemessage.addRecipients(javax.mail.Message.RecipientType.CC, * this.csAddress); } if (mcsAddress != null) { * mimemessage.addRecipients(javax.mail.Message.RecipientType.BCC, * this.mcsAddress); } */ //收件人 mimemessage .addRecipients(javax.mail.Message.RecipientType.TO, new Address[] { new InternetAddress("979745553@qq.com"), new InternetAddress( "payton.liu@justservice.com.cn") }); //抄送人 mimemessage .addRecipients(javax.mail.Message.RecipientType.CC, new Address[] { new InternetAddress("979745553@qq.com"), new InternetAddress( "payton.liu@justservice.com.cn") }); mimemessage.setSubject(this.subject); mimemessage.setContent(this.context); mimemessage.setSentDate(new Date()); /* * 发送方式一 Transport transport = session.getTransport("smtp"); * transport.connect(this.smtpHost, this.username, this.password); * transport.send(mimemessage); */ // 发送方式二 try { Transport.send(mimemessage); } catch (Exception e) { e.printStackTrace(); // TODO: handle exception } System.out.println("已向下列邮箱发送了邮件"); showAddress(toAddress, csAddress, mcsAddress); } /** * 显示所有的收件人地址信息 * * @param addresses */ private static void showAddress(Address[]... addresses) { if (addresses != null) { for (int i = 0; i < addresses.length; i++) { if (addresses[i] != null) { for (int j = 0; j < addresses[i].length; j++) { System.out.println(addresses[i][j]); } } } } } /** * 将字符串分割成字符串集合 * * @param str * 字符串 * @param sp * 分隔符 * @return */ private static ArrayList splitStr(String str, char sp) { ArrayList retu = new ArrayList(); String[] res = str.split("" + sp); for (String s : res) { retu.add(s); } return retu; } public static void main(String[] args) { try { MailSend mail = new MailSend(); // 邮件发送者的地址 mail.setFromAddress("send@address"); //服务器、用户、密码 mail.setSMTP("mail.medmail.com.cn","user@address", "pwd"); mail.setAddress("979745553@qq.com", SendTypeEnum.TO); mail.setAddress("payton.liu@justservice.com.cn", SendTypeEnum.TO); mail.setAddress("975580111@qq.com", SendTypeEnum.CS); mail.setSubject("邮件发送测试3");// 标题 mail.setContext("如有打扰,请见谅,谢谢!");//内容 // mail.setHtmlContext("如有打扰,请见谅,谢谢!");//支持html try { mail.setFileAttachment("c:\\xxx.txt");// 本地附件 mail.setURLAttachment("http://static.tieba.baidu.com/tb/img/2010120801.jpg");//网络文件 mail.setURLAttachment("http://static.tieba.baidu.com/tb/editor/images/jd/j_0017.gif"); // mail.setURLAttachment("http://tieba.baidu.com");//引用网页 } catch (Exception e) { e.printStackTrace(); System.out.println("附件发送异常"); } mail.sendBatch(); } catch (AddressException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } } }
相关文章推荐
- 2013年年终总结
- 2013年年终总结
- 配置快捷键让Total Commander跳转到某个目录
- CAD环境中求算接合表面积
- bootstrap
- 在其他app里预览文档
- 主流浏览器的兼容问题及注意事项
- 【Android】关于执行adb shell的错误解决
- 关于微信分享链接
- Android音频系统之音频框架
- 在IIS中启用父路径,不被黑客利用
- ORA-01480 trailing null missing from STR bind value
- 素数筛选法
- Linux 下如何 sql*plus 实现上下键历史记录显示(安装rlwrap 以及 readline)
- osg 立方体贴图
- spring.net 下载地址 神一样的官网,找了半天找不到下载地址!!最终得到下面的下载地址
- Android ImageView图片自适应
- Android音频系统之音频基础
- 字符串包含字符串
- WinXP下替代IIS的新思路