需求:

使用JavaMail发送邮件,要求实现带多个附件功能。


下面代码可以直接使用,也可以按需优化,实现的功能如下:

  1. 自定义输出debug信息。
  2. 自定义开启SSL认证。
    *QQ邮箱会自动检测开启,也可以通过setSSLAuth(boolean SSLAuth)方法关闭。
  3. 发送内容为Html的邮件,支持携带附件,可以同时发送给多个收件人,抄送人,密送人。

代码示例

MailSender类使用Smtp协议,这意味着你需要获得发件服务器的Smtp协议服务器的host地址,可以邮件服务器官网获取。
例如,
网易邮箱:smtp.163,com
QQ邮箱:smtp.qq.com
同时,使用非官方的客户端登录邮箱,需要打开邮箱账户的smtp服务,并且获得发件服务提供商产生的授权码,这里不再过多赘述。

import com.sun.mail.util.MailSSLSocketFactory;import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.security.GeneralSecurityException;
import java.util.Properties;/*** 邮件发送器** @version 2.0*/
public class MailSender {/*** 邮件发送地址*/private String FROM;/*** 邮件发送人名*/private String FROM_NAME;/*** 授权码*/private String PASSWORD;/*** 邮件发送人*/private String[] TO;/*** 邮件抄送人*/private String[] CC;/*** 邮件密送人*/private String[] BCC;/*** 邮件smtp协议host地址*/private String HOST;/*** 是否开启SSL认证,QQ邮箱自动检测开启*/private boolean isSSLAuth;/*** 是否输出debug,默认开启*/private boolean isDebug = true;public void setDebug(boolean isDebug){this.isDebug = isDebug;}public void setSSLAuth(boolean SSLAuth) {isSSLAuth = SSLAuth;}private MailSender() {}/*** 值得注意的是,在new MailSender()对象时并不支持无参构造,也不强制设置抄送人和密送人。* <n>** @param FROM      发件人地址* @param FROM_NAME 发件人名* @param TO        收件人地址* @param HOST      smtp协议host地址*/public MailSender(String FROM, String FROM_NAME, String PASSWORD, String[] TO, String HOST) {this.FROM = FROM;this.FROM_NAME = FROM_NAME;this.PASSWORD = PASSWORD;this.TO = TO;this.HOST = HOST;checkQQMail();}/*** 值得注意的是,在new MailSender()对象时并不支持无参构造,也不强制设置抄送人和密送人。* <n>* 更推荐使用public MailSender(String FROM, String FROM_NAME, String PASSWORD, String[] TO, String HOST)方法构造对象,以设置发件人名** @param FROM     发件人地址* @param PASSWORD 授权码* @param TO       收件人地址* @param HOST     smtp协议host地址*/public MailSender(String FROM, String PASSWORD, String[] TO, String HOST) {this.FROM = FROM;this.PASSWORD = PASSWORD;this.TO = TO;this.HOST = HOST;checkQQMail();}/*** 设置抄送人** @param CC 抄送人*/public void setCC(String[] CC) {this.CC = CC;}/*** 设置密送人** @param BCC 密送人*/public void setBCC(String[] BCC) {this.BCC = BCC;}public void sendHtmlMail(String subject, String content) throws GeneralSecurityException, MessagingException, UnsupportedEncodingException {//1.保存配置信息Properties properties = new Properties();properties.put("mail.transport.protocol", "smtp");properties.put("mail.smtp.host", HOST);if (isSSLAuth) {//*需要SSL认证的邮箱MailSSLSocketFactory sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);properties.put("mail.smtp.ssl.enable", "true");properties.put("mail.smtp.ssl.socketFactory", sf);}//2.建立连接Session session = Session.getInstance(properties);//输出Debug信息session.setDebug(this.isDebug);//3.创建邮件对象MimeMessage message = new MimeMessage(session);//设置发件人if ("".equals(FROM_NAME)) message.setFrom(FROM);else message.setFrom(new InternetAddress(FROM, FROM_NAME, "UTF-8"));//设置收件人StringBuilder sbTo = new StringBuilder();for (int i = 0;i< TO.length;i++){if (i== TO.length-1){sbTo.append(TO[i]);}else{sbTo.append(TO[i]).append(",");}}String to = new String(sbTo);InternetAddress[] internetAddressTo = InternetAddress.parse(to);message.setRecipients(MimeMessage.RecipientType.TO,internetAddressTo);//设置抄送人if (CC!=null){StringBuilder sbCC = new StringBuilder();for (int i = 0;i< CC.length;i++){if (i== CC.length-1){sbTo.append(CC[i]);}else{sbTo.append(CC[i]).append(",");}}String cc = new String(sbCC);InternetAddress[] internetAddressCC = InternetAddress.parse(cc);message.setRecipients(MimeMessage.RecipientType.CC,internetAddressCC);}if (BCC!=null){//设置密送人StringBuilder sbBCC = new StringBuilder();for (int i = 0;i< BCC.length;i++){if (i== BCC.length-1){sbTo.append(BCC[i]);}else{sbTo.append(BCC[i]).append(",");}}String bcc = new String(sbBCC);InternetAddress[] internetAddressBcc = InternetAddress.parse(bcc);message.setRecipients(MimeMessage.RecipientType.BCC,internetAddressBcc);}message.setSubject(subject, "UTF-8");message.setContent(content, "text/html;charset=UTF-8");message.saveChanges();//用流传送Transport transport = session.getTransport();transport.connect(FROM, PASSWORD);transport.sendMessage(message, message.getAllRecipients());transport.close();}public void sendHtmlMailWithFiles(String subject, String content, File[] files) throws GeneralSecurityException, MessagingException, UnsupportedEncodingException {//1.保存配置信息Properties properties = new Properties();properties.put("mail.transport.protocol", "smtp");properties.put("mail.smtp.host", HOST);if (isSSLAuth) {//*需要SSL认证的邮箱MailSSLSocketFactory sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);properties.put("mail.smtp.ssl.enable", "true");properties.put("mail.smtp.ssl.socketFactory", sf);}//2.建立连接Session session = Session.getInstance(properties);//输出Debug信息session.setDebug(this.isDebug);//3.创建邮件对象MimeMessage message = new MimeMessage(session);//设置发件人if ("".equals(FROM_NAME)) message.setFrom(FROM);else message.setFrom(new InternetAddress(FROM, FROM_NAME, "UTF-8"));//设置收件人StringBuilder sbTo = new StringBuilder();for (int i = 0;i< TO.length;i++){if (i== TO.length-1){sbTo.append(TO[i]);}else{sbTo.append(TO[i]).append(",");}}String to = new String(sbTo);InternetAddress[] internetAddressTo = InternetAddress.parse(to);message.setRecipients(MimeMessage.RecipientType.TO,internetAddressTo);//设置抄送人if (CC!=null){StringBuilder sbCC = new StringBuilder();for (int i = 0;i< CC.length;i++){if (i== CC.length-1){sbTo.append(CC[i]);}else{sbTo.append(CC[i]).append(",");}}String cc = new String(sbCC);InternetAddress[] internetAddressCC = InternetAddress.parse(cc);message.setRecipients(MimeMessage.RecipientType.CC,internetAddressCC);}if (BCC!=null){//设置密送人StringBuilder sbBCC = new StringBuilder();for (int i = 0;i< BCC.length;i++){if (i== BCC.length-1){sbTo.append(BCC[i]);}else{sbTo.append(BCC[i]).append(",");}}String bcc = new String(sbBCC);InternetAddress[] internetAddressBcc = InternetAddress.parse(bcc);message.setRecipients(MimeMessage.RecipientType.BCC,internetAddressBcc);}message.setSubject(subject, "UTF-8");Multipart multipart = new MimeMultipart();//邮件正文BodyPart contentPart = new MimeBodyPart();contentPart.setContent(content, "text/html;charset=utf-8");multipart.addBodyPart(contentPart);if (files.length != 0) {for (File attachment : files) {BodyPart attachmentPart = new MimeBodyPart();DataSource source = new FileDataSource(attachment);attachmentPart.setDataHandler(new DataHandler(source));//避免中文乱码的处理attachmentPart.setFileName(MimeUtility.encodeWord(attachment.getName()));multipart.addBodyPart(attachmentPart);}}message.setContent(multipart);message.saveChanges();//用流传送Transport transport = session.getTransport();transport.connect(FROM, PASSWORD);transport.sendMessage(message, message.getAllRecipients());transport.close();}/*** 检查是否是QQ邮箱*/private void checkQQMail() {if (FROM.contains("qq.com")) {isSSLAuth = true;}}}

关于password参数:不是指邮箱密码,是指smtp服务授权码。

需要添加的依赖:

JavaMail包下载链接:https://github.com/javaee/javamail/releases
可以使用library的形式将JavaMail添加到libs目录下,也可以直接在maven项目的pom.xml文件中添加依赖,如下:

<dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.6.0</version>
</dependency>

Android项目中使用,添加如下依赖:

