我的漫漫程序之旅

专注于JavaWeb开发
随笔 - 39, 文章 - 310, 评论 - 411, 引用 - 0
数据加载中……

用Apache的Jakarta Commons-Email开源框架发送Email

Jakarta发布了Commons Emails 1.1leased 版本,目的是为了简化JavaMail。
该项目主页:http://commons.apache.org/email/
知道有它几个class吗?你一定想不到,只有8个!

好了,开始我们的jakarta commons emails 之旅:)

一:Quick Start
通过SimpleEmail发送邮件

java.lang.Object
org.apache.commons.mail.Email
   org.apache.commons.mail.SimpleEmail

SimpleEmail email = new SimpleEmail();
email.setHostName(
"mail.4ya.cn");
email.setAuthentication(
"<username>","<password>")
email.addTo(
"martin.xus@gmail.com""martin");
email.setFrom(
"martin@4ya.cn""martin");
email.setSubject(
"测试主题");
email.setMsg(
"这里是邮件内容");
email.send();

就如代码里字面上的意思一样简单:
1:创建以SimpleEmail对象
2:设定发送信件的smtp服务器,如果没有设定,会寻找系统变量中mail.host值。
3:设定smtp的用户和密码
4:收件人
5:发件人
6:主题
7:内容
8:发送

二:发送带附件的邮件
我们可以发送本机的附件,当然我们也可以发送非本机的附件,如果发送的是一个存在网络上的附件的url,则邮件发送的时候会自动下载,添加到附件中。

   1:)发送本地附件:
EmailAttachment attachment = new EmailAttachment();
attachment.setPath(
"test/test.rar");
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setDescription(
"python resource");
attachment.setName(
"resource");
2:)发送不存在本地的附件
EmailAttachment attachment = new EmailAttachment();
attachment.setURL(
new URL("/pic/2006/2/25/1340002.jpg"));
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setDescription(
"微笑图书馆");
attachment.setName(
"微笑图书馆");
next,添加附件到我们的邮件中
MultiPartEmail email = new MultiPartEmail();
email.setHostName(
"mail.4ya.cn");
    email.setAuthentication(
"<username>","<password>")
email.addTo(
"martin.xus@gmail.com""martin");
email.setFrom(
"martin@4ya.cn""martin");
email.setSubject(
"邮件主题");
email.setMsg(
"邮件内容");

//添加附件
email.attach(attachment);

//发送邮件
email.send();

如果需要发送多个附件,只需创建多个EmailAttachement,即可
email.attach(attachment1)
email.attach(attachment2)

三:发送html格式的邮件
通过HtmlEmail我们可以发送Html格式的邮件:
java.lang.Object
  org.apache.commons.mail.Email
    org.apache.commons.mail.MultiPartEmail
          org.apache.commons.mail.HtmlEmail

如下:
 //HtmlEmail!
 HtmlEmail email = new HtmlEmail();
 email.setHostName(
"mail.4ya.cn");
    email.setAuthentication(
"<username>","<password>")
 email.addTo(
"martin@4ya.cn"martin");
 email.setFrom("martin.xus@gmail.com"martin");
 email.setSubject("主题:该邮件包括html格式内容");
 
 
// embed the image and get the content id
 
// 注意这里:embed 将帮助我们创建标签如:cid:xxx url
URL url = new URL("/pic/2006/2/25/1340003.gif");
String cid 
= email.embed(url, "Apache logo");

/** *//**
set the html message
我们看到HtmlEmail extends Email的,它依然有setMsg(),但是这里发送的邮件包括了插入在邮件内容中的图片,所以不能在使用了setMsg(),而要以setHtmlMsg 或setTextMsg代码
*
*/

email.setHtmlMsg(
"<html>The apache logo - <img src=\"cid:"+cid+"\"></html>");

// set the alternative message
email.setTextMsg("Your email client does not support HTML messages");
//set mail
email.send();

四:最后一步
如果需要实现更复杂authenticator 你可以extends javax.mail.Authenticator ,实现你自己的东西,然后调用Email.setAuthenticator(javax.mail.Authenticator newAuthenticator)即可

这一点jakarta也做了,给我们提供了一个defaultAuthenticator
java.lang.Object
  javax.mail.Authenticator
      org.apache.commons.mail.DefaultAuthenticator

覆盖掉该方法,实现你自己的东东 o_o
protected javax.mail.PasswordAuthentication getPasswordAuthentication()
如果需要运行在web容器里,可能需要辅助的mail.jar和activation.jar包.
可以到我的网盘下载;下载


posted on 2007-12-25 15:12 々上善若水々 阅读(1993) 评论(1)  编辑  收藏 所属分类: JavaWeb

评论

# Vnutrennyaya Optimizaciya  回复  更多评论   

Excuse me. Everybody knows if you are too careful you are so occupied in being careful that you are sure to stumble over something.
I am from Bolivia and bad know English, give true I wrote the following sentence: "Apr if you using wordpress for your niche websites or blogs, this plugin can help you optimize your blog post urls for search engines.Learn seo or hire hobo to do it for you."

Waiting for a reply :), Gilbert.
2009-05-18 20:48 | Vnutrennyaya Optimizaciya

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问