当前位置: 首页 > news >正文

java发邮件22

文章分类:Java编程 关键字: 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代码 复制代码
  1. Java代码   
  2. import org.apache.commons.mail.EmailException;        
  3. import org.apache.commons.mail.SimpleEmail;        
  4.        
  5. public class Send         
  6. {        
  7.     public Send()        
  8.     {        
  9.                 
  10.     }        
  11.             
  12.     public static void main(String[] args)        
  13.     {        
  14.         send();        
  15.     }        
  16.             
  17.     public static void send()        
  18.     {        
  19.         SimpleEmail email = new SimpleEmail();           
  20.         email.setTLS(true);                
  21.         email.setHostName("smtp.gmail.com");              
  22.         email.setAuthentication("***@gmail.com""***");   //用户名和密码        
  23.                 
  24.         try         
  25.         {        
  26.             email.addTo("lifangxin2050@163.com"); //接收方        
  27.             email.setFrom("lifangxin2050@gmail.com");       //发送方          
  28.             email.setSubject("Java Mail Test");         //标题           
  29.             email.setMsg("Just a simple send test .");   //内容           
  30.             email.send();         
  31.                     
  32.         } catch (EmailException e) {        
  33.             e.printStackTrace();        
  34.         }         
  35.     }        
  36. }      
  37.   
  38. import org.apache.commons.mail.EmailException;     
  39. import org.apache.commons.mail.SimpleEmail;     
  40.     
  41. public class Send      
  42. {     
  43.     public Send()     
  44.     {     
  45.              
  46.     }     
  47.          
  48.     public static void main(String[] args)     
  49.     {     
  50.         send();     
  51.     }     
  52.          
  53.     public static void send()     
  54.     {     
  55.         SimpleEmail email = new SimpleEmail();        
  56.         email.setTLS(true); //是否TLS校验,,某些邮箱需要TLS安全校验,同理有SSL校验   
  57. //      email.setSSL(true);           
  58.         email.setHostName("smtp.gmail.com");           
  59.         email.setAuthentication("***@gmail.com""***");   //用户名和密码     
  60.              
  61.         try      
  62.         {     
  63.           email.addTo("lifangxin2050@163.com"); //接收方     
  64.             email.addCc("ss327@163.com"); //抄送方       
  65.             email.addBcc("ss377@163.com"); //秘密抄送方   
  66.             email.setSubject("Java Mail Test");         //标题        
  67.             email.setMsg("Just a simple send test .");   //内容        
  68.             email.send();      
  69.                  
  70.         } catch (EmailException e) {     
  71.             e.printStackTrace();     
  72.         }      
  73.     }     
  74. }  
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代码 复制代码
  1. Java代码   
  2. import org.apache.commons.mail.EmailException;     
  3. import org.apache.commons.mail.SimpleEmail;     
  4.     
  5. public class Send      
  6. {     
  7.     public Send()     
  8.     {     
  9.              
  10.     }     
  11.          
  12.     public static void main(String[] args)     
  13.     {     
  14.         send();     
  15.     }     
  16.          
  17.     public static void send()     
  18.     {     
  19.         SimpleEmail email = new SimpleEmail();        
  20.         email.setTLS(true);             
  21.         email.setHostName("smtp.gmail.com");           
  22.         email.setAuthentication("lifangxin2050@gmail.com""sdzzczqqyyxy");        
  23.              
  24.         try      
  25.         {     
  26.             email.addTo("lifangxin2050@163.com");     
  27.             email.setFrom("lifangxin2050@gmail.com");       //我方        
  28.                  
  29.             email.setSubject("Java发送邮件测试");                 //标题        
  30.                  
  31.             email.setCharset("GB2312");                     //设置Charset     
  32.                  
  33.             email.setMsg("这是一封Java程序发出的测试邮件。");     //内容        
  34.                  
  35.             email.send();      
  36.                  
  37.         } catch (EmailException e) {     
  38.             e.printStackTrace();     
  39.         }      
  40.     }     
  41. }    
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标签来控制邮件的格式了.
还有人问,那么附件呢?别急,我们马上就来做个带附件发送的代码

