使用JavaMail发送邮件

使用JavaMail发送邮件需要用到mail.jar和activtion.jar两个包。

该类实现了较完整的邮件发送功能,包括以HTML格式发送,添加附件和抄送人。下面是具体的代码:

Mail.java:

 

Java代码   收藏代码
  1. package cn.cgw.util.mail;  
  2.   
  3. import java.util.Properties;  
  4.   
  5. import javax.activation.DataHandler;  
  6. import javax.activation.FileDataSource;  
  7. import javax.mail.Address;  
  8. import javax.mail.BodyPart;  
  9. import javax.mail.Message;  
  10. import javax.mail.Multipart;  
  11. import javax.mail.Session;  
  12. import javax.mail.Transport;  
  13. import javax.mail.internet.InternetAddress;  
  14. import javax.mail.internet.MimeBodyPart;  
  15. import javax.mail.internet.MimeMessage;  
  16. import javax.mail.internet.MimeMultipart;  
  17.   
  18.   
  19. public class Mail {   
  20.   
  21.     private MimeMessage mimeMsg; //MIME邮件对象   
  22.     private Session session; //邮件会话对象   
  23.     private Properties props; //系统属性   
  24.     private boolean needAuth = false//smtp是否需要认证   
  25.     //smtp认证用户名和密码   
  26.     private String username;   
  27.     private String password;   
  28.     private Multipart mp; //Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象   
  29.        
  30.     /** 
  31.      * Constructor 
  32.      * @param smtp 邮件发送服务器 
  33.      */  
  34.     public Mail(String smtp){   
  35.         setSmtpHost(smtp);   
  36.         createMimeMessage();   
  37.     }   
  38.   
  39.     /** 
  40.      * 设置邮件发送服务器 
  41.      * @param hostName String  
  42.      */  
  43.     public void setSmtpHost(String hostName) {   
  44.         System.out.println("设置系统属性:mail.smtp.host = "+hostName);   
  45.         if(props == null)  
  46.             props = System.getProperties(); //获得系统属性对象    
  47.         props.put("mail.smtp.host",hostName); //设置SMTP主机   
  48.     }   
  49.   
  50.   
  51.     /** 
  52.      * 创建MIME邮件对象   
  53.      * @return 
  54.      */  
  55.     public boolean createMimeMessage()   
  56.     {   
  57.         try {   
  58.             System.out.println("准备获取邮件会话对象!");   
  59.             session = Session.getDefaultInstance(props,null); //获得邮件会话对象   
  60.         }   
  61.         catch(Exception e){   
  62.             System.err.println("获取邮件会话对象时发生错误!"+e);   
  63.             return false;   
  64.         }   
  65.       
  66.         System.out.println("准备创建MIME邮件对象!");   
  67.         try {   
  68.             mimeMsg = new MimeMessage(session); //创建MIME邮件对象   
  69.             mp = new MimeMultipart();   
  70.           
  71.             return true;   
  72.         } catch(Exception e){   
  73.             System.err.println("创建MIME邮件对象失败!"+e);   
  74.             return false;   
  75.         }   
  76.     }     
  77.       
  78.     /** 
  79.      * 设置SMTP是否需要验证 
  80.      * @param need 
  81.      */  
  82.     public void setNeedAuth(boolean need) {   
  83.         System.out.println("设置smtp身份认证:mail.smtp.auth = "+need);   
  84.         if(props == null) props = System.getProperties();   
  85.         if(need){   
  86.             props.put("mail.smtp.auth","true");   
  87.         }else{   
  88.             props.put("mail.smtp.auth","false");   
  89.         }   
  90.     }   
  91.   
  92.     /** 
  93.      * 设置用户名和密码 
  94.      * @param name 
  95.      * @param pass 
  96.      */  
  97.     public void setNamePass(String name,String pass) {   
  98.         username = name;   
  99.         password = pass;   
  100.     }   
  101.   
  102.     /** 
  103.      * 设置邮件主题 
  104.      * @param mailSubject 
  105.      * @return 
  106.      */  
  107.     public boolean setSubject(String mailSubject) {   
  108.         System.out.println("设置邮件主题!");   
  109.         try{   
  110.             mimeMsg.setSubject(mailSubject);   
  111.             return true;   
  112.         }   
  113.         catch(Exception e) {   
  114.             System.err.println("设置邮件主题发生错误!");   
  115.             return false;   
  116.         }   
  117.     }  
  118.       
  119.     /**  
  120.      * 设置邮件正文 
  121.      * @param mailBody String  
  122.      */   
  123.     public boolean setBody(String mailBody) {   
  124.         try{   
  125.             BodyPart bp = new MimeBodyPart();   
  126.             bp.setContent(""+mailBody,"text/html;charset=GBK");   
  127.             mp.addBodyPart(bp);   
  128.           
  129.             return true;   
  130.         } catch(Exception e){   
  131.         System.err.println("设置邮件正文时发生错误!"+e);   
  132.         return false;   
  133.         }   
  134.     }   
  135.     /**  
  136.      * 添加附件 
  137.      * @param filename String  
  138.      */   
  139.     public boolean addFileAffix(String filename) {   
  140.       
  141.         System.out.println("增加邮件附件:"+filename);   
  142.         try{   
  143.             BodyPart bp = new MimeBodyPart();   
  144.             FileDataSource fileds = new FileDataSource(filename);   
  145.             bp.setDataHandler(new DataHandler(fileds));   
  146.             bp.setFileName(fileds.getName());   
  147.               
  148.             mp.addBodyPart(bp);   
  149.               
  150.             return true;   
  151.         } catch(Exception e){   
  152.             System.err.println("增加邮件附件:"+filename+"发生错误!"+e);   
  153.             return false;   
  154.         }   
  155.     }   
  156.       
  157.     /**  
  158.      * 设置发信人 
  159.      * @param from String  
  160.      */   
  161.     public boolean setFrom(String from) {   
  162.         System.out.println("设置发信人!");   
  163.         try{   
  164.             mimeMsg.setFrom(new InternetAddress(from)); //设置发信人   
  165.             return true;   
  166.         } catch(Exception e) {   
  167.             return false;   
  168.         }   
  169.     }   
  170.     /**  
  171.      * 设置收信人 
  172.      * @param to String  
  173.      */   
  174.     public boolean setTo(String to){   
  175.         if(to == null)return false;   
  176.         try{   
  177.             mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));   
  178.             return true;   
  179.         } catch(Exception e) {   
  180.             return false;   
  181.         }     
  182.     }   
  183.       
  184.     /**  
  185.      * 设置抄送人 
  186.      * @param copyto String   
  187.      */   
  188.     public boolean setCopyTo(String copyto)   
  189.     {   
  190.         if(copyto == null)return false;   
  191.         try{   
  192.         mimeMsg.setRecipients(Message.RecipientType.CC,(Address[])InternetAddress.parse(copyto));   
  193.         return true;   
  194.         }   
  195.         catch(Exception e)   
  196.         { return false; }   
  197.     }   
  198.       
  199.     /**  
  200.      * 发送邮件 
  201.      */   
  202.     public boolean sendOut()   
  203.     {   
  204.         try{   
  205.             mimeMsg.setContent(mp);   
  206.             mimeMsg.saveChanges();   
  207.             System.out.println("正在发送邮件....");   
  208.               
  209.             Session mailSession = Session.getInstance(props,null);   
  210.             Transport transport = mailSession.getTransport("smtp");   
  211.             transport.connect((String)props.get("mail.smtp.host"),username,password);   
  212.             transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO));   
  213.             transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.CC));   
  214.             //transport.send(mimeMsg);   
  215.               
  216.             System.out.println("发送邮件成功!");   
  217.             transport.close();   
  218.               
  219.             return true;   
  220.         } catch(Exception e) {   
  221.             System.err.println("邮件发送失败!"+e);   
  222.             return false;   
  223.         }   
  224.     }   
  225.   
  226.     /** 
  227.      * 调用sendOut方法完成邮件发送 
  228.      * @param smtp 
  229.      * @param from 
  230.      * @param to 
  231.      * @param subject 
  232.      * @param content 
  233.      * @param username 
  234.      * @param password 
  235.      * @return boolean 
  236.      */  
  237.     public static boolean send(String smtp,String from,String to,String subject,String content,String username,String password) {  
  238.         Mail theMail = new Mail(smtp);  
  239.         theMail.setNeedAuth(true); //需要验证  
  240.           
  241.         if(!theMail.setSubject(subject)) return false;  
  242.         if(!theMail.setBody(content)) return false;  
  243.         if(!theMail.setTo(to)) return false;  
  244.         if(!theMail.setFrom(from)) return false;  
  245.         theMail.setNamePass(username,password);  
  246.           
  247.         if(!theMail.sendOut()) return false;  
  248.         return true;  
  249.     }  
  250.       
  251.     /** 
  252.      * 调用sendOut方法完成邮件发送,带抄送 
  253.      * @param smtp 
  254.      * @param from 
  255.      * @param to 
  256.      * @param copyto 
  257.      * @param subject 
  258.      * @param content 
  259.      * @param username 
  260.      * @param password 
  261.      * @return boolean 
  262.      */  
  263.     public static boolean sendAndCc(String smtp,String from,String to,String copyto,String subject,String content,String username,String password) {  
  264.         Mail theMail = new Mail(smtp);  
  265.         theMail.setNeedAuth(true); //需要验证  
  266.           
  267.         if(!theMail.setSubject(subject)) return false;  
  268.         if(!theMail.setBody(content)) return false;  
  269.         if(!theMail.setTo(to)) return false;  
  270.         if(!theMail.setCopyTo(copyto)) return false;  
  271.         if(!theMail.setFrom(from)) return false;  
  272.         theMail.setNamePass(username,password);  
  273.           
  274.         if(!theMail.sendOut()) return false;  
  275.         return true;  
  276.     }  
  277.       
  278.     /** 
  279.      * 调用sendOut方法完成邮件发送,带附件 
  280.      * @param smtp 
  281.      * @param from 
  282.      * @param to 
  283.      * @param subject 
  284.      * @param content 
  285.      * @param username 
  286.      * @param password 
  287.      * @param filename 附件路径 
  288.      * @return 
  289.      */  
  290.     public static boolean send(String smtp,String from,String to,String subject,String content,String username,String password,String filename) {  
  291.         Mail theMail = new Mail(smtp);  
  292.         theMail.setNeedAuth(true); //需要验证  
  293.           
  294.         if(!theMail.setSubject(subject)) return false;  
  295.         if(!theMail.setBody(content)) return false;  
  296.         if(!theMail.addFileAffix(filename)) return false;   
  297.         if(!theMail.setTo(to)) return false;  
  298.         if(!theMail.setFrom(from)) return false;  
  299.         theMail.setNamePass(username,password);  
  300.           
  301.         if(!theMail.sendOut()) return false;  
  302.         return true;  
  303.     }  
  304.       
  305.     /** 
  306.      * 调用sendOut方法完成邮件发送,带附件和抄送 
  307.      * @param smtp 
  308.      * @param from 
  309.      * @param to 
  310.      * @param copyto 
  311.      * @param subject 
  312.      * @param content 
  313.      * @param username 
  314.      * @param password 
  315.      * @param filename 
  316.      * @return 
  317.      */  
  318.     public static boolean sendAndCc(String smtp,String from,String to,String copyto,String subject,String content,String username,String password,String filename) {  
  319.         Mail theMail = new Mail(smtp);  
  320.         theMail.setNeedAuth(true); //需要验证  
  321.           
  322.         if(!theMail.setSubject(subject)) return false;  
  323.         if(!theMail.setBody(content)) return false;  
  324.         if(!theMail.addFileAffix(filename)) return false;   
  325.         if(!theMail.setTo(to)) return false;  
  326.         if(!theMail.setCopyTo(copyto)) return false;  
  327.         if(!theMail.setFrom(from)) return false;  
  328.         theMail.setNamePass(username,password);  
  329.           
  330.         if(!theMail.sendOut()) return false;  
  331.         return true;  
  332.     }  
  333.       
  334. }   

 测试代码:

 

Java代码   收藏代码
  1. public static void main(String[] args){  
  2.     String smtp = "SMTP服务器";  
  3.     String from = "发信人";  
  4.     String to = "收信人";  
  5.     String copyto = "抄送人";  
  6.     String subject = "邮件主题";  
  7.     String content = "邮件内容";  
  8.     String username="用户名";  
  9.     String password="密码";  
  10.     String filename = "附件路径,如:F:\\笔记<a>\\struts2</a>与mvc.txt";  
  11.     Mail.sendAndCc(smtp, from, to, copyto, subject, content, username, password, filename);  
  12. }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值