   implementation 'com.sun.mail:android-mail:1.6.7'implementation 'com.sun.mail:android-activation:1.6.7'

到此,Java实现发送邮件带多个附件功能基本实现。

Java实现发送邮件带多个附件,可以直接用相关推荐

  1. java发送邮件带多个附件_Java发送邮件(支持多个附件)

    1.邮件内容实体 package com.hthl.xxtd.sdk.email; import java.io.File; import java.util.List; /** * 发送邮件需要使用 ...

  2. 批量发送邮件(java开发、带图片和附件)

    本程序配置好后可以直接运行,采用javamail1.6 api ,具有如下特点: (1)邮件内容.主题 可以定制,内容可以是富文本,可以带图片和附件 (2)为了避免垃圾邮件拦截,设置为3秒钟一封,每发 ...

  3. java实现发送邮件功能(可以添加附件)

    记录一下在java中发送邮件的实现方式,下面这个工具类是根据在网上查阅的资料自己整理出来的. 类中只有两个方法: 1.第一个就是普通的发送文本内容邮件的方法. 2.第二个是能发送附件邮件的方法.如果还 ...

  4. java filehelper_Spring 发送邮件 使用File指定附件

    Spring 发送邮件 内嵌图片增加附件 http://cuisuqiang.iteye.com/blog/2042435 在之前代码中,因为使用的是Spring,使用获取文件的方式使用了ClassP ...

  5. linux发送邮件带多个附件,Linux 发送邮件,抄送+附件,多收件人

    DECLARE pass VARCHAR2(20) := 'Z1234';--???? BEGIN FOR c IN (select a.username from dba_users a,icaps ...

  6. 前端三小时用html和js写一个贪吃蛇游戏,非常简单带讲解,代码可直接用,功能完整

    目录 游戏主体部分--普通模式 游戏主体部分--地狱模式 游戏主页入口 预览图 游戏入口代码 1.html 2.css 3.js 注册页面代码 游戏实现很简单,只写游戏主体的话只要三小时就够了. 话不 ...

  7. Java发送邮件(带图片和附件)

    如何获取QQ邮箱授权码 package com.jason.mail;import com.sun.mail.util.MailSSLSocketFactory;import javax.activa ...

  8. java 实现邮件带附件发送

    邮件发送测试案例 1. 这里以网易邮箱做案例:注册网易邮箱并开通smtp服务 开启smtp服务并保存授权码(很重要) 2. 在 maven 项目的 pom.xml中引入依赖 <!-- 邮件发送依 ...

  9. Java发送邮件(支持多个附件)

    1.邮件内容实体 package com.hthl.xxtd.sdk.email; import java.io.File; import java.util.List; /** * 发送邮件需要使用 ...

最新文章

  1. linux 远程挂载摄像头_基于Linux的嵌入式网络摄像机设计
  2. 流行于机器学习竞赛的Boosting,这篇文章讲的非常全了
  3. Selenium3自动化测试——14.操作Cookie
  4. [转载] 康威的人生游戏与轻量级模式
  5. Ubuntu安装Apache+PHP
  6. 42-2017蓝桥杯b java
  7. Flutter AppBar控件
  8. javaweb的热部署
  9. Microsoft SQL Server 2008 (RTM) 升级到 Microsoft SQL Server 2008 R2
  10. 伺服电机常用参数设置_伺服驱动器重要参数的设置方法和技巧
  11. webpack 图像压缩_基于webpack的图片压缩最佳方案
  12. 配置淘宝Maven镜像仓库
  13. SQL 登录名和数据库用户
  14. 基于 CherryUSB 调试 dwc2 usb host 笔记
  15. 6 生僻字_《生僻字》歌词拼音与注释,跟着音乐学汉字
  16. android 程序分身,Android应用分身检测
  17. PDCAOODA循环
  18. 记录一次centos被挖矿病毒感染的经历
  19. 国家电网(部分单位)2020年第二批高校毕业生录用人选公示
  20. oracle utl inaddr,Oracle包utl_inaddr

热门文章

  1. 批处理归一化的多损失孪生网络的恶意软件检测
  2. 万年历表加节气C语言,电子万年历24节气c程序
  3. Linux库概念及相关编程(面试重点)
  4. 解决微信小程序关于轮播图宽度无法撑满页面的问题
  5. DAN源码解读(龙明盛Xlearn)
  6. STM32之TFT彩屏
  7. 微型计算机哈弗结构,冯·诺伊曼结构和哈弗结构,RISC和CISC-控制器/处理器-与非网...
  8. android html超链接颜色,如何在android中更改超链接的颜色
  9. 新浪博客等级及积分计算
  10. E店宝互联网思维与电子商务