很多比较在意用户的安全性和联系方式的网站都会在新用户注册完成之后给注册添加的电子邮箱自动发送一封电子邮件,事实上这封电子邮件具有固定的模板,邮件服务程序(这里可不能成为邮件服务器,因为啊我们看到的电子邮件通常都会这么一句意思的话:系统邮件请勿回复)。

在做javaweb开发的时候,想到这么一出,本想着使用javamail包来实现这个程序,但是复杂的API有些烦人,想着就简单的点封装一下实现功能先,于是就找Apache问来问有commons-email包已经对这个做来简单的封装,用于上面所说的那样的情况,简单,明了而且文件体积也不会太大。

实际遇到的现实问题:

特别有意思的是想着给一批同学发送一封电子邮件,怎么办, QQ邮箱也不是每一个人都在用,而且大伙在心里老有种不正式的感觉,没法一次性导入。好在大路条条,看怎么走呢!通过来一些技术上和非技术上的手段获取来一份带有联系邮箱的文档。

接下来要的是让Apache开源工程中的这个commons-email-1.x开源包发挥写余热。富裕的源代码还是给娱乐性的体验带来快乐啊,顺便翻译来一下每个类的注释,附在这里吧,顺带有个记录。


commons-email-1.2包的类信息:

  1. //commons-email-1.2
  2. //Email类
  3. /*
  4. Email基类为所有的电子邮件消息。
  5. 这类设置发送者的电子邮件和名字,接收机的电子邮件和名称、主题、和发送日期。
  6. 子类负责设置消息体。
  7. */
  8. public abstract class Email
  9. //Email工具类
  10. /*
  11. commons-email-1.2中通用的方法,该部分来自commons-lang中的组件
  12. */
  13. public final class EmailUtils
  14. //异常处理类
  15. /*
  16. 检查commons-email-1.2中的异常抛出处理和错误处理
  17. */
  18. public class EmailException extends Exception
  19. //字节数组数据源
  20. /*
  21. 主要将输入流,字符,数组,字符串转换为ByteArrayOutputStream流
  22. DataSource 接口为 JavaBeans Activation Framework 提供任意数据集合的抽象。它提供该数据的类型,并在适当的时候以 InputStream 和 OutputStream 的形式提供对该数据的访问。
  23. */
  24. public class ByteArrayDataSource implements DataSource
  25. //默认认证类
  26. /*
  27. 主要设置访问者
  28. final class PasswordAuthentication 类是供 Authenticator 使用的数据持有者。它只是用户名和密码的存储库。
  29. 这是一个非常简单的身份验证对象,可以用于任何数据传输需要基本的用户名和密码身份验证类型。
  30. */
  31. public class DefaultAuthenticator extends Authenticator
  32. //Email添加附件
  33. /*
  34. EmailAttachment类模型是一个电子邮件附件模型,被用于多部分电子邮件中。
  35. 定义了附加的名称,描述,源
  36. */
  37. public class EmailAttachment
  38. //多附件邮件
  39. /*
  40. 该类是用于多附件的互联网电子邮件
  41. */
  42. public class MultiPartEmail extends Email
  43. //HTML格式邮件
  44. /*
  45. 该类是用于发送HTML格式的电子邮件
  46. */
  47. public class HtmlEmail extends MultiPartEmail
  48. private static class InlineImage
  49. //普通电子邮件
  50. /*
  51. 该类是用于发送不带附件的简单的互联网电子邮件消息。
  52. */
  53. public class SimpleEmail extends Email

接下来就可以干活来。

第一步:准备好来commons-email-1.2.jar和javamail中的mail.jar就可以了。

第二步:准备设计一个GUI吧,如果不想讲究一下,就不需要了。

第三步:开始编写代码。

