今天研究了以下怎么用java代码发送邮件,用的是Apache的commons-email包。

据说这个包是对javamail进行了封装,简化了操作。 这里讲一下具体用法吧

一.首先你需要有邮箱账号和一个授权码。

需要进入到QQ邮箱或者是网易邮箱里面去获取。在邮箱的设置->账户里面,开启如下服务,就能得到一个授权码,这个授权码要好好保管。有了这两个东西就能够通过第三方客户端发送邮件了。

二.导入commons-email的maven依赖。

我用的是1.4,也可以去maven仓库网站(https://mvnrepository.com)上面找别的版本。

  1. <dependency>
  2. <groupId>org.apache.commons</groupId>
  3. <artifactId>commons-email</artifactId>
  4. <version>1.4</version>
  5. </dependency>

三.然后就可以写发送邮件的代码了。

我在网上找了几个案例,如下。

1.发送简单文本邮件。这是最简单也是最常用的。

  1. /**
  2. * @describe 发送内容为简单文本的邮件
  3. * @throws EmailException
  4. */
  5. public static void sendSimpleTextEmail() throws EmailException {
  6. Email email = new SimpleEmail();
  7. //设置主机名,QQ邮箱是"smtp.qq.com",网易邮箱是"smtp.163.com"
  8. email.setHostName("smtp.163.com");
  9. // 用户名和密码为邮箱的账号和授权码(不需要进行base64编码)
  10. email.setAuthenticator(new DefaultAuthenticator("myemailaddress@163.com", "myshouquanma"));
  11. //设置SSL连接,这样写就对了
  12. email.setSSLOnConnect(true);
  13. //设置来源,就是发送方的邮箱地址
  14. email.setFrom("myemailaddress@163.com");
  15. //设置主题,可以不设置
  16. email.setSubject("java发送邮件");
  17. //设置信息,就是内容,这个必须要有
  18. email.setMsg("这是测试邮件 ... :-)");
  19. //接收人邮箱地址
  20. email.addTo("receiveeraddress@qq.com");
  21. email.send();
  22. }

2.发送包含附件的邮件(附件为本地资源),这里用到了一个EmailAttachment对象,也就是附件的意思

  1. /**
  2. * @describe 发送包含附件的邮件(附件为本地资源)
  3. * @throws EmailException
  4. */
  5. public static void sendEmailsWithAttachments() throws EmailException {
  6. // 创建一个attachment(附件)对象
  7. EmailAttachment attachment = new EmailAttachment();
  8. //设置上传附件的地址
  9. attachment.setPath("C:\\Users\\Administrator\\Pictures\\Saved Pictures\\conti.png");
  10. attachment.setDisposition(EmailAttachment.ATTACHMENT);
  11. //这个描述可以随便写
  12. attachment.setDescription("Picture of conti");
  13. //这个名称要注意和文件格式一致,这将是接收人下载下来的文件名称
  14. attachment.setName("conti.png");
  15.  
  16. //因为要上传附件,所以用MultiPartEmail()方法创建一个email对象,固定步骤都是一样的
  17. MultiPartEmail email = new MultiPartEmail();
  18. email.setHostName("smtp.163.com");
  19. email.setAuthenticator(new DefaultAuthenticator("myemailaddress@163.com", "myshouquanma"));
  20. email.setSSLOnConnect(true);
  21. email.addTo("receiveemail@qq.com", "Conti Zhang");
  22. email.setFrom("myemailaddress@163.com", "Me");
  23. email.setSubject("图片");
  24. email.setMsg("这是发送给你的图片");
  25. //将附件添加到邮件
  26. email.attach(attachment);
  27.  
  28. email.send();
  29. }

3.发送包含附近的邮件(附件为在线资源),这个与上传本地附件稍有区别,注意一下就行

  1.   /**
  2. * @describe 发送包含附件的邮件(附件为在线资源)
  3. * @throws EmailException
  4. * @throws MalformedURLException
  5. */
  6. public static void sendEmailsWithOnlineAttachments() throws EmailException, MalformedURLException {
  7. EmailAttachment attachment = new EmailAttachment();
  8. //设置在线资源路径,和上传本地附件的唯一区别
  9. attachment.setURL(new URL("http://www.apache.org/images/asf_logo_wide.gif"));
  10. attachment.setDisposition(EmailAttachment.ATTACHMENT);
  11. attachment.setDescription("Apache logo");
  12. attachment.setName("Apache logo.gif");
  13.  
  14. MultiPartEmail email = new MultiPartEmail();
  15. email.setHostName("smtp.163.com");
  16. email.setAuthenticator(new DefaultAuthenticator("myemailaddress@163.com", "myshouquanma"));
  17. email.setSSLOnConnect(true);
  18. email.addTo("receiveemail@qq.com", "Conti Zhang");
  19. email.setFrom("myemailaddress@163.com", "Me");
  20. email.setSubject("The logo");
  21. email.setMsg("Here is Apache's logo");
  22. email.attach(attachment);
  23. email.send();
  24. }

4.发送内容为HTML格式的邮件,有些邮件直接打开就是一个HTML页面。虽然不一定用到,可以了解一下

  1.   /**
  2. * @describe 发送内容为HTML格式的邮件
  3. * @throws EmailException
  4. * @throws MalformedURLException
  5. */
  6. public static void sendHTMLFormattedEmail() throws EmailException, MalformedURLException {
  7. // 这里需要使用HtmlEmail创建一个email对象
  8. HtmlEmail email = new HtmlEmail();
  9. email.setHostName("smtp.163.com");
  10. email.setAuthenticator(new DefaultAuthenticator("myemailaddresss@163.com", "myshouquanma"));
  11. email.addTo("receiveemail@qq.com", "Conti Zhang");
  12. email.setFrom("myemailaddress@163.com", "Me");
  13. email.setSubject("Test email with inline image");
  14.  
  15. // 嵌入图像并获取内容id,虽然案例这样写,但我感觉直接在html内容里面写图片网络地址也可以
  16. URL url = new URL("http://www.apache.org/images/asf_logo_wide.gif");
  17. String cid = email.embed(url, "Apache logo");
  18.  
  19. // 设置html内容
  20. email.setHtmlMsg("<html>The apache logo - <img src=\"cid:" + cid + "\"></html>");
  21.  
  22. // 设置替代内容,如果不支持html
  23. email.setTextMsg("你的邮件客户端不支持html邮件");
  24. email.send();
  25. }

5.发送内容为HTML格式的邮件(嵌入图片更方便)

这里用到了DataSourceFileResolver对象,和DataSourceUrlResolver对象,前者可以解析本地文件路径,后者可以解析网络路径

具体用法如下

  1. /**
  2. * @describe 发送内容为HTML格式的邮件(嵌入图片更方便)
  3. * @throws MalformedURLException
  4. * @throws EmailException
  5. */
  6. public static void sendHTMLFormattedEmailWithEmbeddedImages() throws MalformedURLException, EmailException {
  7. //html邮件模板
    String htmlEmailTemplate = "<img src=\"http://www.conti.com/images/1.jpg\">";
  8. DataSourceResolver[] dataSourceResolvers =new DataSourceResolver[]{new DataSourceFileResolver(),new DataSourceUrlResolver(new URL("http://"))};
  9. email.setDataSourceResolver(new DataSourceCompositeResolver(dataSourceResolvers));
  10. email.setHostName("smtp.qq.com");
  11. email.setAuthenticator(new DefaultAuthenticator("myemailaddress@qq.com", "myshouquanma"));
  12. email.addTo("receiveemail@qq.com", "Conti Zhang");
  13. email.setFrom("myemailaddress@qq.com", "Me");
  14. email.setSubject("Test email with inline image");
  15. email.setHtmlMsg(htmlEmailTemplate);
  16. email.setTextMsg("你的邮件客户端不支持html邮件");
  17.  
  18. email.send();
  19. }

此种方式可能会报错,会被邮箱认为是有害邮件不接收而导致发送失败。解决方法就是,网易邮箱不行就换QQ邮箱,我就是这样做的

好了,就这么多,欢迎讨论!

使用Apache commons email发送邮件的更多相关文章

  1. 使用Apache Commons Email 发生邮件

    Apache Commons Email的Maven依赖 <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-e ...

  2. Apache commons email 使用过程中遇到的问题

    apache-commons-email是对mail的一个封装,所以使用起来确实是很方便.特别的,官网上的tutorial也是极其的简单.但是我也仍然是遇到了没有解决的问题. jar包的添加 mail ...

  3. 使用Commons Email发送邮件

    Commons Email是apache commons库中的一个组件,对java mail做了一些个封装,提供能为简化的API供开发者使用.它依赖于javax.mail . 首先下载commons- ...

  4. Apache Commons Email 使用网易企业邮箱发送邮件

    最近使用HtmlEmail 发送邮件,使用网易企业邮箱,发送邮件,死活发不出去!原以为是网易企业邮箱,不支持发送邮箱,后面经过研究发现,是apache htmlEmail 的协议导致,apache E ...

  5. Apache Commons 工具类介绍及简单使用

    转自:http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下 ...

  6. Apache Commons 工具类简单使用

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...

  7. Apache Commons 工具集介绍

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...

  8. Apache Commons 工具类介绍及简单使用(转载)

    原文链接 http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动 ...

  9. Commons Email使用

    Apache Commons Email Apache的一个开源项目,是基于另一个开源项目Java Mail上进行封装的,使用起来更加简单方便: http://commons.apache.org/p ...

随机推荐

  1. python脚本实现接口自动化轻松搞定上千条接口用例

    接口自动化目前是测试圈主流的一个话题,我也在网上搜索了很多关于自动化的关键词,大多数博主分享的python做接口自动化都是以开源的框架,比如:pytest.unittest+ddt(数据驱动) 最常见 ...

  2. 小程序util.js的使用

    我们通过开发者工具快速创建了一个 QuickStart 项目.你可以留意到这个项目里边生成了一个utils/util.js这里写图片描述 可以将一些公共的代码抽离成为一个单独的 js (utils.j ...

  3. 实验四:Linux系统C语言开发环境学习

    项目 内容 这个作业属于哪个课程 班级课程主页链接 这个作业的要求在哪里 作业要求 学号-姓名 17043133-木腾飞 作业学习要求 1.学习Linux系统中如何查看帮助文档:2.在Linux系统中 ...

  4. 获取cookie里面的sessionid

    做接口的时候我们需要获取一个令牌,类似于token以及sessionid这样的签名,也可以说是一个令牌. import urllib.request, urllib.parse, urllib.err ...

  5. 巧用 display: contents 增强页面语义

    display: contents 是一个比较陌生的属性,虽然属于 display 这个基本上是最常见的 CSS 属性,但是 contents 这个取值基本不会用到.但是它早在 2016 年就已经得到 ...

  6. Nessus静态ip配置及内网扫描

    环境ubuntu虚拟机,以前linux配置ip都是从/etc/network/interfaces这里面更改,现在要在/etc/netplan下面配置. vim /etc/netplan/01-net ...

  7. 实验三 UML 建模工具的安装与使用

    UML 建模工具的安装与使用一. 实验目的1) 学习使用 EA(Enterprise Architect) 开发环境创建模型的一般方法: 2) 理解 EA 界面布局和元素操作的一般技巧: 3) 熟悉 ...

  8. Rocket - tilelink - Edges

    https://mp.weixin.qq.com/s/UggNsNOeEMP-GhzlLiT-qQ   简单介绍Edges的实现.   ​​   1. TLEdge   包含client和manage ...

  9. Java 蓝桥杯 算法训练(VIP) 最大体积

    最大体积 问题描述 每个物品有一定的体积(废话),不同的物品组合,装入背包会战用一定的总体积. 假如每个物品有无限件可用,那么有些体积是永远也装不出来的. 为了尽量装满背包,附中的OIER想要研究一下 ...

  10. Java实现 LeetCode 652 寻找重复的子树(两个map的DFS)

    652. 寻找重复的子树 给定一棵二叉树,返回所有重复的子树.对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可. 两棵树重复是指它们具有相同的结构以及相同的结点值. 示例 1: 1 / \ ...