• 使用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. }  
  • 相关阅读:
    使用事件驱动代替定时任务
    MySql中的有条件插入 insert where
    Mac上“您没有权限来打开应用程序”(Big Sur)
    Java反编译反混淆神器
    Java实现开根号运算(不使用数组和String)
    使用vs code搭建Q#开发环境 (Mac)
    离散傅里叶变换DFT入门
    Java的nanoTime()方法
    Eslint提示const关键字被保留
    myBatis分页插件PageHelper的使用及源码详解
  • 原文地址:https://www.cnblogs.com/apache-x/p/5436705.html
Copyright © 2020-2023  润新知