日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
利用Java實(shí)現(xiàn)電子郵件的批量發(fā)送

  JAVA MAIL是利用現(xiàn)有的郵件賬戶(hù)發(fā)送郵件的工具,比如說(shuō),我在網(wǎng)易注冊(cè)一個(gè)郵箱賬戶(hù),通過(guò)JAVA Mail的操控,我可以不親自登錄網(wǎng)易郵箱,讓程序自動(dòng)的使用網(wǎng)易郵箱發(fā)送郵件。這一機(jī)制被廣泛的用在注冊(cè)激活和垃圾郵件的發(fā)送等方面。進(jìn)行下載,并將mail.jar添加到classpath即可。如果你使用的是JAVA EE SDK,則可以在C:glassfishv3glassfishmodulesmail.jar找到所需的jar包,同樣需要添加的classpath。

成都創(chuàng)新互聯(lián)公司2013年成立,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元秦皇島做網(wǎng)站,已為上家服務(wù),為秦皇島各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):028-86922220

  JAVA郵件發(fā)送的大致過(guò)程是這樣的的:

  1、構(gòu)建一個(gè)繼承自javax.mail.Authenticator的具體類(lèi),并重寫(xiě)里面的getPasswordAuthentication()方法。此類(lèi)是用作登錄校驗(yàn)的,以確保你對(duì)該郵箱有發(fā)送郵件的權(quán)利。

  2、構(gòu)建一個(gè)properties文件,該文件中存放SMTP服務(wù)器地址等參數(shù)。

  3、通過(guò)構(gòu)建的properties文件和javax.mail.Authenticator具體類(lèi)來(lái)創(chuàng)建一個(gè)javax.mail.Session。Session的創(chuàng)建,就相當(dāng)于登錄郵箱一樣。剩下的自然就是新建郵件。

  4、構(gòu)建郵件內(nèi)容,一般是javax.mail.internet.MimeMessage對(duì)象,并指定發(fā)送人,收信人,主題,內(nèi)容等等。

  5、使用javax.mail.Transport工具類(lèi)發(fā)送郵件。

  下面是我封裝的代碼,注釋也比較詳細(xì)。呼呼~(yú)~

  1、首先是繼承自javax.mail.Authenticator的一個(gè)具體類(lèi)。getPasswordAuthentication()方法也就是構(gòu)建一個(gè)PasswordAuthentication對(duì)象并返回,有點(diǎn)費(fèi)解JAVA Mail這樣的設(shè)計(jì)意圖,可能是javax.mail.Authenticator為我們提供了附加的保證安全的驗(yàn)證措施吧。

 
 
 
  1.   package com.mzule.simplemail;  
  2.   import javax.mail.Authenticator;  
  3.   import javax.mail.PasswordAuthentication;  
  4.   /**  
  5.   * 服務(wù)器郵箱登錄驗(yàn)證  
  6.   *  
  7.   * @author MZULE  
  8.   *  
  9.   */ 
  10.   public class MailAuthenticator extends Authenticator {  
  11.   /**  
  12.   * 用戶(hù)名(登錄郵箱)  
  13.   */ 
  14.   private String username;  
  15.   /**  
  16.   * 密碼  
  17.   */ 
  18.   private String password;  
  19.   /**  
  20.   * 初始化郵箱和密碼  
  21.   *  
  22.   * @param username 郵箱  
  23.   * @param password 密碼  
  24.   */ 
  25.   public MailAuthenticator(String username, String password) {  
  26.   this.username = username;  
  27.   this.password = password;  
  28.   }  
  29.   String getPassword() {  
  30.   return password;  
  31.   }  
  32.   @Override 
  33.   protected PasswordAuthentication getPasswordAuthentication() {  
  34.   return new PasswordAuthentication(username, password);  
  35.   }  
  36.   String getUsername() {  
  37.   return username;  
  38.   }  
  39.   public void setPassword(String password) {  
  40.   this.password = password;  
  41.   }  
  42.   public void setUsername(String username) {  
  43.   this.username = username;  
  44.   }  
  45.   } 

  2、郵件發(fā)送類(lèi),剩下的步驟都是在這個(gè)類(lèi)實(shí)現(xiàn)的。代碼中的SimpleMail是封裝了郵件主題和內(nèi)容的一個(gè)POJO。覺(jué)得在一個(gè)方法參數(shù)中既包含主題又包含內(nèi)容,不太合適,故重載了此方法。還有就是因?yàn)榇蠖鄶?shù)郵箱的SMTP服務(wù)器地址都是可以通過(guò)郵箱地址算出來(lái),簡(jiǎn)單起見(jiàn),提供了一個(gè)不需要SMTP服務(wù)器地址的構(gòu)造器。

 
 
 
  1.   package com.mzule.simplemail;  
  2.   import java.util.List;  
  3.   import java.util.Properties;  
  4.   import javax.mail.MessagingException;  
  5.   import javax.mail.Session;  
  6.   import javax.mail.Transport;  
  7.   import javax.mail.internet.AddressException;  
  8.   import javax.mail.internet.InternetAddress;  
  9.   import javax.mail.internet.MimeMessage;  
  10.   import javax.mail.internet.MimeMessage.RecipientType;  
  11.   /**  
  12.   * 簡(jiǎn)單郵件發(fā)送器,可單發(fā),群發(fā)。  
  13.   *  
  14.   * @author MZULE  
  15.   *  
  16.   */ 
  17.   public class SimpleMailSender {  
  18.   /**  
  19.   * 發(fā)送郵件的props文件  
  20.   */ 
  21.   private final transient Properties props = System.getProperties();  
  22.   /**  
  23.   * 郵件服務(wù)器登錄驗(yàn)證  
  24.   */ 
  25.   private transient MailAuthenticator authenticator;  
  26.   /**  
  27.   * 郵箱session  
  28.   */ 
  29.   private transient Session session;  
  30.   /**  
  31.   * 初始化郵件發(fā)送器  
  32.   *  
  33.   * @param smtpHostName  
  34.   * SMTP郵件服務(wù)器地址  
  35.   * @param username  
  36.   * 發(fā)送郵件的用戶(hù)名(地址)  
  37.   * @param password  
  38.   * 發(fā)送郵件的密碼  
  39.   */ 
  40.   public SimpleMailSender(final String smtpHostName, final String username,  
  41.   final String password) {  
  42.   init(username, password, smtpHostName);  
  43.   }  
  44.   /**  
  45.   * 初始化郵件發(fā)送器  
  46.   *  
  47.   * @param username  
  48.   * 發(fā)送郵件的用戶(hù)名(地址),并以此解析SMTP服務(wù)器地址  
  49.   * @param password  
  50.   * 發(fā)送郵件的密碼  
  51.   */ 
  52.   public SimpleMailSender(final String username, final String password) {  
  53.   //通過(guò)郵箱地址解析出smtp服務(wù)器,對(duì)大多數(shù)郵箱都管用  
  54.   final String smtpHostName = "smtp." + username.split("@")[1];  
  55.   init(username, password, smtpHostName);  
  56.   }  
  57.   /**  
  58.   * 初始化  
  59.   *  
  60.   * @param username  
  61.   * 發(fā)送郵件的用戶(hù)名(地址)  
  62.   * @param password  
  63.   * 密碼  
  64.   * @param smtpHostName  
  65.   * SMTP主機(jī)地址  
  66.   */ 
  67.   private void init(String username, String password, String smtpHostName) {  
  68.   // 初始化props  
  69.   props.put("mail.smtp.auth", "true");  
  70.   props.put("mail.smtp.host", smtpHostName);  
  71.   // 驗(yàn)證  
  72.   authenticator = new MailAuthenticator(username, password);  
  73.   // 創(chuàng)建session  
  74.   session = Session.getInstance(props, authenticator);  
  75.   }  
  76.   /**  
  77.   * 發(fā)送郵件  
  78.   *  
  79.   * @param recipient  
  80.   * 收件人郵箱地址  
  81.   * @param subject  
  82.   * 郵件主題  
  83.   * @param content  
  84.   * 郵件內(nèi)容  
  85.   * @throws AddressException  
  86.   * @throws MessagingException  
  87.   */ 
  88.   public void send(String recipient, String subject, Object content)  
  89.   throws AddressException, MessagingException {  
  90.   // 創(chuàng)建mime類(lèi)型郵件  
  91.   final MimeMessage message = new MimeMessage(session);  
  92.   // 設(shè)置發(fā)信人  
  93.   message.setFrom(new InternetAddress(authenticator.getUsername()));  
  94.   // 設(shè)置收件人  
  95.   message.setRecipient(RecipientType.TO, new InternetAddress(recipient));  
  96.   // 設(shè)置主題  
  97.   message.setSubject(subject);  
  98.   // 設(shè)置郵件內(nèi)容  
  99.   message.setContent(content.toString(), "text/html;charset=utf-8");  
  100.   // 發(fā)送  
  101.   Transport.send(message);  
  102.   }  
  103.   /**  
  104.   * 群發(fā)郵件  
  105.   *  
  106.   * @param recipients  
  107.   * 收件人們  
  108.   * @param subject  
  109.   * 主題  
  110.   * @param content  
  111.   * 內(nèi)容  
  112.   * @throws AddressException  
  113.   * @throws MessagingException  
  114.   */ 
  115.   public void send(List recipients, String subject, Object content)  
  116.   throws AddressException, MessagingException {  
  117.   // 創(chuàng)建mime類(lèi)型郵件  
  118.   final MimeMessage message = new MimeMessage(session);  
  119.   // 設(shè)置發(fā)信人  
  120.   message.setFrom(new InternetAddress(authenticator.getUsername()));  
  121.   // 設(shè)置收件人們  
  122.   final int num = recipients.size();  
  123.  InternetAddress[] addresses = new InternetAddress[num];  
  124.   for (int i = 0; i 
  125.   addresses[i] = new InternetAddress(recipients.get(i));  
  126.   }  
  127.   message.setRecipients(RecipientType.TO, addresses);  
  128.   // 設(shè)置主題  
  129.   message.setSubject(subject);  
  130.   // 設(shè)置郵件內(nèi)容  
  131.   message.setContent(content.toString(), "text/html;charset=utf-8");  
  132.   // 發(fā)送  
  133.   Transport.send(message);  
  134.   }  
  135.   /**  
  136.   * 發(fā)送郵件  
  137.   *  
  138.   * @param recipient  
  139.   * 收件人郵箱地址  
  140.   * @param mail  
  141.   * 郵件對(duì)象  
  142.   * @throws AddressException  
  143.   * @throws MessagingException  
  144.  */ 
  145.   public void send(String recipient, SimpleMail mail)  
  146.   throws AddressException, MessagingException {  
  147.   send(recipient, mail.getSubject(), mail.getContent());  
  148.   }  
  149.   /**  
  150.   * 群發(fā)郵件  
  151.   *  
  152.   * @param recipients  
  153.   * 收件人們  
  154.   * @param mail  
  155.  * 郵件對(duì)  
  156.  * @throws AddressException  
  157.   * @throws MessagingException  
  158.   */ 
  159.   public void send(List recipients, SimpleMail mail)  
  160.   throws AddressException, MessagingException {  
  161.   send(recipients, mail.getSubject(), mail.getContent());  
  162.   }  
  163.   } 

  3、調(diào)用上面的郵箱發(fā)送器,可以構(gòu)建一個(gè)工廠(chǎng)類(lèi),工廠(chǎng)類(lèi)可以封裝創(chuàng)建的過(guò)程,所以通過(guò)讀配置文件獲取郵箱用戶(hù)名,密碼都會(huì)變得十分方便。下面的代碼是我在寫(xiě)觀察者模式的時(shí)候?qū)懙?,只是?jiǎn)單演示了工廠(chǎng)類(lèi)。

 
 
 
  1.  package com.mzule.dp.observer.factory;  
  2.   import com.mzule.dp.observer.constant.MailSenderType;  
  3.   import com.mzule.simplemail.SimpleMailSender;  
  4.   /**  
  5.   * 發(fā)件箱工廠(chǎng)  
  6.   *  
  7.   * @author MZULE  
  8.   *  
  9.   */ 
  10.   public class MailSenderFactory {  
  11.   /**  
  12.   * 服務(wù)郵箱  
  13.   */ 
  14.   private static SimpleMailSender serviceSms = null;  
  15.   /**  
  16.   * 獲取郵箱  
  17.   *  
  18.   * @param type 郵箱類(lèi)型  
  19.   * @return 符合類(lèi)型的郵箱  
  20.   */ 
  21.   public static SimpleMailSender getSender(MailSenderType type) {  
  22.   if (type == MailSenderType.SERVICE) {  
  23.   if (serviceSms == null) {  
  24.   serviceSms = new SimpleMailSender("invisible@126.com",  
  25.   "hidden");  
  26.   }  
  27.   return serviceSms;  
  28.   }  
  29.   return null;  
  30.   }  
  31.   } 

  4、發(fā)送郵件,還是觀察者模式DEMO里面的代碼,呼呼。

 
 
 
  1.   package com.mzule.dp.observer.observer;  
  2.   import java.util.ArrayList;  
  3.   import java.util.List;  
  4.   import java.util.Observable;  
  5.   import java.util.Observer;  
  6.   import javax.mail.MessagingException;  
  7.   import javax.mail.internet.AddressException;  
  8.   import com.mzule.dp.observer.constant.MailSenderType;  
  9.   import com.mzule.dp.observer.factory.MailSenderFactory;  
  10.   import com.mzule.dp.observer.po.Product;  
  11.   import com.mzule.simplemail.SimpleMailSender;  
  12.   public class ProductPriceObserver implements Observer {  
  13.   @Override 
  14.   public void update(Observable obj, Object arg) {  
  15.   Product product = null;  
  16.   if (obj instanceof Product) {  
  17.   product = (Product) obj;  
  18.   }  
  19.   if (arg instanceof Float) {  
  20.   Float price = (Float) arg;  
  21.  Float decrease = product.getPrice() - price;  
  22.   if (decrease >0) {  
  23.   // 發(fā)送郵件  
  24.   SimpleMailSender sms = MailSenderFactory  
  25.   .getSender(MailSenderType.SERVICE);  
  26.   List recipients = new ArrayList();  
  27.   recipients.add("invisible@qq.com");  
  28.   recipients.add("invisible@gmail.com");  
  29.   try {  
  30.   for (String recipient : recipients) {  
  31.   sms.send(recipient, "價(jià)格變動(dòng)", "您關(guān)注的物品" 
  32.   + product.getName() + "降價(jià)了,由" 
  33.   + product.getPrice() + "元降到" + price + "元,降幅達(dá)" 
  34.   + decrease + "元人民幣。趕快購(gòu)物吧。");  
  35.   }  
  36.   } catch (AddressException e) {  
  37.   e.printStackTrace();  
  38.   } catch (MessagingException e) {  
  39.   e.printStackTrace();  
  40.   }  
  41.   }  
  42.   }  
  43.   }  
  44.   } 

  5、剩下的就是去查看郵件是否發(fā)送成功了。呼呼~(yú)~

原文鏈接:http://www.cnblogs.com/codeplus/archive/2011/10/30/2229391.html


分享題目:利用Java實(shí)現(xiàn)電子郵件的批量發(fā)送
文章分享:http://www.dlmjj.cn/article/cdijhjp.html