自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java中如何實(shí)現(xiàn)郵件的發(fā)送包括網(wǎng)頁文件的發(fā)送

開發(fā) 后端
說明:本程序可實(shí)現(xiàn)網(wǎng)頁文件、普通文件的發(fā)送。實(shí)現(xiàn)郵件發(fā)送需要三個jar包的支持:commons-codec-1.3.jar、commons-httpclient-3.0.jar(這兩個jar包實(shí)現(xiàn)抓取互聯(lián)網(wǎng)網(wǎng)頁內(nèi)容)以及mail.jar。

說明:

1、本程序可實(shí)現(xiàn)網(wǎng)頁文件、普通文件的發(fā)送。

2、實(shí)現(xiàn)郵件發(fā)送需要三個jar包的支持:commons-codec-1.3.jar、commons-httpclient-3.0.jar(這兩個jar包實(shí)現(xiàn)抓取互聯(lián)網(wǎng)網(wǎng)頁內(nèi)容)以及mail.jar

具體實(shí)現(xiàn):

一、首先建立MailAuthenticator類,繼承自javax.mail.Authenticator類。此類實(shí)現(xiàn)發(fā)件箱的登陸驗(yàn)證。

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

二、 建立SimpleMailSender類,此類實(shí)現(xiàn)郵件的單發(fā)、群發(fā)等等,是郵件發(fā)送的核心類。

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

三、 建立SimpleMail類,這只是個普通郵件類,主要用來封裝所要發(fā)送的郵件信息。

  1. package com.company.simplemail;  
  2.  
  3. public class SimpleMail {  
  4.   //郵件中的主題  
  5.   private String subject;  
  6.   //郵件的內(nèi)容(正文)  
  7.   private String content;  
  8.   //可根據(jù)需要增加其他郵件元素  
  9.  
  10.   public void setSubject(String subject) {  
  11.     this.subject = subject;  
  12.   }  
  13.  
  14.   public void setContent(String content) {  
  15.     this.content = content;  
  16.   }  
  17.  
  18.   public String getSubject() {  
  19.     return subject;  
  20.   }  
  21.  
  22.   public String getContent() {  
  23.     return content;  
  24.   }  

四、建立ReadHtmlFile類,此類用來讀取網(wǎng)頁文件(當(dāng)然也能讀取普通文件),將文件轉(zhuǎn)換成String用來發(fā)送

  1. package com.company.util;  
  2.  
  3. import java.io.BufferedInputStream;  
  4. import java.io.File;  
  5. import java.io.FileInputStream;  
  6. import java.io.IOException;  
  7. import java.io.InputStream;  
  8. import java.io.InputStreamReader;  
  9. import java.io.Reader;  
  10.  
  11. import org.apache.commons.httpclient.HttpClient;  
  12. import org.apache.commons.httpclient.HttpException;  
  13. import org.apache.commons.httpclient.methods.GetMethod;  
  14.  
  15. public class ReadHtmlFile {  
  16.  
  17.   public static HttpClient client = new HttpClient();  
  18.       
  19.   //讀取普通文件  
  20.   public static String readFile(String filename) {  
  21.     File file = new File(filename);  
  22.     Reader reader = null;  
  23.     StringBuffer stb = new StringBuffer();  
  24.     int charread = 0;  
  25.     char[] temps = new char[100];  
  26.     try {  
  27.       reader = new InputStreamReader(new FileInputStream(file));  
  28.       while ((charread = reader.read(temps)) != -1) {  
  29.         if (charread == temps.length) {  
  30.           stb.append(temps);  
  31.           temps = new char[100];  
  32.           charread = 0;  
  33.         }  
  34.       }  
  35.       stb.append(temps);  
  36.       reader.close();  
  37.     } catch (Exception e) {  
  38.       e.printStackTrace();  
  39.     }  
  40.     String str = stb.toString();   
  41.     return str;  
  42.   }  
  43.  
  44.   /**  
  45.     *      
  46.     * 所要發(fā)送的網(wǎng)頁中,不要使用外聯(lián)樣式,腳本等,  
  47.     * 因?yàn)楦鞔筻]箱后臺的過濾算法會過濾掉css,script等  
  48.     * 樣式用標(biāo)簽style屬性寫  
  49.     * 圖片、鏈接必須使用絕對地址 (http://.....) 形式才能接收顯示  
  50.     * */ 
  51.   public static String getSource(String url) {  
  52.  
  53.     GetMethod method = new GetMethod(url);  
  54.  
  55.     try {  
  56.       client.executeMethod(method);  
  57.     } catch (HttpException e) {  
  58.       e.printStackTrace();  
  59.     } catch (IOException e) {  
  60.       e.printStackTrace();  
  61.     }  
  62.     InputStream in = null;  
  63.     try {  
  64.       in = method.getResponseBodyAsStream();  
  65.     } catch (IOException e1) {  
  66.  
  67.       // e1.printStackTrace();  
  68.     }  
  69.     in = new BufferedInputStream(in);  
  70.     Reader r = new InputStreamReader(in);  
  71.     int c;  
  72.     StringBuffer buffer = new StringBuffer();  
  73.  
  74.     try {  
  75.       while ((c = r.read()) != -1)  
  76.         buffer.append((char) c);  
  77.     } catch (IOException e) {  
  78.       e.printStackTrace();  
  79.     }  
  80.     try {  
  81.       in.close();  
  82.     } catch (IOException e) {  
  83.       e.printStackTrace();  
  84.     }  
  85.     method.releaseConnection();  
  86.  
  87.     return buffer.toString();  
  88.   }   
  89. }  

五、建立測試類,可以發(fā)送郵件了?。。?/p>

  1. package com.company.simplemail;  
  2.  
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.  
  6. import org.junit.Test;  
  7.  
  8. import com.company.util.ReadHtmlFile;  
  9.  
  10. public class MailTest {  
  11.   /**  
  12.     * 單發(fā)  
  13.     * */ 
  14.   @Test 
  15.   public void testSingleSend(){  
  16.     SimpleMail sm=new SimpleMail();  
  17.     sm.setSubject("第一封郵件");  
  18.     String str = ReadHtmlFile.getSource("http://www.baidu.com");  
  19.     //String str = ReadHtmlFile.readFile("這里填寫你需要發(fā)送的本地文件路徑");  
  20.     System.out.println(str);  
  21.     sm.setContent(str);  
  22.     SimpleMailSender sms=new SimpleMailSender(""這里填寫你的發(fā)件箱","這里填寫你的發(fā)件箱密碼");  
  23.     try {  
  24.       sms.send("這里需要填寫接收郵件的郵箱", sm);  
  25.       System.out.println("執(zhí)行完成??!");  
  26.     } catch (Exception e) {  
  27.       e.printStackTrace();  
  28.     }  
  29.   }  
  30.       
  31.       
  32.   /**  
  33.     * 群發(fā)  
  34.     *      
  35.     * */ 
  36.   @Test 
  37.   public void testMassSend(){  
  38.     SimpleMail sm=new SimpleMail();  
  39.     sm.setSubject("第一封郵件");  
  40.     String str = ReadHtmlFile.getSource("http://www.baidu.com");  
  41.     //String str = ReadHtmlFile.readFile("這里填寫需要發(fā)送的本地文件路徑");  
  42.     System.out.println(str);  
  43.     sm.setContent(str);  
  44.     SimpleMailSender sms=new SimpleMailSender("這里填寫你的發(fā)件箱","這里填寫你的發(fā)件箱密碼");  
  45.     List<String> recipients=new ArrayList<String>();  
  46.     recipients.add("這里需要填寫接收郵件的郵箱");  
  47.     recipients.add("這里需要填寫接收郵件的郵箱");  
  48.     recipients.add("這里需要填寫接收郵件的郵箱");  
  49.     recipients.add("這里需要填寫接收郵件的郵箱");  
  50.     try {  
  51.       sms.send(recipients, sm);  
  52.       System.out.println("執(zhí)行完成??!");  
  53.     } catch (Exception e) {  
  54.       e.printStackTrace();  
  55.     }  
  56.   }  
  57. }  

最后再次強(qiáng)調(diào):

1,所要發(fā)送的網(wǎng)頁中,不要使用外聯(lián)樣式,腳本等,因?yàn)楦鞔筻]箱后臺的過濾算法會過濾掉css,script等。

