很多比较在意用户的安全性和联系方式的网站都会在新用户注册完成之后给注册添加的电子邮箱自动发送一封电子邮件,事实上这封电子邮件具有固定的模板,邮件服务程序(这里可不能成为邮件服务器,因为啊我们看到的电子邮件通常都会这么一句意思的话:系统邮件请勿回复)。
在做javaweb开发的时候,想到这么一出,本想着使用javamail包来实现这个程序,但是复杂的API有些烦人,想着就简单的点封装一下实现功能先,于是就找Apache问来问有commons-email包已经对这个做来简单的封装,用于上面所说的那样的情况,简单,明了而且文件体积也不会太大。
实际遇到的现实问题:
特别有意思的是想着给一批同学发送一封电子邮件,怎么办, QQ邮箱也不是每一个人都在用,而且大伙在心里老有种不正式的感觉,没法一次性导入。好在大路条条,看怎么走呢!通过来一些技术上和非技术上的手段获取来一份带有联系邮箱的文档。
接下来要的是让Apache开源工程中的这个commons-email-1.x开源包发挥写余热。富裕的源代码还是给娱乐性的体验带来快乐啊,顺便翻译来一下每个类的注释,附在这里吧,顺带有个记录。
commons-email-1.2包的类信息:
//commons-email-1.2 //Email类 /* Email基类为所有的电子邮件消息。 这类设置发送者的电子邮件和名字,接收机的电子邮件和名称、主题、和发送日期。 子类负责设置消息体。 */ public abstract class Email //Email工具类 /* commons-email-1.2中通用的方法,该部分来自commons-lang中的组件 */ public final class EmailUtils //异常处理类 /* 检查commons-email-1.2中的异常抛出处理和错误处理 */ public class EmailException extends Exception //字节数组数据源 /* 主要将输入流,字符,数组,字符串转换为ByteArrayOutputStream流 DataSource 接口为 JavaBeans Activation Framework 提供任意数据集合的抽象。它提供该数据的类型,并在适当的时候以 InputStream 和 OutputStream 的形式提供对该数据的访问。 */ public class ByteArrayDataSource implements DataSource //默认认证类 /* 主要设置访问者 final class PasswordAuthentication 类是供 Authenticator 使用的数据持有者。它只是用户名和密码的存储库。 这是一个非常简单的身份验证对象,可以用于任何数据传输需要基本的用户名和密码身份验证类型。 */ public class DefaultAuthenticator extends Authenticator //Email添加附件 /* EmailAttachment类模型是一个电子邮件附件模型,被用于多部分电子邮件中。 定义了附加的名称,描述,源 */ public class EmailAttachment //多附件邮件 /* 该类是用于多附件的互联网电子邮件 */ public class MultiPartEmail extends Email //HTML格式邮件 /* 该类是用于发送HTML格式的电子邮件 */ public class HtmlEmail extends MultiPartEmail private static class InlineImage //普通电子邮件 /* 该类是用于发送不带附件的简单的互联网电子邮件消息。 */ public class SimpleEmail extends Email
接下来就可以干活来。
第一步:准备好来commons-email-1.2.jar和javamail中的mail.jar就可以了。
第二步:准备设计一个GUI吧,如果不想讲究一下,就不需要了。
第三步:开始编写代码。
发送一个简单的邮件,收件人可以从已经获的文档中Ctrl+C和Ctrl+V来完成。
private SimpleEmail semail = null;
private void sendSimpleEmail() { //Get Information for Email String server = jcbHoatName.getSelectedItem().toString().trim(); String hostName = getHostName(server); String userName = jtextFrom.getText().trim(); char[] pwdch = jpasstextUserPwd.getPassword(); String userPwd = arrayToString(pwdch); String from = jtextFrom.getText().trim() + server; String to = jtextareaTo.getText().trim(); String[] toContacts = getToContacts(to); String theme = jtextTheme.getText().trim(); String content = jEditorPane1.getText(); semail.setHostName(hostName); try { semail.setAuthentication(userName, userPwd); semail.setFrom(from); for (int i = 0, j = toContacts.length; i < j; i++) { semail.addTo(toContacts[i]); } semail.setSubject(theme); semail.setCharset("GB2312"); semail.setMsg(content); semail.send(); JOptionPane.showMessageDialog(null, "发送成功", "邮件发送成功", WIDTH); } catch (EmailException ex) { JOptionPane.showMessageDialog(null, "发送电子邮件失败", "失败", WIDTH); } }
获取收件人编写个方法:
private String[] getToContacts(String contactsString) { String[] contacts = contactsString.split(";"); for (int i = 0; i < contacts.length; i++) { contacts[i] = contacts[i].trim(); } return contacts; }
这里提供一个将JFrame框架置于Windows的中心位置的通用方法。
/** * 获取框架在Windows中显示的中心点 * * @param jf * @return 中心点 */ public static Point getCenter(JFrame jf) { Point p = new Point(); Dimension dim = jf.getSize(); int width = dim.width; int height = dim.height; Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); p.setLocation((screenSize.width - width) / 2, ((screenSize.height - height) / 2)); return p; }
第四步:为发送按钮写个事件处理就可以工作来。
private void jbtnSendActionPerformed(java.awt.event.ActionEvent evt) { semail = new SimpleEmail(); sendSimpleEmail(); }
基本目的是达到了,可是不能停在这里啊。
可以看到源代码真是一件幸福的事情啊,可以看到开发者是的设计,封装,扩展的思路,也可以提升自身的编码质量。如果一开始娱乐就去翻阅javamailAPI的话,可能娱乐的性质会发生很大的变化,说不定意志稍微不坚定,就自己把自己着实的娱乐了一把。
快一个月来。过了一些闲适的生活,赶快进入生活。找些兴趣,先沉湎其中,然后继续深入,我想这应该是循序渐进的新思路吧。
末了,继续回头看看这个程序,在时间投入,技术投入都是非常微小的,可是趣味性很高,因为来源与生活的一个问题,然后现在通过实践完成来期初的目的。
到这,程序员是不该满足的,正好兴趣浓烈啊,那么看看commons-email-1.2包还可以发送附件的,附件来自网络,本地文件。发件的电子邮箱在Excel文件中,那么现在又可以提供一个开源jar包,jxl.jar(韩国人开发的)。都是一些很简单,简洁,友好的实用jar包,用好了,也就有心中有树,有森林,这样才有好的开发思路和整体开发观。
本文出自 “野马红尘” 博客,谢绝转载!