Java实现发送邮件带多个附件,可以直接用 您所在的位置:网站首页 如何添加多个附件 Java实现发送邮件带多个附件,可以直接用

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

2024-03-07 02:19| 来源: 网络整理| 查看: 265

需求:

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

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

自定义输出debug信息。自定义开启SSL认证。 *QQ邮箱会自动检测开启,也可以通过setSSLAuth(boolean SSLAuth)方法关闭。发送内容为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()对象时并不支持无参构造,也不强制设置抄送人和密送人。 * * * @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()对象时并不支持无参构造,也不强制设置抄送人和密送人。 * * 更推荐使用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 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 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 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 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 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 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文件中添加依赖,如下:

com.sun.mail javax.mail 1.6.0

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

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

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有