2,樣式用標(biāo)簽style屬性寫。

3, 圖片、鏈接必須使用絕對地址 (http://.....) 形式才能接收顯示。

4,一般用于發(fā)送的網(wǎng)頁文件都是按上面說的要求,自己另外制作的,專門用于郵件發(fā)送的網(wǎng)頁。在互聯(lián)網(wǎng)上抓取的網(wǎng)頁發(fā)送后,一般都不能在收件箱中完美的顯示。

原文鏈接:http://gaoqifang.blog.51cto.com/2270113/758306

【編輯推薦】

  1. Java generic中通配符的幾點(diǎn)理解
  2. Java中泛型創(chuàng)建數(shù)組的總結(jié)
  3. Java Socket超時淺析
  4. Java Socket重要參數(shù)講解
  5. 深入理解Java對象序列化
責(zé)任編輯:林師授 來源: gaoqifang的博客
相關(guān)推薦

2011-10-31 09:35:50

2022-09-02 15:08:02

Python郵件發(fā)送

2009-12-09 15:23:36

PHP mail()函

2009-12-02 16:31:54

PHP發(fā)送郵件

2009-09-03 17:23:45

C#發(fā)送郵件

2023-12-06 11:10:08

2024-09-05 08:58:37

2017-04-26 09:00:23

Python發(fā)送郵件腳本

2011-01-19 14:32:17

Thunderbird設(shè)置

2020-07-14 09:58:01

Python開發(fā)工具

2009-12-02 16:38:26

PHP發(fā)送郵件函數(shù)

2009-09-03 17:31:34

C#發(fā)送郵件

2009-08-04 09:39:11

2022-01-28 15:04:57

Python日志郵件

2020-08-05 08:30:25

Spring BootJavaSE代碼

2015-12-08 09:16:32

JavaMail郵件發(fā)送總結(jié)

2009-08-21 09:44:44

C#發(fā)送Email郵件

2020-07-27 16:52:59

Mailmerge定制郵件系統(tǒng)應(yīng)用

2010-05-06 09:52:11

Oracle發(fā)送郵件

2021-06-11 06:54:34

程序郵件Django
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號