新功能上线时要经常发包到测试或生产服务器进行模块部署,但由于安全限制只能通过邮件传输小于10M的附件这种方式把jar包上传到服务器。所以往往要发送几十个邮件手动发送比较麻烦,偷懒写了个粘贴即用的Demo,如有不足,请多指教!


实体类(注意注释)代码详情如下:

package Email;
/*
* 参数实体类
* */
public class EmailParameter {//发信邮箱private String fromMailbox;//发信邮箱密码(独立邮箱填写密码,163或qq等第三方邮箱填写授权码)private String fromMailboxPWD;//收信邮箱private String toMailbox;//附件在本机下的目录路径private String enclosurePath;//邮箱主机(如QQ邮箱是smtp.qq.com、163邮箱是smtp.163.com)private String host;//与上一次发送邮件间隔时间 默认5秒private long sleepTime = 5000;//邮件发送成功后给本地文件打的成功标识private String successTag;public String getSuccessTag() {return successTag;}public void setSuccessTag(String successTag) {this.successTag = successTag;}public String getFromMailbox() {return fromMailbox;}public void setFromMailbox(String fromMailbox) {this.fromMailbox = fromMailbox;}public String getFromMailboxPWD() {return fromMailboxPWD;}public void setFromMailboxPWD(String fromMailboxPWD) {this.fromMailboxPWD = fromMailboxPWD;}public String getToMailbox() {return toMailbox;}public void setToMailbox(String toMailbox) {this.toMailbox = toMailbox;}public String getEnclosurePath() {return enclosurePath;}public void setEnclosurePath(String enclosurePath) {this.enclosurePath = enclosurePath;}public String getHost() {return host;}public void setHost(String host) {this.host = host;}public long getSleepTime() {return sleepTime;}public void setSleepTime(long sleepTime) {this.sleepTime = sleepTime;}@Overridepublic String toString() {return "EmailParameter{" +"fromMailbox='" + fromMailbox + '\'' +", fromMailboxPWD='" + fromMailboxPWD + '\'' +", toMailbox='" + toMailbox + '\'' +", enclosurePath='" + enclosurePath + '\'' +", host='" + host + '\'' +", sleepTime=" + sleepTime +", successTag='" + successTag + '\'' +'}';}
}

实现类

在确认程序运行完或发送故障报错后那些本地邮件已被发送那些本地文件未被发送时,我代码中用的是修改文件名的方式。这种方式方便但会有弊端,当你要发送的附件文件为被分卷切分后的文件时,文件名被修改会导致该分卷切分文件不能被正常解压提取。建议用生成txt文件的方式记录已发送文件的文件名。

代码详情如下:

package Email;import com.sun.mail.util.MailSSLSocketFactory;
import org.springframework.util.StringUtils;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.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 编辑并发送邮件Service
* */
public class EmailsServiceImpl {public String sendEmails(EmailParameter parameter){if(!this.isMailbox(parameter.getFromMailbox())){return "发信邮箱格式不正确";}if(!this.isMailbox(parameter.getToMailbox())){return "收信邮箱格式不正确";}try{//获取邮件主机系统属性Properties properties = System.getProperties();//设置邮件服务器properties.setProperty("mail.smtp.host", parameter.getHost());properties.put("mail.smtp.auth", "true");MailSSLSocketFactory sslSocketFactory = new MailSSLSocketFactory();sslSocketFactory.setTrustAllHosts(true);properties.put("mail.smtp.ssl.enable", "true");properties.put("mail.smtp.ssl.socketFactory", sslSocketFactory);//获取sessionSession session = Session.getDefaultInstance(properties,new Authenticator(){public PasswordAuthentication getPasswordAuthentication() {//发件人账号密码return new PasswordAuthentication(parameter.getFromMailbox(), parameter.getFromMailboxPWD());}});//附件所在的目录路径File fileUrl = new File(parameter.getEnclosurePath());//获取目录下的所有文件(可以在.listFiles()方法中使用匿名内部类重写accept()方法针对文件名对文件进行过滤)File fileList [] = fileUrl.listFiles();//已发送邮件数int currentNum = 1;if(StringUtils.isEmpty(fileList)){return "文件夹"+parameter.getEnclosurePath()+"内容为空";}for(File file : fileList){//待发送邮件数int surplusNum = fileList.length-currentNum;//创建邮件MimeMessage message = new MimeMessage(session);message.setFrom(new InternetAddress(parameter.getFromMailbox()));message.addRecipient(Message.RecipientType.TO, new InternetAddress(parameter.getToMailbox()));//邮件名命名message.setSubject(file.getName());//邮件文本BodyPart messageBodyPart = new MimeBodyPart();String text=String.format("本次共将发送邮件%s封-已发送%s封-待发送%s封", fileList.length,currentNum,surplusNum);messageBodyPart.setText(text);//邮件内容Multipart multipart = new MimeMultipart();//将邮件文本放进邮件内容中multipart.addBodyPart(messageBodyPart);//邮件附件messageBodyPart = new MimeBodyPart();DataSource source = new FileDataSource(file);messageBodyPart.setDataHandler(new DataHandler(source));//附件名命名messageBodyPart.setFileName(MimeUtility.encodeText(file.getName()));//将附件放进邮件内容中multipart.addBodyPart(messageBodyPart);//将邮件内容放进邮件中message.setContent(multipart);//发送Transport.send(message);//发送成功后将作为附件的本地文件名添加上成功标识,防止发送邮件中程序意外终止后无法区分已发送和未发送(用时间戳区分批次顺序用currentNum区分在本批次中的顺序)File newFileName = new File(file.getParent() + File.separator + String.format("%s_%s_%s",parameter.getSuccessTag(),currentNum,file.getName()));file.renameTo(newFileName);currentNum++;System.out.println(text+"|已发送文件:"+file.getName());//增加时间散列防止被第三方邮箱系统检测为垃圾邮箱Thread.sleep(parameter.getSleepTime());}}catch (Exception e) {e.printStackTrace();}return "发送成功";}//邮箱验证public boolean isMailbox(String mailbox){String check = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";Pattern regex = Pattern.compile(check);Matcher matcher = regex.matcher(mailbox);boolean result = matcher.matches();return result;}
}

方法中调用,详情如下:

package Email;public class Email {public static void main(String[] args) throws Exception {EmailParameter emailParameter = new EmailParameter();emailParameter.setFromMailbox("******@163.com");emailParameter.setFromMailboxPWD("******");emailParameter.setToMailbox("******@qq.com");emailParameter.setEnclosurePath("C:\\Users\\ly\\Desktop\\email");emailParameter.setHost("smtp.163.com");emailParameter.setSleepTime(5000);emailParameter.setSuccessTag("ss");System.out.println(new EmailsServiceImpl().sendEmails(emailParameter));}
}

Java实现批量发送带附件的邮件相关推荐

