复杂邮件程序完整Java源码,支持添加附件,图片,HTML格式文本,支持远程WebService调用
文件大小: 503k
源码售价: 10 个金币 积分规则     积分充值
资源说明:/* 复杂邮件程序完整Java源码,支持添加附件,图片,HTML格式文本,支持远程WebService调用*/ package com.hx.mail; import java.io.File; import java.util.Map; import javax.mail.Message.RecipientType; /** * MailServices 邮件接收发送接口定义类 * * @author 380595305@qq.com * Date 2010-05-11 * @version 1.0 */ public interface HexiangMailService { /** * sendMail 发送邮件函数 * * @param sender 是String类型,邮件发送者信息 * @param password 是String类型,邮件发送者密码 * @param addressee 是String类型,邮件接收者信息 * @param subject 是String类型,传入邮件主题 * @param text 是String类型,传入邮件消息 */ void sendMail(String sender,String password,String addressee,String subject,String text) throws Exception; /** * sendMail 发送邮件函数 * * @param sender 是String类型,邮件发送者信息 * @param password 是String类型,邮件发送者密码 * @param addressee 是String类型,邮件接收者信息 * @param subject 是String类型,传入邮件主题 * @param text 是String类型,传入邮件消息 * @param enclosures Map 邮件附件 * @param copyToSends Map 邮件抄送信息 */ void sendMail(String sender,String password,String addressee,String subject,String text,Map enclosures,Map copyToSends) throws Exception; /** * sendMail 发送邮件函数 * * @param sender 是String类型,邮件发送者信息 * @param password 是String类型,邮件发送者密码 * @param subject 是String类型,传入邮件主题 * @param imgs 是File[]类型,邮件正文中附件的图片信息 * @param htmlContent 是String类型,传入邮件消息正文 * @param enclosures Map 邮件附件 * @param copyToSends Map 邮件抄送信息 */ void sendMail(String sender,String password,String subject,File[] imgs,String htmlContent,Map enclosures,Map copyToSends) throws Exception; } package com.hx.mail; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.Address; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.Message.RecipientType; 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 org.codehaus.xfire.attachments.ByteDataSource; /** * HexiangMailServiceImpl 邮件接收发送接口实现类 * * @author 380595305@qq.com * Date 2010-05-11 * @version 1.0 */ public class HexiangMailServiceImpl implements HexiangMailService { /** MailboxType 邮箱类型 */ private static Map MailboxTypes = null; /** host 邮箱服务器类型 */ private String host = null; /** sender 邮件发送者 */ private String sender = null; /** addressee 邮件接收者 */ private String addressee = null; /** subject 邮件主题 */ private String subject = null; /** text 邮件消息 */ private String text = null; public static void init() { MailboxTypes = new HashMap(); MailboxTypes.put("163", "smtp.163.com"); MailboxTypes.put("139", "smtp.139.com"); MailboxTypes.put("126", "smtp.126.com"); MailboxTypes.put("qq", "smtp.qq.com"); MailboxTypes.put("live", "smtp.live.cn"); MailboxTypes.put("msn", "smtp.msn.com"); MailboxTypes.put("kum", "mail.kum.net.cn"); MailboxTypes.put("hotmail", "smtp.hotmail.cn"); } /** * initialization 实例化类成员变量 */ private void initialization(String sender, String addressee, String subject, String text) { this.sender = sender; this.addressee = addressee; this.subject = subject; this.text = text; this.host = getHost(sender); // System.out.println("sender->"+this.sender+" | // addressee->"+this.addressee+" | subject->"+this.subject+" | // text->"+this.text+" | host->"+this.host); } /** * getHost 获取目标邮箱服务器类型 * * @param sender * 是String类型,传入邮件发送者邮箱地址信息 * @return String 返回目标邮箱服务器类型 */ private String getHost(String sender) { String _host, _host_ = null; _host = sender.substring(sender.indexOf("@") + 1, sender.indexOf(".")); if (MailboxTypes == null) { init(); } _host_ = MailboxTypes.get(_host); // System.out.println(_host+" <--> "+_host_); if (_host_ == null) { // MailboxTypes.put(_host,"smtp."+_host+".com"); MailboxTypes.put(_host, "smtp." + sender.substring(sender.indexOf("@") + 1, sender .length())); } return MailboxTypes.get(_host); } public void sendMail(String sender, String password, String addressee, String subject, String text) throws Exception { initialization(sender, addressee, subject, text); Properties props = System.getProperties(); { props.put("mail.smtp.host", this.host); props.put("mail.smtp.auth", "true"); } ValidateAuther auther = new ValidateAuther(this.sender, password); Session session = Session.getDefaultInstance(props, auther); MimeMessage msg = new MimeMessage(session); InternetAddress fromAddr = new InternetAddress(this.sender); // 发送者邮箱地址 InternetAddress toAddr = new InternetAddress(this.addressee); // 接收者邮箱地址 msg.setFrom(fromAddr); msg.addRecipient(Message.RecipientType.TO, toAddr); /** * Message.RecipientType.TO -- 接收者 Message.RecipientType.CC -- 抄送 * Message.RecipientType.BCC --秘密抄送者 */ msg.setSubject(this.subject); // 邮件主题 msg.setText(this.text); // 邮件信息 Transport.send(msg); // 发送邮件 } public void sendMail(String sender, String password, String addressee, String subject, String text, Map enclosures, Map copyToSends) throws Exception { initialization(sender, addressee, subject, text); Properties props = System.getProperties(); { props.put("mail.smtp.host", this.host); props.put("mail.smtp.auth", "true"); } ValidateAuther auther = new ValidateAuther(this.sender, password); Session session = Session.getDefaultInstance(props, auther); Message msg = new MimeMessage(session); InternetAddress fromAddr = new InternetAddress(this.sender); // 发送者邮箱地址 InternetAddress toAddr = new InternetAddress(this.addressee); // 接收者邮箱地址ַ msg.setFrom(fromAddr); msg.addRecipient(Message.RecipientType.TO, toAddr); msg.setSubject(this.subject); // 邮件主题 msg.setText(this.text); // 邮件信息 msg = setCopyToSends(msg, copyToSends); // 设置抄送信息 try { MimeMultipart msgMultipart = new MimeMultipart("mixed"); // 创建邮件复杂体 msgMultipart = setEnclosureFile(msgMultipart, enclosures); // 设置附件信息 msg.setContent(msgMultipart); // 将邮件复杂体添加到邮件正文中 MimeBodyPart content = new MimeBodyPart(); // 创建邮件复杂体正文信息 msgMultipart.addBodyPart(content); // 将正文信息添加到复杂体中 MimeMultipart bodyMultipart = new MimeMultipart("related"); content.setContent(bodyMultipart); MimeBodyPart htmlPart = new MimeBodyPart(); // 创建HTML文本域 bodyMultipart.addBodyPart(htmlPart); // 将HTML文本域添加到正文组合中 DataSource htmlDs = new ByteDataSource(this.text==null?"".getBytes():this.text.getBytes()); // 指定文本域,创建DataSource DataHandler htmlDh = new DataHandler(htmlDs); htmlPart.setDataHandler(htmlDh); htmlPart.setContent(this.text, "text/html;charset=gbk"); msg.saveChanges(); // 生成邮件 String filePath = "d:\\demo1.eml"; OutputStream os = new FileOutputStream(filePath); msg.writeTo(os); os.close(); } catch (MessagingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // Transport.send(msg); // 发送邮件 } public void sendMail(String sender, String password, String subject, File[] imgs, String htmlContent, Map enclosures, Map copyToSends) throws Exception { initialization(sender, addressee, subject, htmlContent); Properties props = System.getProperties(); { props.put("mail.smtp.host", this.host); props.put("mail.smtp.auth", "true"); } ValidateAuther auther = new ValidateAuther(this.sender, password); Session session = Session.getDefaultInstance(props, auther); Message msg = new MimeMessage(session); InternetAddress fromAddr = new InternetAddress(this.sender); // 发送者邮箱地址 // InternetAddress toAddr = new InternetAddress(this.addressee); // // 接收者邮箱地址ַ msg.setFrom(fromAddr); // msg.addRecipient(Message.RecipientType.TO, toAddr); msg.setSubject(this.subject); // 邮件主题 // msg.setText(this.text); // 邮件信息 msg = setCopyToSends(msg, copyToSends); // 设置抄送信息 try { MimeMultipart msgMultipart = new MimeMultipart("mixed"); // 创建邮件复杂体 msgMultipart = setEnclosureFile(msgMultipart, enclosures); // 设置附件信息 msg.setContent(msgMultipart); // 将邮件复杂体添加到邮件正文中 if (htmlContent != null || (imgs != null && imgs.length > 0)) { MimeBodyPart content = new MimeBodyPart(); // 创建邮件复杂体正文信息 msgMultipart.addBodyPart(content); // 将正文信息添加到复杂体中 // 搭建正文组合架构 -- 创建正文复杂体<含有html文本和图片文件> //related --> 关联关系 MimeMultipart bodyMultipart = new MimeMultipart("related"); content.setContent(bodyMultipart); StringBuffer htmlBuffer = new StringBuffer(); // 添加HTML文本域信息 // if (htmlContent != null) { // htmlContent = htmlBuffer.toString(); MimeBodyPart htmlPart = new MimeBodyPart(); // 创建HTML文本域 bodyMultipart.addBodyPart(htmlPart); // 将HTML文本域添加到正文组合中 // DataSource htmlDs = new FileDataSource(htmlContent);// // 指定文件域,创建DataSource DataSource htmlDs = new ByteDataSource(htmlContent.getBytes()); // 指定文本域,创建DataSource DataHandler htmlDh = new DataHandler(htmlDs); // DataHandler // 文件包装数据类 htmlPart.setDataHandler(htmlDh); // htmlPart.setContent(htmlContent,"text/html;charset=gbk"); // } // 添加图片域信息 if (imgs != null && imgs.length > 0) { htmlBuffer.append(htmlContent); // HTML格式文本域 for (int i = 0; i < imgs.length; i++) { MimeBodyPart gifPart = new MimeBodyPart(); bodyMultipart.addBodyPart(gifPart); // 将图片域添加到正文组合中 DataSource gifDs = new FileDataSource(imgs[i]); DataHandler gifDh = new DataHandler(gifDs); gifPart.setDataHandler(gifDh); gifPart.setFileName(MimeUtility .encodeText(getFileName(imgs[i].getName()))); htmlBuffer.append(""); // 将图片域加入到文本域中 gifPart.setHeader("Content-Location", MimeUtility .encodeText(imgs[i].getName())); // 指定该图片(文件)路径从本地关联文件中找 } } htmlContent = htmlBuffer.toString(); // 设置正文文本域及文本类型 htmlPart.setContent(htmlContent, "text/html;charset=gbk"); } msg.saveChanges(); // 生成邮件 String filePath = "d:\\demo2.eml"; OutputStream os = new FileOutputStream(filePath); msg.writeTo(os); os.close(); } catch (MessagingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Transport.send(msg); // 发送邮件 } // 获取邮件地址信息 public static Address[] getAddress(List recpType) throws AddressException, UnsupportedEncodingException { if (recpType == null || recpType.isEmpty()) { return null; } Address[] addrs = new Address[recpType.size()]; for (int i = 0; i < addrs.length; i++) { String nickNameAccount = getNickName(recpType.get(i)); String[] nickName_account = nickNameAccount.split(","); // System.out.println(nickName_account); addrs[i] = new InternetAddress("\"" + MimeUtility.encodeText("" + nickName_account[0] + "") + "\" <" + nickName_account[1] + ">"); } return addrs; } // 获取邮箱账号昵称信息 public static String getNickName(String mailAccount) { int index = mailAccount.lastIndexOf("<"); if (index == -1) { // 不含有昵称信息,未找到"<>" // hexiang221@163.com String nickName = mailAccount.substring(0, mailAccount .lastIndexOf("@")); return nickName + "," + mailAccount; } else if (index == 0) { // 不含有昵称信息 但找到了"<>" // String nickName = mailAccount.substring(index + 1, mailAccount .lastIndexOf("@")); String account = mailAccount.substring(index + 1, mailAccount .lastIndexOf(">")); return nickName + "," + account; } else if (index > 0) { // 含有昵称信息,并且找到了"<>" String nickName = mailAccount.substring(0, index); String account = mailAccount.substring(index + 1, mailAccount .lastIndexOf(">")); return nickName + "," + account; } return mailAccount; } // 获取附件显示名称 public static String getFileName(String filePath) { String fileName = null; // �ļ��� if (filePath == null || filePath.length() == 0) { return null; } int index = filePath.lastIndexOf("/"); if (index == -1) { return filePath; } fileName = filePath.substring(filePath.lastIndexOf("/") + 1); int index2 = fileName.lastIndexOf("\\"); if (index2 == -1) { return fileName; } return fileName.substring(filePath.lastIndexOf("\\")); } // 设置邮件附件信息 public static MimeMultipart setEnclosureFile(MimeMultipart msgMultipart, Map enclosures) throws MessagingException, UnsupportedEncodingException { if (enclosures == null || enclosures.isEmpty()) { return msgMultipart; } if (msgMultipart == null) { msgMultipart = new MimeMultipart("mixed"); // 创建邮件复杂体 } Set enclosureSet = enclosures.keySet(); Iterator enclosureIter = enclosureSet.iterator(); while (enclosureIter.hasNext()) { String attchFileName = enclosureIter.next(); MimeBodyPart attch = new MimeBodyPart(); msgMultipart.addBodyPart(attch); File temEnclosureFile = enclosures.get(attchFileName); DataSource ds = new FileDataSource(temEnclosureFile); DataHandler dh = new DataHandler(ds); attch.setDataHandler(dh); attch.setFileName(MimeUtility .encodeText(getFileName(attchFileName)));// 设置附件显示名称 } return msgMultipart; } public static Message setCopyToSends(Message msg, Map copyToSends) throws AddressException, UnsupportedEncodingException, MessagingException { if (copyToSends == null) { return msg; } Set copyToSendSet = copyToSends.keySet(); Iterator copyToSendIter = copyToSendSet.iterator(); List to = new ArrayList(); // 定义接收者账号信息集 List cc = new ArrayList(); // 定义抄送者账号信息集 List bcc = new ArrayList();// 定义秘密抄送者账号信息集 while (copyToSendIter.hasNext()) { String address = copyToSendIter.next(); // 获取抄送者邮箱账号信息 RecipientType tmpRecipientType = copyToSends.get(address); if (tmpRecipientType == RecipientType.TO) { to.add(address); } if (tmpRecipientType == RecipientType.CC) { cc.add(address); } if (tmpRecipientType == RecipientType.BCC) { bcc.add(address); } } // 获取接收者信息集 Address[] to_addrs = getAddress(to); if (to_addrs != null) { msg.setRecipients(MimeMessage.RecipientType.TO, to_addrs); } // 获取抄送者信息集 Address[] cc_addrs = getAddress(cc); if (cc_addrs != null) { msg.setRecipients(MimeMessage.RecipientType.CC, cc_addrs); } // 获取秘密抄送者信息集 Address[] bcc_addrs = getAddress(bcc); if (bcc_addrs != null) { msg.setRecipients(MimeMessage.RecipientType.BCC, bcc_addrs); } return msg; } } /** * ValidateAuther 邮件验证类,验证邮件发送者信息 */ class ValidateAuther extends Authenticator { /** 邮件发送者 */ private String sender; /** 邮件接受者 */ private String password; /** * ValidateAuther 验证邮件发送者信息 * * @param userName * 是String类型,传入邮件发送者账户 * @param password * 是String类型,传入邮件发送者账户密码 */ public ValidateAuther(String sender, String password) { this.sender = sender; this.password = password; } /** * getPasswordAuthentication 验证邮件发送者账户信息的函数 * * @param userName * 邮件发送者账户信息 * @param password * 邮件发送者账户密码 * @return PasswordAuthentication 返回邮件发送者账户验证信息 */ @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(sender, password); } } // 支持WebService远程调用 HexiangMailService com.hx.mail.HexiangMailService com.hx.mail.HexiangMailServiceImpl literal application
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。