设为首页 收藏本站
查看: 495|回复: 0

[经验分享] apache common mail包相关类解析

[复制链接]

尚未签到

发表于 2017-1-8 07:51:16 | 显示全部楼层 |阅读模式
  在common mail包中总共有8各类,主要是那个Email类,这个类里面包括了发送邮件的几乎全部方法。它的子类MultiPartEmail扩展了几个简单的方法,主要的是扩展一个邮件附件的方法,MultiPartEmail的子类HtmlEmail定义了几个重载的embed方法,这几个方法我觉得在平常工作当中用到的机会不是很多。其他的几个类都是在这三个类当中作为方法参数或者变量出现。
  所以我们在实现邮件发送的功能上,我们足足可以只使用HtmlEmail类来操作。创建一个HtmlEmail如下:
  private final HtmlEmail createHtmlEmail() {HtmlEmail email = new HtmlEmail();email.setHostName(hostname);email.setSmtpPort(port);email.setCharset("GBK");email.setAuthentication(sender, password);return email;}这些方法都不是HtmlEmail类中的,全部都是Email中的方法。而发送的代码可以像下面这样写:
  if(mailEntry != null) {htmlEmail.setSubject(mailEntry.getTitle());try {htmlEmail.addTo(mailEntry.getRecipient());htmlEmail.setFrom(sender);htmlEmail.setHtmlMsg(mailEntry.getContent());if (mailEntry.getAttachment() != null) {htmlEmail.attach(mailEntry.getAttachment());}htmlEmail.send();} catch (EmailException ex) {LOGGER.error(String.format("HtmlEmail send failure. Cause: %s", ex.getMessage()));}}mailEntry是自己写的一个pojo类。没什么好说的。上面代码中的一些方法中setHtmlMsg是HtmlEmail类自身的,这个方法很简单,只是简单的赋值操作。attach方法是MultiPartEmail,方法的具体实现可以自己看源码,其他的方法也都是Email的。
  当需要发送群邮件时,也是很简单的,Email类都为我们封装好了,我们需要做的只是简单的拼装邮件的内容,发送者,接受者等等信息:
  public void sendMultiplyMails(MailEntry mail) throws EmailException {if (mail.getRecipients() != null && mail.getRecipients().size() == 1) {mail.setRecipient(mail.getRecipients().get(0));sendMail(mail);return;}HtmlEmail email = createHtmlEmail();email.setSubject(mail.getTitle());try {email.setTo(mail.getRecipients());email.setFrom(sender);email.setHtmlMsg(mail.getContent());email.send();} catch (EmailException ex) {LOGGER.error("HtmlEmail send failure. Cause " + ex.getMessage());}}另外一个问题是我们需不需要将邮件发送的代码放入一个线程当中,如果我们把相关方法放入一个线程的run方法内,那么执行这个方法我们需要new Thread(new XxxThread()).start或new XxxThread().start的方法来执行。我们可以使用线程来实现多任务,如果没有使用线程有可能会出现代码的混乱执行(就变得不是并发的了,关于并发的只是可以查看相关书籍)。当然我们使用了线程实现的话我们还需要对线程的停止进行相关的操作:
  private static void stopTask(Thread task) {if(task != null && task.isAlive()) {try {task.join();} catch(InterruptedException ex) {// 线程被中断} catch(Exception ex) {task.interrupt();}}}join()方法的意思是等待线程消亡,注意这里是无参数的,这就意味着永远等待下去if(l == 0L)for(; isAlive(); wait(0L));在等待过程中别的线程不能执行相关代码。这样就相当于实现了同步。
所以我们在发送邮件时最好还是将代码放入线程当中。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-325282-1-1.html 上篇帖子: Apache配置文件 下篇帖子: apache本机环境配置虚拟访问域名
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表