  1. word合并邮件无法发送html,Word邮件合并批量发送带附件的邮件

    应张老师的需求,修改制作了一个可以批量发送带附件的电子邮件VBA. 目的:给N多人发送电子邮件,而不是抄送模式,并带有对方的称谓. 实现: 用到Word的邮件合并功能,以及调用Outlook发送邮件. ...

  2. java 邮件 附件_java中javamail发送带附件的邮件实现方法

    本文实例讲述了java中javamail发送带附件的邮件实现方法.分享给大家供大家参考.具体分析如下: JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理em ...

  3. SpringBoot中整合Mail实现发送带附件的邮件

    场景 项目搭建专栏: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/column/info/35688 实现最简单的带标题以及文本内容的邮件发送: https:/ ...

  4. 【java】实现发送带附件email

    一.目标 用java代码实现发送带附件email的功能 二.学习地址 http://wenku.baidu.com/view/0b5acc82e53a580216fcfe4e.html http:// ...

  5. php邮箱文件发送源码,php简单实现发送带附件的邮件

    本文实例讲述了php简单实现发送带附件的邮件.分享给大家供大家参考.具体如下: 下面是静态html代码: 带附件的邮件发送 发送人: 收件人: 邮件主题: 邮件内容: 附件上传: sendmail.p ...

  6. python菜谱发送到邮箱_Python菜谱5:发送带附件的邮件

    我们平时需要使用 Python 发送各类邮件,这个需求怎么来实现?答案其实很简单,smtplib 和 email库可以帮忙实现这个需求.smtplib 和 email 的组合可以用来发送各类邮件:普通 ...

  7. 利用Jmail发送带附件的邮件时乱码的解决方案

    今天在利用Jmail发送带附件的邮件时,一直收不到附件,而是得到一些"乱码"如下:This is a multipart message in MIME format. ----N ...

  8. mailgun php版本,php – Mailgun发送带附件的邮件

    我正在尝试使用mailgun发送带附件的邮件. 邮件本身很好,但它缺少附件. 同样在mailgun日志中,它显示正常,但附件数组为空. 我用example.com替换了我的凭证. 该文件放在子目录中并 ...

  9. 使用Python的smtplib模块发送带附件的邮件

      上一篇文章<使用Python的smtplib模块发送简单邮件>介绍了调用smtplib模块发送包含简单内容的邮件,本文继续学习参考文献1中的发送带附件的邮件的示例代码,同时由于参考文献 ...

最新文章

  1. java中二维数组求最大值代码。。。。。。不懂呀
  2. lesson4-Qt窗口
  3. linux下载哪个python版本-Linux下升级安装Python-3.6.2版本
  4. python之装饰器初识
  5. 个人笔记 Vue.js, Framework7, and Cordova / PhoneGap Template with Babel, Webpack and Hot Reloading...
  6. Android 在 Google 开发者大会上发布了哪些更新? | Google 开发者大会 2018
  7. 洛谷 P1816 忠诚题解
  8. RegularExpressions
  9. 超级计算机预测未来,超级计算机预测未来
  10. Xcelsius 2008 在win10 64位系统下 基于OFFICE2010-x64 的安装
  11. python怎么变成动图_python 生成动图
  12. linux 搭建论坛(虚拟机)
  13. Cybersource支付流程设计
  14. 【油猴脚本】Hypothesis导出为markdown文件
  15. python学习-109-多个CSV文件的合并
  16. 电商平台接入第三方支付接口之微信支付接入订单系统
  17. springboot校园兼职系统毕业设计源码463450
  18. chromium 编译
  19. 面向接口编程的好处分析
  20. 基于容器特点和传统网络安全能力进行容器云安全规划设计

热门文章

  1. 京东数科金融科技生态揭开面纱 百亿翱翔计划正式官宣
  2. 关于ajax的学习笔记
  3. Android SDK 无法更新或更新慢解决方法
  4. 锤子需要的,不只是一颗子弹
  5. vue3+echarts绘制横向柱形进度图
  6. 关于我要上大学的事事
  7. 属于不安全的http请求方法的是_祛斑方法哪种效果最好,这些方法安全祛斑不反弹...
  8. Python列表index()返回重复元素第二次出现的下标
  9. 作图神器ProcessOn - 免费好用
  10. MediaPlayer的基本使用-播放音乐/视频