`
wusuoya
  • 浏览: 629833 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

java发送电子邮件

    博客分类:
  • web
 
阅读更多

首先需要依赖两个jar包

mail.jar (pom中配置它即可)   下载地址:http://download.csdn.net/detail/cuiran/4300419

activation.jar  (Maven会自动引入) 下载地址:http://download.csdn.net/detail/cuiran/4300421

 

然后导入工程中:

代码如下:

  1. /** 
  2.  * Email.java 
  3.  * 版权所有(C) 2012  
  4.  * 创建:cuiran 2012-05-11 12:52:41 
  5.  */  
  6. package com.wpn.email.test;  
  7. import java.util.Properties;  
  8. import javax.activation.DataHandler;  
  9. import javax.activation.FileDataSource;  
  10. import javax.mail.*;  
  11. import javax.mail.internet.*;  
  12. /** 
  13.  * 本程序用java来实现Email的发送,所用到的协议为:SMTP,端口号为25;<br> 
  14.  * 方法:用Socket进行实现,打开客户端的Socket,并连接上服务器:<br> 
  15.  * 如:Socket sockClient = new Socket("smtp.qq.com",23);<br> 
  16.  * 这表示发件方连接的是QQ邮箱的服务器,端口号为23 
  17.  * @author cuiran 
  18.  * @version 1.0.0 
  19.  */  
  20. public class Email  
  21. {  
  22.     /** 
  23.      * 整个MIME邮件对象 
  24.      */  
  25.     private MimeMessage mimeMsg;  
  26.     /** 
  27.      * 专门用来发送邮件的Session会话 
  28.      */  
  29.     private Session     session;  
  30.     /** 
  31.      * 封装邮件发送时的一些配置信息的一个属性对象 
  32.      */  
  33.     private Properties  props;  
  34.     /** 
  35.      * 发件人的用户名 
  36.      */  
  37.     private String      username;  
  38.     /** 
  39.      * 发件人的密码 
  40.      */  
  41.     private String      password;  
  42.     /** 
  43.      * 用来实现附件添加的组件 
  44.      */  
  45.     private Multipart   mp;  
  46.     /** 
  47.      * 发送参数初始化,有的服务器不需要用户验证,所以这里对用户名和密码进行初始化"" 
  48.      *  
  49.      * @param smtp 
  50.      *            SMTP服务器的地址,比如要用QQ邮箱,哪么应为:"smtp.qq.com",163为:"smtp.163.com" 
  51.      */  
  52.     public Email(String smtp)  
  53.     {  
  54.         username = "";  
  55.         password = "";  
  56.         // 设置邮件服务器  
  57.         setSmtpHost(smtp);  
  58.         // 创建邮件  
  59.         createMimeMessage();  
  60.     }  
  61.     /** 
  62.      * 设置发送邮件的主机(JavaMail需要Properties来创建一个session对象。 
  63.      * 它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机); 
  64.      *  
  65.      * @param hostName 
  66.      */  
  67.     public void setSmtpHost(String hostName)  
  68.     {  
  69.         System.out.println("设置系统属性:mail.smtp.host = " + hostName);  
  70.         if (props == null)  
  71.             props = System.getProperties();  
  72.         props.put("mail.smtp.host", hostName);  
  73.     }  
  74.     /** 
  75.      * (这个Session类代表JavaMail 中的一个邮件session. 每一个基于 
  76.      * JavaMail的应用程序至少有一个session但是可以有任意多的session。 在这个例子中, 
  77.      * Session对象需要知道用来处理邮件的SMTP 服务器。 
  78.      */  
  79.     public boolean createMimeMessage()  
  80.     {  
  81.         try  
  82.         {  
  83.             System.out.println("准备获取邮件会话对象!");  
  84.             // 用props对象来创建并初始化session对象  
  85.             session = Session.getDefaultInstance(props, null);  
  86.         }  
  87.         catch (Exception e)  
  88.         {  
  89.             System.err.println("获取邮件会话对象时发生错误!" + e);  
  90.             return false;  
  91.         }  
  92.         System.out.println("准备创建MIME邮件对象!");  
  93.         try  
  94.         {  
  95.             // 用session对象来创建并初始化邮件对象  
  96.             mimeMsg = new MimeMessage(session);  
  97.             // 生成附件组件的实例  
  98.             mp = new MimeMultipart();  
  99.         }  
  100.         catch (Exception e)  
  101.         {  
  102.             System.err.println("创建MIME邮件对象失败!" + e);  
  103.             return false;  
  104.         }  
  105.         return true;  
  106.     }  
  107.     /** 
  108.      * 设置SMTP的身份认证 
  109.      */  
  110.     public void setNeedAuth(boolean need)  
  111.     {  
  112.         System.out.println("设置smtp身份认证:mail.smtp.auth = " + need);  
  113.         if (props == null)  
  114.         {  
  115.             props = System.getProperties();  
  116.         }  
  117.         if (need)  
  118.             props.put("mail.smtp.auth""true");  
  119.         else  
  120.             props.put("mail.smtp.auth""false");  
  121.     }  
  122.     /** 
  123.      * 进行用户身份验证时,设置用户名和密码 
  124.      */  
  125.     public void setNamePass(String name, String pass)  
  126.     {  
  127.         System.out.println("程序得到用户名与密码");  
  128.         username = name;  
  129.         password = pass;  
  130.     }  
  131.     /** 
  132.      * 设置邮件主题 
  133.      *  
  134.      * @param mailSubject 
  135.      * @return 
  136.      */  
  137.     public boolean setSubject(String mailSubject)  
  138.     {  
  139.         System.out.println("设置邮件主题!");  
  140.         try  
  141.         {  
  142.             mimeMsg.setSubject(mailSubject);  
  143.         }  
  144.         catch (Exception e)  
  145.         {  
  146.             System.err.println("设置邮件主题发生错误!");  
  147.             return false;  
  148.         }  
  149.         return true;  
  150.     }  
  151.     /** 
  152.      * 设置邮件内容,并设置其为文本格式或HTML文件格式,编码方式为UTF-8 
  153.      *  
  154.      * @param mailBody 
  155.      * @return 
  156.      */  
  157.     public boolean setBody(String mailBody)  
  158.     {  
  159.         try  
  160.         {  
  161.             System.out.println("设置邮件体格式");  
  162.             BodyPart bp = new MimeBodyPart();  
  163.             bp.setContent("<meta http-equiv=Content-Type content=text/html; charset=UTF-8>" + mailBody,  
  164.                             "text/html;charset=UTF-8");  
  165.             // 在组件上添加邮件文本  
  166.             mp.addBodyPart(bp);  
  167.         }  
  168.         catch (Exception e)  
  169.         {  
  170.             System.err.println("设置邮件正文时发生错误!" + e);  
  171.             return false;  
  172.         }  
  173.         return true;  
  174.     }  
  175.     /** 
  176.      * 增加发送附件 
  177.      *  
  178.      * @param filename 
  179.      *            邮件附件的地址,只能是本机地址而不能是网络地址,否则抛出异常  
  180.      * @return 
  181.      */  
  182.     public boolean addFileAffix(String filename)  
  183.     {  
  184.         System.out.println("增加邮件附件:" + filename);  
  185.         try  
  186.         {  
  187.             BodyPart bp = new MimeBodyPart();  
  188.             FileDataSource fileds = new FileDataSource(filename);  
  189.             bp.setDataHandler(new DataHandler(fileds));  
  190.             // 发送的附件前加上一个用户名的前缀  
  191.             bp.setFileName(fileds.getName());  
  192.             // 添加附件  
  193.             mp.addBodyPart(bp);  
  194.         }  
  195.         catch (Exception e)  
  196.         {  
  197.             System.err.println("增加邮件附件:" + filename + "发生错误!" + e);  
  198.             return false;  
  199.         }  
  200.         return true;  
  201.     }  
  202.     /** 
  203.      * 设置发件人地址 
  204.      *  
  205.      * @param from 
  206.      *            发件人地址 
  207.      * @return 
  208.      */  
  209.     public boolean setFrom(String from)  
  210.     {  
  211.         System.out.println("设置发信人!");  
  212.         try  
  213.         {  
  214.             mimeMsg.setFrom(new InternetAddress(from));  
  215.         }  
  216.         catch (Exception e)  
  217.         {  
  218.             return false;  
  219.         }  
  220.         return true;  
  221.     }  
  222.     /** 
  223.      * 设置收件人地址 
  224.      *  
  225.      * @param to 
  226.      *            收件人的地址 
  227.      * @return 
  228.      */  
  229.     public boolean setTo(String to)  
  230.     {  
  231.         System.out.println("设置收信人");  
  232.         if (to == null)  
  233.             return false;  
  234.         try  
  235.         {  
  236.             mimeMsg.setRecipients(javax.mail.Message.RecipientType.TO, InternetAddress.parse(to));  
  237.         }  
  238.         catch (Exception e)  
  239.         {  
  240.             return false;  
  241.         }  
  242.         return true;  
  243.     }  
  244.     /** 
  245.      * 发送附件 
  246.      *  
  247.      * @param copyto 
  248.      * @return 
  249.      */  
  250.     public boolean setCopyTo(String copyto)  
  251.     {  
  252.         System.out.println("发送附件到");  
  253.         if (copyto == null)  
  254.             return false;  
  255.         try  
  256.         {  
  257.             mimeMsg.setRecipients(javax.mail.Message.RecipientType.CC, InternetAddress.parse(copyto));  
  258.         }  
  259.         catch (Exception e)  
  260.         {  
  261.             return false;  
  262.         }  
  263.         return true;  
  264.     }  
  265.     /** 
  266.      * 发送邮件 
  267.      *  
  268.      * @return 
  269.      */  
  270.     public boolean sendout()  
  271.     {  
  272.         try  
  273.         {  
  274.             mimeMsg.setContent(mp);  
  275.             mimeMsg.saveChanges();  
  276.             System.out.println("正在发送邮件....");  
  277.             Session mailSession = Session.getInstance(props, null);  
  278.             Transport transport = mailSession.getTransport("smtp");  
  279.             // 真正的连接邮件服务器并进行身份验证  
  280.             transport.connect((String) props.get("mail.smtp.host"), username, password);  
  281.             // 发送邮件  
  282.             transport.sendMessage(mimeMsg, mimeMsg.getRecipients(javax.mail.Message.RecipientType.TO));  
  283.             System.out.println("发送邮件成功!");  
  284.             transport.close();  
  285.         }  
  286.         catch (Exception e)  
  287.         {  
  288.             System.err.println("邮件发送失败!" + e.getMessage());  
  289.             e.printStackTrace();  
  290.             return false;  
  291.         }  
  292.         return true;  
  293.     }  
  294.     public static void main(String[] args)  
  295.     {  
  296.         /** 
  297.          * 
  298.          *************切切注意******** 
  299.          * 
  300.          *注意  用此程序发邮件必须邮箱支持smtp服务  在2006年以后申请的163邮箱是不支持的 
  301.          *我知道sina邮箱  sohu邮箱 qq邮箱支持  但是sina和qq邮箱需要手工设置开启此功能   
  302.          *所以在测试时最好使用这三个邮箱    
  303.          *sina邮箱的smtp设置方法如下 
  304.          *登录sina邮箱 依次点击 邮箱设置--->帐户--->POP/SMTP设置 将开启复选框选中 然后保存 
  305.          * 
  306.          *************切切注意******** 
  307.          */  
  308.         Email themail = new Email("smtp.163.com");//这里以新浪邮箱为例子  
  309.         String mailbody = "<a href='http://www.wphtu.ah.cn/' target='_blank'>芜湖职业技术学院</a>发送成功了哦";//邮件正文  
  310.         themail.setNeedAuth(true);  
  311.         themail.setSubject("JAVA发邮件的测试");//邮件主题  
  312.         themail.setBody(mailbody);//邮件正文  
  313.         themail.setTo("115621060@qq.com");//收件人地址  
  314.         themail.setFrom("cuiran2001@163.com");//发件人地址  
  315.         themail.addFileAffix("F:/download/email.rar");// 附件文件路径,例如:C:/222.jpg,*注;"/"的写法; 如果没有可以不写  
  316.         themail.setNamePass("cuiran2001@163.com""****");//发件人地址和密码 **改为相应邮箱密码  
  317.         themail.sendout();  
  318.     }  

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics