新功能上线时要经常发包到测试或生产服务器进行模块部署,但由于安全限制只能通过邮件传输小于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. Sth about Haml
  2. Python金融大数据分析——第五章数据可视化(1)二维绘图
  3. 消息摘要的编程使用(MD5、SHA、HMAC)
  4. linux cpu使用率1200%,linux下用top命令查看cpu利用率超过100%
  5. python 调用控制台并获取返回结果_python脚本执行CMD命令并返回结果的例子
  6. 毕业之后,这些年薪 50w+ 的 90 后程序员都经历了什么?纯水贴
  7. 使用Three.js的材质
  8. NLP硬核入门-Seq2Seq和Attention机制
  9. 云计算openstack核心组件——nova计算服务(7)
  10. 百度面试题:Median of Two Sorted Arrays(java实现)
  11. python接口上传图片和文件的方法
  12. Matlab中实现均匀量化
  13. 基于AT89C51单片机的超声波传感器测距
  14. 如何撤销Word文档的只读模式
  15. 基因组测序分析linux,基因组数据的重测序分析
  16. python arp断网攻击_ARP断网攻击的原理与解决方法讲解 | 小马激活官网
  17. c语言 文件加密与解密
  18. 电脑各修改项【自用】
  19. OS App体验设计
  20. 错误记录----javac错误:javac不是内部或外部命令 也不是可运行的程序

热门文章

  1. 华农java实验7_关于开展2019-2020-1学期创新性实验、双百案例课程任务落实的通知...
  2. mysql 5.7.4 m14_win7 64位下如何安装配置mysql-5.7.4-m14-winx64
  3. 360更改360Downloads和360Rec文件生成目录
  4. 单片机课设-数码管倒计时显示(仿真图,代码全)
  5. 【电机控制理论】三相BLDC/PMSM电机的数学模型及其双环数字控制
  6. AidLux动态人脸识别AI实战训练营活动正式开启!
  7. 《平如美棠》:相思始觉海非深
  8. SDN软件定义网络概述,netperf,scapy网络命令简单使用。
  9. QT之应用程序.exe的icon图标配置
  10. 关于Android 10添加系统签名的方法