Java代码 复制代码
  1. import java.net.MalformedURLException;   
  2.   
  3. import java.net.URL;   
  4.   
  5. import org.apache.commons.mail.EmailAttachment;   
  6.   
  7. import org.apache.commons.mail.EmailException;   
  8.   
  9. import org.apache.commons.mail.MultiPartEmail;   
  10.   
  11. publicclass AttachmentMailTest {   
  12.   
  13.     publicstaticvoid main(String[] args) throws EmailException, MalformedURLException {   
  14.   
  15. //     创建一个Email附件   
  16.   
  17.        EmailAttachment emailattachment = new EmailAttachment();   
  18.   
  19.        emailattachment.setPath("/biao_05.jpg");   
  20.   
  21. //     emailattachment.setURL(new URL("http://www.blogjava.net/bulktree/picture/bulktree.jpg"));   
  22.   
  23.        emailattachment.setDisposition(EmailAttachment.ATTACHMENT);   
  24.   
  25.        emailattachment.setDescription("This is Smile picture");   
  26.   
  27.        emailattachment.setName("bulktree");   
  28.   
  29. //     创建一个email   
  30.   
  31.        MultiPartEmail multipartemail = new MultiPartEmail();   
  32.   
  33.        multipartemail.setHostName("smtp.163.com");   
  34.   
  35.        multipartemail.addTo("bulktree@126.com""bulktree");   
  36.   
  37.        multipartemail.setFrom("bulktree@163.com""bulktree");   
  38.   
  39.        multipartemail.setAuthentication("bulktree""123456");   
  40.   
  41.        multipartemail.setSubject("This is a attachment Email");   
  42.   
  43.        multipartemail.setMsg("this a attachment Eamil Test");   
  44.   
  45.        //添加附件   
  46.   
  47.        multipartemail.attach(emailattachment);   
  48.   
  49.        //发送邮件   
  50.   
  51.        multipartemail.send();   
  52.   
  53.       System.out.println("The attachmentEmail send sucessful!!!");   
  54.     }   
  55. }  
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.不知是否是我使用错误或者软件环境导致,我在第一次使用时,出现了一个奇怪的异常:
Java代码 复制代码
  1. Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream  
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上是否会出现这个问题,如果有知道缘由的朋友,请多指教.

转载于:https://www.cnblogs.com/gllgsoft/archive/2010/07/30/1788889.html

相关文章:

  • 2010.8.1 Unicode编程
  • 《Microsoft Sql server 2008 Internals》读书笔记--第十一章DBCC Internals(6)
  • Dashboard,新时代的报表
  • 最大乘积——高精度乘法
  • ZT:判断链表是否有环以及环的入口点
  • mfs 测试实验--环境搭建
  • linux 入门学习
  • 报ERROR: Fast Data Access MMU Miss 错误解决思路
  • ASP.NET获取当前网址方法
  • 如果你已经20岁了,你真的输不起了,别再孩子了.....
  • SQL的语法和规则
  • 漫谈VoIP技术 H.323与SIP比较分析
  • FreeBSD 6.0架设管理与应用-第二章 安裝 FreeBSD
  • MyIsam 锁
  • Eqs--POJ 1840
  • JavaScript 如何正确处理 Unicode 编码问题!
  • android图片蒙层
  • chrome扩展demo1-小时钟
  • CSS实用技巧干货
  • linux安装openssl、swoole等扩展的具体步骤
  • Linux快速复制或删除大量小文件
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • 对JS继承的一点思考
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 实战|智能家居行业移动应用性能分析
  • 试着探索高并发下的系统架构面貌
  • 小程序开发中的那些坑
  • 移动端解决方案学习记录
  • 国内开源镜像站点
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​学习一下,什么是预包装食品?​
  • # .NET Framework中使用命名管道进行进程间通信
  • #1014 : Trie树
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (1)SpringCloud 整合Python
  • (js)循环条件满足时终止循环
  • (libusb) usb口自动刷新
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (二)Linux——Linux常用指令
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (黑马C++)L06 重载与继承
  • (三)c52学习之旅-点亮LED灯
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • /3GB和/USERVA开关
  • @RunWith注解作用
  • @开发者,一文搞懂什么是 C# 计时器!
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [android] 练习PopupWindow实现对话框