在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

java实现发送邮件可多个附件内嵌图片

2016-12-20 13:16| 发布者: zhangjf| 查看: 584| 评论: 0

摘要: 前言 java实现发邮件功能,其实SUN在javaEE的开发包里给我们提供了相关的工具,利用 mail.jar 和 activation.jar可以实现这个功能,n年前包括我第一次实习的时候项目上也是用SUN提供的包实现的,实现起来比 ...
前言

java实现发邮件功能,其实SUN在javaEE的开发包里给我们提供了相关的工具,利用 mail.jar 和 activation.jar可以实现这个功能,n年前包括我第一次实习的时候项目上也是用SUN提供的包实现的,实现起来比较繁琐麻烦,今天我们就用 Apache的工具包commons-email包来实现发送带邮件和内嵌图片的功能,它是把前者做了下封装,使用起来更加的简易方便明了,所以我们使用 commons-email来实现发送邮件的功能,必须也引入mail.jar,activation.jar2个依赖包,MyEclipse中是自带 的,所以你如果不知道commons-email.jar还需要依赖这个2个包的话,一旦把项目换到其他开发环境中,可能就出现ClassNotFund 异常,不知道的你可能可能还在郁闷之中呢,这里给大家提供一下这三个jar包免费下载地址:java邮件功能jar包免费下载,好了废话,不多说,直接切入代码,代码中我注释的很详尽,就不做多余的解释了,大家一看就明白了。

说明

由于时间紧,一直忙于项目的封闭开发,所以先直接贴出实现代码 和测试代码,暂时不做排版和各个功能代码的说明和注意事项,不过代码注释已非常详尽,大家一看就会明白的,等有时间了会对博文做进一步的修色和排版、代码 的说明以方面大家更好的理解和掌握,如有什么疑问或建议,欢迎留言!


