天天看点

java email 邮件

关键字: java email 邮件

记得曾经学习用javamail发邮件,学了2天,大概搞明白了利用javamail发邮件的方法和注意事项。

这周末在网上闲逛时,发现了另外一个发邮件的好东东。

commons-email-1.1.jar: 这是Apache组织下的一个项目,主要就是对java的邮件功能进行了封装,用起来更加方便,简单。

接下来我们就说说这个jar包。

首先肯定得下载commons-email-1.1.jar,并下载mail.jar和activation.jar(它们可以从sun的网站上下载,从下载的javamail和jaf中找到)。

如果没有mail.jar,则会有:Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Message 这样的错误提示。

如果没有activation.jar,则会有:Exception in thread "main" java.lang.NoClassDefFoundError: javax/activation/DataSource 这样的错误提示。

下面是一个简单的测试。

Java代码

import org.apache.commons.mail.EmailException;    

import org.apache.commons.mail.SimpleEmail;    

public class Send     

{    

    public Send()    

    {    

    }    

    public static void main(String[] args)    

        send();    

    public static void send()    

        SimpleEmail email = new SimpleEmail();       

        email.setTLS(true);            

        email.setHostName("smtp.gmail.com");          

        email.setAuthentication("

***@gmail.com

", "***");   //用户名和密码    

        try     

        {    

            email.addTo("

[email protected]

"); //接收方    

            email.setFrom("

[email protected]

");       //发送方      

            email.setSubject("Java Mail Test");         //标题       

            email.setMsg("Just a simple send test .");   //内容       

            email.send();     

        } catch (EmailException e) {    

            e.printStackTrace();    

        }     

}  

import org.apache.commons.mail.EmailException; 

import org.apache.commons.mail.SimpleEmail; 

public class Send  

    public Send() 

    { 

    } 

    public static void main(String[] args) 

        send(); 

    public static void send() 

        SimpleEmail email = new SimpleEmail();    

        email.setTLS(true); //是否TLS校验,,某些邮箱需要TLS安全校验,同理有SSL校验

//      email.setSSL(true);       

        email.setHostName("smtp.gmail.com");       

", "***");   //用户名和密码 

        try  

        { 

          email.addTo("

"); //接收方 

            email.addCc("

[email protected]

"); //抄送方   

            email.addBcc("

[email protected]

"); //秘密抄送方

            email.setSubject("Java Mail Test");         //标题    

            email.setMsg("Just a simple send test .");   //内容    

            email.send();  

        } catch (EmailException e) { 

            e.printStackTrace(); 

        }  

}

上面的邮件标题和内容用的都是英文,如果改为中文呢?我试了一下,结果邮件标题不是乱码,而邮件内容则中文部分是乱码。设置其charSet为GB2312或者UTF-8后就可以发送中文邮件了,显示正常了。如下面的代码。

        email.setTLS(true);         

", "sdzzczqqyyxy");    

"); 

");       //我方    

            email.setSubject("Java发送邮件测试");                 //标题    

            email.setCharset("GB2312");                     //设置Charset 

            email.setMsg("这是一封Java程序发出的测试邮件。");     //内容    

怎么样?简单吧~~~

有人这时说到了网页邮件,其实只需要把上面SimpleEmail换成HtmlEmail,然后设置邮件内容的方法由setMsg(String str)变为setHtmlMsg(String str)就可以了,这样就可以再邮件里使用<br/>等html标签来控制邮件的格式了.

还有人问,那么附件呢?别急,我们马上就来做个带附件发送的代码

import java.net.MalformedURLException;

import java.net.URL;

import org.apache.commons.mail.EmailAttachment;

import org.apache.commons.mail.EmailException;

import org.apache.commons.mail.MultiPartEmail;

publicclass AttachmentMailTest {

    publicstaticvoid main(String[] args) throws EmailException, MalformedURLException {

//     创建一个Email附件

       EmailAttachment emailattachment = new EmailAttachment();

       emailattachment.setPath("/biao_05.jpg");

//     emailattachment.setURL(new URL("

http://www.blogjava.net/bulktree/picture/bulktree.jpg

"));

       emailattachment.setDisposition(EmailAttachment.ATTACHMENT);

       emailattachment.setDescription("This is Smile picture");

       emailattachment.setName("bulktree");

//     创建一个email

       MultiPartEmail multipartemail = new MultiPartEmail();

       multipartemail.setHostName("smtp.163.com");

       multipartemail.addTo("

[email protected]

", "bulktree");

       multipartemail.setFrom("

[email protected]

       multipartemail.setAuthentication("bulktree", "123456");

       multipartemail.setSubject("This is a attachment Email");

       multipartemail.setMsg("this a attachment Eamil Test");

       //添加附件

       multipartemail.attach(emailattachment);

       //发送邮件

       multipartemail.send();

      System.out.println("The attachmentEmail send sucessful!!!");

    }

就这样,附件也发送成功了,大家可以试一下,另外这个项目是开源的,大家可以取下载它的src来看看,我暂时就说到这儿..

不过用这个commons-email-1.1.jar实现发邮件还是有2个值得注意的地方:

  1.前面提到mail.jar和activation.jar包的问题,这两个包需要额外下载并且必不可少的两个包

  2.不知是否是我使用错误或者软件环境导致,我在第一次使用时,出现了一个奇怪的异常:

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream

在网上有人说是因为JavaEE版本和JavaMail的版本不一致导致的.我用的是jdk1.6.查了半天,没找到是哪里冲突了,于是我建web项目时,选择1.4版本,于是没有出现任何问题,可以正常使用,估计应该是myeclipse建项目时自带的jar包引起了这个问题.我用的是myeclipse 6.0.不知道在eclipse或其他版本的myeclipse上是否会出现这个问题,如果有知道缘由的朋友,请多指教.