Java郵件發送執行個體

來源:互聯網
上載者:User

又一個新的項目啟動了,雖說目前還處於系統設計階段,但從當前的系統需求來看,其中有一項功能就是通過Web方式發送系統郵件。還是提前做好準備吧,還說不錯,花了一下午的時間,把封裝了一個MailService類,直接調用即可。此篇僅介紹用javamail實現發送郵件功能,其中涉及smtp認證,郵件附件發送,及HTML內容郵件等。

系統內容:Windows XP SP3

開發環境:Eclipse 3.5/JDK 1.6/Struts2/Tiles

測試載入器:Firefox 3.6/IE 8

測試郵箱:網易郵箱、IBM Lotus Notes郵箱

所需JAR包:mail.jar(包含MailService.java類檔案)  一  二

MailService.java類檔案(經過封裝的發送郵件類):

  1. package com.olympus.Util;  
  2.  
  3. import java.util.Date;  
  4. import java.util.Properties;  
  5.  
  6. import javax.activation.DataHandler;  
  7. import javax.activation.FileDataSource;  
  8. import javax.mail.Authenticator;  
  9. import javax.mail.Multipart;  
  10. import javax.mail.PasswordAuthentication;  
  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. import javax.mail.internet.MimeUtility;  
  18.  
  19. public class MailService extends Authenticator {  
  20.     private String m_username = null;   
  21.     private String m_userpass = null;   
  22.       
  23.     public void setUsername(String username) {   
  24.         m_username = username;   
  25.     }   
  26.       
  27.     public void setUserpass(String userpass) {   
  28.         m_userpass = userpass;   
  29.     }   
  30.       
  31.     public MailService(String username, String userpass) {   
  32.         super();   
  33.         setUsername(username);   
  34.         setUserpass(userpass);   
  35.     }   
  36.       
  37.     public PasswordAuthentication getPasswordAuthentication() {   
  38.         return new PasswordAuthentication(m_username,m_userpass);   
  39.     }   
  40.       
  41.     public static void sendmail(  
  42.             String subject, String from,   
  43.             String[] to, String text,   
  44.             String[] filenames,String mimeType) throws Exception   
  45.     {   
  46.         Properties props = new Properties();   
  47.         String smtp = "smtp.163.com";               //設定發送郵件所用到的SMTP伺服器位址  
  48.         String smtpname = "username";               //設定登入SMTP伺服器的使用者名稱  
  49.         String smtppassword = "password";           //設定登入SMTP伺服器的密碼  
  50.           
  51.         Session mailSession;                        //郵件會話對象   
  52.         MimeMessage mimeMsg;                        //MIME郵件對象   
  53.         props = java.lang.System.getProperties();   //獲得系統屬性對象   
  54.           
  55.         props.put("mail.smtp.host", smtp);          //設定SMTP主機   
  56.         props.put("mail.smtp.auth", "true"); //連結到SMTP伺服器是否需要使用者名稱和密碼驗證   
  57.           
  58.         //到伺服器驗證發送的使用者名稱和密碼是否正確   
  59.         MailService myEmailAuther = new MailService(smtpname, smtppassword);  
  60.         //設定郵件會話  
  61.         mailSession = Session.getInstance(props, (Authenticator) myEmailAuther);    
  62.         Transport transport = mailSession.getTransport("smtp");     //設定傳輸協議   
  63.         mimeMsg = new MimeMessage(mailSession);                     //設定from、to等資訊  
  64.           
  65.         InternetAddress sentFrom = new InternetAddress(from);   
  66.         mimeMsg.setFrom(sentFrom); //設定發送人地址   
  67.         InternetAddress[] sendTo = new InternetAddress[to.length];   
  68.           
  69.         for (int i = 0; i < to.length; i++) {   
  70.             //System.out.println("發送到:" + to[i]);   
  71.             sendTo[i] = new InternetAddress(to[i]);   
  72.         }   
  73.           
  74.         mimeMsg.setRecipients(MimeMessage.RecipientType.TO, sendTo);   
  75.         mimeMsg.setSubject(subject, "utf-8");   
  76.         MimeBodyPart messageBodyPart1 = new MimeBodyPart();   
  77.         //messageBodyPart.setText(UnicodeToChinese(text));   
  78.         messageBodyPart1.setContent(text, mimeType);   
  79.         Multipart multipart = new MimeMultipart();//附件傳輸格式   
  80.         multipart.addBodyPart(messageBodyPart1);  
  81.           
  82.         for (int i = 0; i < filenames.length; i++) {   
  83.             MimeBodyPart messageBodyPart2 = new MimeBodyPart();    
  84.             String filename = filenames[i].split(",")[0];           //選擇出每一個附件名   
  85.             String displayname = filenames[i].split(",")[1];   
  86.             FileDataSource fds = new FileDataSource(filename);      //得到資料來源   
  87.             //得到附件本身並至入BodyPart   
  88.             messageBodyPart2.setDataHandler(new DataHandler(fds));  
  89.             //得到檔案名稱同樣至入BodyPart   
  90.             //messageBodyPart2.setFileName(displayname);   
  91.             //messageBodyPart2.setFileName(fds.getName());   
  92.             messageBodyPart2.setFileName(MimeUtility.encodeText(displayname));   
  93.             multipart.addBodyPart(messageBodyPart2);   
  94.         }  
  95.           
  96.         mimeMsg.setContent(multipart);   
  97.         mimeMsg.setSentDate(new Date());    //設定信件頭的發送日期   
  98.         mimeMsg.saveChanges();    
  99.         Transport.send(mimeMsg);            //發送郵件  
  100.         transport.close();   
  101.     }   

在Action中調用

  1. @Action(value="//",  
  2.     results={@Result(name="success", location="index",type="tiles")})  
  3. public String Index(){  
  4.     String sendTo[] = {"liang.xu@ohc.olympus.com.hk"};  
  5.     String fileNames[] = {};  
  6.     try {  
  7.         MailService.sendmail(  
  8.                 "JavaWeb發送郵件測試", "Alex Xu<xht555@163.com>",   
  9.                 sendTo, "JavaWeb發送郵件測試",   
  10.                 fileNames, "text/html;charset=utf-8");  
  11.     } catch (Exception e) {  
  12.         e.printStackTrace();  
  13.     }  
  14.           
  15.     return SUCCESS;  
  16. 測試結果
  17.  我的網易郵箱顯示郵件發送成功:② 我的工作郵箱(IBM Lotus Notes)成功接收到來自網易郵箱發出的郵件:


 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.