实现代码:
  1. package sendemail;
  2. import java.net.MalformedURLException;
  3. import java.net.URL;
  4. import java.util.Map;
  5. import javax.mail.MessagingException;
  6. import org.apache.commons.mail.EmailAttachment;
  7. import org.apache.commons.mail.EmailException;
  8. import org.apache.commons.mail.HtmlEmail;
  9. import org.apache.commons.mail.ImageHtmlEmail;
  10. import org.apache.commons.mail.resolver.DataSourceUrlResolver;
  11. public class Email {
  12. //邮箱服务器的登录用户名
  13. private static String username="642417953@qq.com";
  14. //邮箱服务器的密码
  15. private static String password="1234567890";
  16. //邮箱服务器smtp host,此处采用自己的QQ邮箱作为邮件服务器
  17. private static String smtpHost="smtp.qq.com";
  18. //发送方的邮箱(必须为邮箱服务器的登录用户名)
  19. private static String fromEmail="642417953@qq.com";
  20. //发送方姓名
  21. private static String fromUsername="某某公司";
  22. //邮件内容编码,防止乱码
  23. private static String charset="UTF-8";
  24. /**
  25. *java发送邮件-commons-email
  26. * @param nameAndAddrMap 用户名及对应的邮箱组成的Map
  27. * @param subject 邮件主题或标题
  28. * @param htmlContent 邮件内容html格式
  29. * @throws EmailException
  30. * @throws MessagingException
  31. * @author chenleixing
  32. */
  33. public static void sendEmail(Map<String,String> nameAndAddrMap,String subject,String htmlContent)
  34. throws EmailException, MessagingException{
  35. //SimpleEmail email = new SimpleEmail();//创建简单邮件,不可附件、HTML文本等
  36. //MultiPartEmail email = new MultiPartEmail();//创建能加附件的邮件,可多个、网络附件亦可
  37. /*ImageHtmlEmail:HTML文本的邮件、通过2代码转转内联图片, 1.3新增的,但我怎么也测试不成功
  38. ImageHtmlEmail网上都是官网上例子而官网上例子比较模糊
  39. ImageHtmlEmail email=new ImageHtmlEmail();*/
  40. HtmlEmail email = new HtmlEmail();//创建能加附件内容为HTML文本的邮件、HTML直接内联图片但必须用setHtmlMsg()传邮件内容
  41. //email.setDebug(true);//是否开启调试默认不开启
  42. email.setSSLOnConnect(true);//开启SSL加密
  43. email.setStartTLSEnabled(true);//开启TLS加密
  44. //设置smtp host,此处采用自己的QQ邮箱作为邮件服务器
  45. email.setHostName(Email.smtpHost);
  46. //登录邮件服务器的用户名和密码(保证邮件服务器POP3/SMTP服务开启)
  47. email.setAuthentication(Email.username, Email.password);
  48. email.setFrom(Email.fromEmail,Email.fromUsername);//发送方
  49. for(Map.Entry<String, String> map:nameAndAddrMap.entrySet()){//遍历用户名及对应的邮箱地址组成的map
  50. email.addTo(map.getValue(),map.getKey());//接收方邮箱和用户名
  51. }
  52. //email.addCc("chen_leixing@qq.com");//抄送方
  53. //email.addBcc("leixing_chen@120.com");//秘密抄送方
  54. email.setCharset(Email.charset);//设置邮件的字符集为UTF-8防止乱码
  55. email.setSubject(subject);//主题
  56. email.setHtmlMsg(htmlContent);//邮件内容:<font color='red'>测试简单邮件发送功能!</font>
  57. /*HtmlEmail、ImageHtmlEmail有setHtmlMsg()方法,且可以直接内联图片,可网上都搞那么复杂说不行如
  58. *<img src='http://img.it-home.org/data/attachment/forum/2016pic3/asf_logo_wide.gif' />本人测试新浪、搜狐、QQ邮箱等都能显示
  59. */
  60. /*//如果使用setMsg()传邮件内容,则HtmlEmail内嵌图片的方法
  61. URL url = new URL("http://www.jianlimuban.com/图片");
  62. String cid = email.embed(url, "名字");
  63. email.setHtmlMsg("<img src='cid:"+cid+"' />");*/
  64. //这是ImageHtmlEmail的内嵌图片方法,我多次测试都不行,官网提供比较模糊,而大家都是用官网举的例子
  65. //内嵌图片,此处会抛出MessagingException, MalformedURLException异常
  66. //URL url=new URL("http://www.apache.org");//定义你基本URL来解决相对资源的位置
  67. //email.setDataSourceResolver(new DataSourceUrlResolver(url));//这样HTML内容里如果有此路径下的图片会直接内联
  68. //创建邮件附件可多个
  69. EmailAttachment attachment = new EmailAttachment();//创建附件
  70. attachment.setPath("D:\MongoDB.txt");//本地附件,绝对路径
  71. //attachment.setURL(new URL("http://www.baidu.com/moumou附件"));//可添加网络上的附件
  72. attachment.setDisposition(EmailAttachment.ATTACHMENT);
  73. attachment.setDescription("MongoDB入门精通");//附件描述
  74. attachment.setName("NoSQL数据库");//附件名称
  75. email.attach(attachment);//添加附件到邮件,可添加多个
  76. email.attach(attachment);//添加附件到邮件,可添加多个
  77. /*email.buildMimeMessage();//构建内容类型 ,
  78. //设置内容的字符集为UTF-8,先buildMimeMessage才能设置内容文本 ,但不能发送HTML格式的文本
  79. email.getMimeMessage().setText("<font color='red'>测试简单邮件发送功能!</font>","UTF-8");*/
  80. email.send();//发送邮件
  81. }
  82. }
复制代码

测试代码:
  1. package sendemail;
  2. import java.util.Map;
  3. import org.junit.Test;
  4. import com.google.common.collect.Maps;
  5. public class EmailTest {
  6. [url=home.php?mod=space&uid=5447]@test[/url]
  7. public void testSendSimpleEmail(){
  8. //用户名和对应的邮箱
  9. Map<String,String> nameAndAddrMap=Maps.newHashMap();//新建一个map
  10. nameAndAddrMap.put("张三","chen*****@sina.com");
  11. nameAndAddrMap.put("李四","leixing*****@163.com");
  12. nameAndAddrMap.put("王麻子","chenxing*****@qq.com");
  13. String htmlContent="<font color='red'>测试简单邮件发送功能!</font>";//邮件内容
  14. String subject="新年好!";//主题或者标题
  15. try {
  16. Email.sendEmail(nameAndAddrMap,subject,htmlContent);//测试发送邮件功能
  17. } catch( Exception e) {
  18. System.out.println("邮件发送失败!");
  19. //logger.setMessage(e.getMessage());
  20. }
  21. }
  22. }
复制代码

出处:http://blog.csdn.net/chenleixing/article/details/44708533

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-8 15:09

Copyright 2015-2025 djqfx

返回顶部