zoukankan      html  css  js  c++  java
  • 使用JavaMail发送邮件

    一、背景

      我们在实际开发中,常常会遇到需要使用java代码进行发送邮件的需求,我们可以通过这种方式向用户推送通知等。

    二、Java代码

      1 package com.hafiz.zhang.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 } 

    测试代码如下:

     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 }
  • 相关阅读:
    libgdx学习记录21——Box2d物理引擎之碰撞Contact、冲量Impulse、关节Joint
    libgdx学习记录20——多线程MultiThread资源处理
    上google的方法
    libgdx学习记录19——图片动态打包PixmapPacker
    libgdx学习记录18——Box2d物理引擎
    libgdx学习记录17——照相机Camera
    libgdx学习记录16——资源加载器AssetManager
    libgdx学习记录15——音乐Music播放
    "_ACFacebookAppIdKey"
    IPhone之模型对象归档
  • 原文地址:https://www.cnblogs.com/hafiz/p/5492501.html
Copyright © 2011-2022 走看看