java email 邮件-阿里云开发者社区

开发者社区> 安全> 正文

java email 邮件

简介: 关键字: java email 邮件 记得曾经学习用javamail发邮件,学了2天,大概搞明白了利用javamail发邮件的方法和注意事项。

关键字: 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("lifangxin2050@163.com"); //接收方    
            email.setFrom("lifangxin2050@gmail.com");       //发送方      
            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");       
        email.setAuthentication("***@gmail.com", "***");   //用户名和密码 
         
        try  
        { 
          email.addTo("lifangxin2050@163.com"); //接收方 
            email.addCc("ss327@163.com"); //抄送方   
            email.addBcc("ss377@163.com"); //秘密抄送方
            email.setSubject("Java Mail Test");         //标题    
            email.setMsg("Just a simple send test .");   //内容    
            email.send();  
             
        } catch (EmailException e) { 
            e.printStackTrace(); 
        }  
    } 
}
上面的邮件标题和内容用的都是英文,如果改为中文呢?我试了一下,结果邮件标题不是乱码,而邮件内容则中文部分是乱码。设置其charSet为GB2312或者UTF-8后就可以发送中文邮件了,显示正常了。如下面的代码。

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("lifangxin2050@gmail.com", "sdzzczqqyyxy");    
         
        try  
        { 
            email.addTo("lifangxin2050@163.com"); 
            email.setFrom("lifangxin2050@gmail.com");       //我方    
             
            email.setSubject("Java发送邮件测试");                 //标题    
             
            email.setCharset("GB2312");                     //设置Charset 
             
            email.setMsg("这是一封Java程序发出的测试邮件。");     //内容    
             
            email.send();  
             
        } catch (EmailException e) { 
            e.printStackTrace(); 
        }  
    } 
怎么样?简单吧~~~
有人这时说到了网页邮件,其实只需要把上面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("bulktree@126.com", "bulktree");
       multipartemail.setFrom("bulktree@163.com", "bulktree");
       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上是否会出现这个问题,如果有知道缘由的朋友,请多指教.

版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
+ 订阅

云安全开发者的大本营

其他文章