`
jessen163
  • 浏览: 464865 次
  • 性别: Icon_minigender_1
  • 来自: 潘多拉
社区版块
存档分类
最新评论

Commons-Email 简单教程

    博客分类:
  • Util
阅读更多
一: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("http://www.smilinglibrary.org/sldoc/pics/index03.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


如下:
1//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("http://www.apache.org/images/asf_logo_wide.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()

顺便再整理一下,朋友讨论的关于一些jakarta commons email出现乱码的问题:

一:通过SimpleEmail发送中文内容出现乱码的问题
SimpleEmail的代码如下
public class SimpleEmail extends Email {
    /**
     * Set the content of the mail
     *
     * @param msg A String.
     * @return An Email.
     * @throws EmailException see javax.mail.internet.MimeBodyPart
     *                        for definitions
     * @since 1.0
     */
    public Email setMsg(String msg) throws EmailException {
        if (EmailUtils.isEmpty(msg)) {
            throw new EmailException("Invalid message supplied");
        }
        setContent(msg, Email.TEXT_PLAIN);
        return this;
    }
}

只是采用默认的,

1public static final String TEXT_PLAIN = "text/plain";

并没有指定编码。

如果通过SimpleEmail发送,需要指定编码:Water Ye@ITO 的说明
 
1email.setContent("测试邮件", "text/plain;charset=GBK");

二:关于附件中文名称乱码的问题:

需使用MimeUtility

原因是在MIME的相应规范中(RFC2047等)说明了附件标题必须是US-ASCII字符, 所以在发送中文标题的附件时需要编码成US-ASCII字符, 有两种编码方式: B (BASE64), Q (Quoted-Printable), 这些方法在MimeUtility里
都已经做了封装, 所以在发送附件时使用如下:
1MimeUtility.encodeText(filename));


        EmailAttachment attachment = new EmailAttachment();
        attachment.setPath("c:\\测试.txt");
        attachment.setDisposition(EmailAttachment.ATTACHMENT);
        attachment.setDescription("测试文件");
         
           //
        attachment.setName(MimeUtility.encodeText("测试文件.txt"));

         MultiPartEmail email = new MultiPartEmail();
        email.setHostName("192.168.0.3");
        email.setAuthentication("martin.xus", "1234");
        email.addTo("martin.xus@192.168.0.3", "martin");
        email.setFrom("martin.xus@192.168.0.3", "martin");

        email.setSubject("测试带附件");
        email.setMsg("该邮件含附件");
        //添加附件
        email.attach(attachment);
        //发送邮件
        email.send();


end
---------------------------------------------------------------------------------
分享到:
评论

相关推荐

    邮件发送--commons-email-1.4.jar

    在描述中提到的"实现过程文章的连接"可能指向一篇教程或指南,该指南详细解释了如何使用Apache Commons Email库来发送邮件,包括设置服务器参数、添加附件、处理异常等。这样的资源对初学者非常有帮助,能够让他们...

    commons-email-1.1-src.zip

    Apache Commons Email是一个Java库,它提供了简单和直接的方式来创建电子邮件,包括HTML邮件、多部分邮件以及附件等。这个库简化了使用JavaMail API发送电子邮件的过程。 描述中的重复文字“commons-email-1.1-src....

    java 发邮件例子

    本教程将详细介绍如何使用`commons-email-1.1`库结合Java来实现邮件发送功能。 `commons-email`是Apache Commons项目的一部分,它提供了一个简单且灵活的API来创建和发送电子邮件。在`java`开发中,`commons-email`...

    java-email-tutorial:如何以三种方式从Java应用程序发送电子邮件的示例

    本教程将深入探讨如何使用Java从应用程序中发送电子邮件,通过三种不同的方法实现这一功能。以下是对这些方法的详细解释: 1. **JavaMail API** JavaMail API是Java中用于处理邮件的官方库,它提供了一系列接口和...

    [总结]Java发送Email

    Apache Commons Email库可以简化这个过程,提供更方便的API,例如`EasyEmail`类。 总结起来,Java发送Email涉及的主要知识点包括:JavaMail API的使用、SMTP/IMAP/POP3协议的理解、邮件头部和主体的构建、以及可能...

    Digester读取xml教程.rar

    《使用Digester解析XML的深度指南》 在Java开发中,处理XML...通过本教程,你应该对使用Apache Commons Digester解析XML有了全面的理解。实践中,不断探索和调整规则,将能充分发挥其潜力,为你的项目带来极大的便利。

    使用java实现email验证

    本教程将深入探讨如何使用Java实现邮件验证,包括发送邮件和进行邮件验证的过程。 首先,我们需要引入第三方的JavaMail API库,通常我们会使用Apache Commons Net库和JavaMail API来处理邮件相关任务。在Maven项目...

    关于JavaMail的两个关键jar

    在实际开发中,为了方便使用JavaMail,还可以借助一些开源库,比如Apache的`commons-email`,它提供了一种更简洁的方式来发送邮件,包括带附件的邮件。 总的来说,`mail.jar`和`activation.jar`是JavaMail的核心...

    java操作pdf和javamail的合包

    Apache Commons Email库是JavaMail的一个简化版本,提供了更简单的接口来发送电子邮件,包括HTML邮件、附件、多部分消息等。要使用JavaMail,你需要理解SMTP(Simple Mail Transfer Protocol)协议,这是互联网上...

    Java发送邮件的实例(三种方式)实现代码

    总结,Java发送邮件可以通过JavaMail API、Jakarta Mail或Apache Commons Email库来实现。每种方法都有其优缺点,根据项目需求和团队熟悉程度选择合适的方式。在实际应用中,还需要考虑错误处理、邮件格式化、性能...

    邮件发送小例子

    本教程将通过一个名为"邮件发送小例子"的项目,教你如何利用`HtmlEmail`类来实现HTML格式的邮件发送。`HtmlEmail`是一个专门用于创建和发送带有HTML内容的邮件的工具,它简化了邮件编程的复杂性,让我们能够更加便捷...

    struts2 简单数据校验

    在“Struts2_1100_SimpleDataValiation”这个压缩包中,可能包含了相关的代码示例、教程文档,或者是一个简单的Struts2项目,用于演示如何在实际应用中实现数据校验。你可以通过解压文件,学习和理解Struts2数据校验...

    JSTL详细教程

    这些函数通常来自Apache Commons Lang和Apache Commons BeanUtils库。 4. **JSTL国际化和格式化库(fmt)** 这个库提供标签来处理国际化和本地化,如`&lt;fmt:message&gt;`用于获取消息资源,`&lt;fmt:formatNumber&gt;`用于...

    Android程序崩溃异常处理之自动发送邮件

    本教程将介绍如何实现Android程序在崩溃时自动发送邮件,以便快速获取并分析错误信息。 首先,我们需要集成一个用于发送邮件的框架包。在Java世界里,常用的库有JavaMail API和Apache Commons Net,但在Android中,...

    Spring and iBATIS

    本教程假设读者已经具备一定的Java基础,并对Spring框架有一定的了解。同时,读者也应该熟悉基本的数据库操作和SQL语言。 #### 三、准备工作 在开始之前,请确保已经安装了以下环境: - Java 开发环境 - Spring ...

    张孝祥Java邮件开发详解

    同时,为了提高代码的可读性和可维护性,可以考虑使用第三方库如Apache Commons Email或Spring Framework的MailSender接口,它们提供了更简洁的API来发送邮件。 总之,“张孝祥Java邮件开发详解”教程将帮助你掌握...

    javamail client

    - Apache Commons Email:提供更简单的邮件发送接口,支持HTML邮件和模板。 - Spring Framework的JavaMailSender:整合Spring,简化邮件发送操作。 10. **学习资源** 开发者可以参考JavaMail官方文档,以及各种...

    java一个简单的orm框架开发可以参考写习用

    本教程将带你了解如何开发一个简单的ORM框架,以此为基础,你可以深入理解ORM的工作原理,并扩展出更复杂的功能。 首先,我们需要理解ORM的核心思想:将数据库中的表映射为Java类,表中的记录映射为类的实例,字段...

    jsp连接mysql数据库工程

    在Struts框架中,可以使用第三方库如C3P0或Apache Commons DBCP来管理数据库连接。连接池可以提高性能,因为它会重用已打开的连接,而不是每次请求时都新建一个。 在JSP页面中,我们通常不直接编写业务逻辑,而是...

    14_Adressbuch_csv

    描述中同样提到“14_Adressbuch_csv”,这可能是项目或教程的一部分,其中“14”可能代表系列中的第14个主题或步骤,暗示这是一个逐步进阶的学习过程。在这个项目中,用户可能学习如何使用Java处理CSV文件来创建、...

Global site tag (gtag.js) - Google Analytics