发送一个简单的邮件,收件人可以从已经获的文档中Ctrl+C和Ctrl+V来完成。

  1. private SimpleEmail semail = null;
  1. private void sendSimpleEmail() {
  2. //Get Information for Email
  3. String server = jcbHoatName.getSelectedItem().toString().trim();
  4. String hostName = getHostName(server);
  5. String userName = jtextFrom.getText().trim();
  6. char[] pwdch = jpasstextUserPwd.getPassword();
  7. String userPwd = arrayToString(pwdch);
  8. String from = jtextFrom.getText().trim() + server;
  9. String to = jtextareaTo.getText().trim();
  10. String[] toContacts = getToContacts(to);
  11. String theme = jtextTheme.getText().trim();
  12. String content = jEditorPane1.getText();
  13. semail.setHostName(hostName);
  14. try {
  15. semail.setAuthentication(userName, userPwd);
  16. semail.setFrom(from);
  17. for (int i = 0, j = toContacts.length; i < j; i++) {
  18. semail.addTo(toContacts[i]);
  19. }
  20. semail.setSubject(theme);
  21. semail.setCharset("GB2312");
  22. semail.setMsg(content);
  23. semail.send();
  24. JOptionPane.showMessageDialog(null, "发送成功", "邮件发送成功", WIDTH);
  25. } catch (EmailException ex) {
  26. JOptionPane.showMessageDialog(null, "发送电子邮件失败", "失败", WIDTH);
  27. }
  28. }

获取收件人编写个方法:

  1. private String[] getToContacts(String contactsString) {
  2. String[] contacts = contactsString.split(";");
  3. for (int i = 0; i < contacts.length; i++) {
  4. contacts[i] = contacts[i].trim();
  5. }
  6. return contacts;
  7. }

这里提供一个将JFrame框架置于Windows的中心位置的通用方法。

  1. /**
  2. * 获取框架在Windows中显示的中心点
  3. *
  4. * @param jf
  5. * @return 中心点
  6. */
  7. public static Point getCenter(JFrame jf) {
  8. Point p = new Point();
  9. Dimension dim = jf.getSize();
  10. int width = dim.width;
  11. int height = dim.height;
  12. Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  13. p.setLocation((screenSize.width - width) / 2, ((screenSize.height - height) / 2));
  14. return p;
  15. }

第四步:为发送按钮写个事件处理就可以工作来。

  1. private void jbtnSendActionPerformed(java.awt.event.ActionEvent evt) {
  2. semail = new SimpleEmail();
  3. sendSimpleEmail();
  4. }

基本目的是达到了,可是不能停在这里啊。

可以看到源代码真是一件幸福的事情啊,可以看到开发者是的设计,封装,扩展的思路,也可以提升自身的编码质量。如果一开始娱乐就去翻阅javamailAPI的话,可能娱乐的性质会发生很大的变化,说不定意志稍微不坚定,就自己把自己着实的娱乐了一把。

快一个月来。过了一些闲适的生活,赶快进入生活。找些兴趣,先沉湎其中,然后继续深入,我想这应该是循序渐进的新思路吧。

末了,继续回头看看这个程序,在时间投入,技术投入都是非常微小的,可是趣味性很高,因为来源与生活的一个问题,然后现在通过实践完成来期初的目的。

到这,程序员是不该满足的,正好兴趣浓烈啊,那么看看commons-email-1.2包还可以发送附件的,附件来自网络,本地文件。发件的电子邮箱在Excel文件中,那么现在又可以提供一个开源jar包,jxl.jar(韩国人开发的)。都是一些很简单,简洁,友好的实用jar包,用好了,也就有心中有树,有森林,这样才有好的开发思路和整体开发观。

本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1038558,如需转载请自行联系原作者

娱乐开源commons-email-1.x包相关推荐

  1. Commons Email开源项目使用

    Commons Email介绍 Commons Email是一个提供发送邮件的API.它是基于Java Mail API开发的项目,目的是为使用更加简单. Commons Email官网地址:http ...

  2. JavaMail| Apache Commons Email介绍

    Apache Commons Email简介 Apache Commons Email旨在提供一个用于发送电子邮件的API.它建立在JavaMail API之上,旨在简化它. 官网: http://c ...

  3. Apache Commons Email 怎样设置接收方发送已读回执?

    Apache Commons Email 怎样设置接收方发送已读回执? 在给别人发邮件时,怎么知道对方是否收到? 类似126/163邮箱里面,发信时 勾选 "[ ] 已读回执" 对 ...

  4. Apache commons email 使用过程中遇到的问题

    apache-commons-email是对mail的一个封装,所以使用起来确实是很方便.特别的,官网上的tutorial也是极其的简单.但是我也仍然是遇到了没有解决的问题. jar包的添加 mail ...

  5. java 用Apache Commons Email发邮件

    所需jar包:commons-email-1.4.jar和mail-1.4.1jar SimpleEmail 用于发送普通文本邮件 package liu.email;import org.apach ...

  6. 支持mysql的node包_7个免费、开源且实用的Node包,你还在等什么?

    全文共6992字,预计学习时长20分钟 图源:Unsplash 俗话说的好:天上不会掉馅饼,天下没有免费的午餐. JavaScript圈似乎打破了这一说法,圈友们各个身怀绝技且乐于分享. 众所周知,J ...

  7. R+工业级GBDT︱微软开源 的LightGBM(R包已经开放)

    看完一篇介绍文章后,第一个直觉就是这算法已经配得上工业级属性.日前看到微软已经公开了这一算法,而且已经发开python版本,本人觉得等hadoop+Spark这些平台配齐之后,就可以大规模宣传啦~如果 ...

  8. GitHub上开源了一个自制表情包项目

    世界上本没有表情包,脑洞大的人多了,便有了表情包,如今,大家伙聊天都离不开表情包,但是手头上很多时候表情包根本不够用,所以市面上就有很有App.小程序可以帮助你制作专属你的表情包 而程序员在这方面就有 ...

  9. 停不下来!程序员在GitHub上开源了一个自制表情包项目

    世界上本没有表情包,脑洞大的人多了,便有了表情包,如今,大家伙聊天都离不开表情包,但是手头上很多时候表情包根本不够用,所以市面上就有很有App.小程序可以帮助你制作专属你的表情包 而程序员在这方面就有 ...

最新文章

  1. 影响Python运行效率的因素有哪些?
  2. eclipse hibernate配置文件(*.hbm.xml)加上自动提示功能
  3. Linux启动nacos成功日志_Spring Cloud Alibaba基础教程:使用Nacos作为配置中心
  4. 使用weui滚动加载结合php实现分类页数据列表
  5. python中把输出结果写到一个文件中_python 文件中字符串过滤,并将结果输出到另一个文件中(源码)...
  6. 华为认证IE太难,先考IP好找工作吗?
  7. 项目管理需要具备什么能力?
  8. python 缩放图片_Python实现图片尺寸缩放脚本
  9. 什么是CDN?CDN的技术原理是什么?
  10. jsf中 binging的用法
  11. 腾讯云直播一直播连麦实践
  12. HTTP-XMLHttpRequest
  13. 踩坑日志1----从zuulFilter到Filter
  14. 18.缓存预热、缓存雪崩、缓存击穿、缓存穿透、性能指标监控等企业级解决方案
  15. IPFS星际文件系统(中文白皮书)
  16. dw php用文本框更新记录,用dreamweaver htm的网页 一个输入框 一个按钮 点按钮将输入框中的内容保存到本地 肿么写...
  17. 成都买房指南:外地人看完购房心中有谱
  18. 物联网平台搭建的全过程介绍(二)——物联网平台通信思维导图
  19. PDF如何进行免费合并?
  20. 关于U盾使用的一些注意事项

热门文章

  1. python语言做法_在Python中使用设置文件的最佳做法是什么?
  2. Description Resource Path Location Type Project configuration is not up-to-date with pom.xml. Select
  3. 网络服务器费信息技术服务费,中山大学网络与信息技术中心网费在线系统
  4. 输入2个正整数lower和upper(lower_题库 | 华为研发工程师编程题型介绍及解析 第 2 期...
  5. 我最喜欢的科目是计算机课英语,初一英语作:my favorite subject(我最喜欢的科目)要求写美术课(art),80词以上,拜托啦!...
  6. java gof_java GOF23设计模式-简单工厂模式进阶
  7. 数据库笔记11:创建与管理存储过程
  8. Java案例:数据表转换成XML文档
  9. 计算机调试员高级理论知识试卷,电子计算机设备调试员(高级)考核复习题—理论试题.doc...
  10. ie8 html 语音标签,让IE8支持html5中的video标签