麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網站 > Apache > 正文

用 Apache James 搭建郵件服務器來收發郵件實踐

2024-08-27 18:31:00
字體:
來源:轉載
供稿:網友
Apache James 簡稱 James, 是 Java Apache Mail Enterprise Server的縮寫。James 是100%基于Java的電子郵件服務器。它是一種獨立的郵件服務器,并提供了一個完整的電子郵件解決方案,用來收、發電子郵件。

 

       本文不贅述James服務器的參數細節,這個以后有機會再詳細討論,這里先從服務器搭建開始,用搭建的服務器收、發電子郵件來熟悉一下Apache James。本人也是新手,希望能得到各位高手的指點,使大家能悟到進階的方向。

 

       開始之前,先聲明一下本文操作的系統環境:

       1. JDK 6u10b

       2. JMail API v1.4.2

       3. JAF API v1.1(JavaBean Activation Framework)

       4. Apache James 2.3.1

       5. Eclipse 3.4 for J2EE Developers

       6. Windows 2000 Server sp4

 

    

       

       1。請下載安裝JDK,并設置好其環境變量:JAVA_HOME=…… 、PATH=…… 、CLASSPATH=…… Eclipse 3.4 是目前的最新版本,可以從http://www.eclipse.org/下載。

      

       2。請下載JMail API、JAF API,可以在www.java.sun.com找到他們,找不到也不要緊,本文附件示例代碼免費提供一份(^_^)。

 

       3。Apache James 的官方網站為:http://james.apache.org/,當前 Server 的最新版為 2.3.1版. 安裝非常簡單,下載后得到james-binary-2.3.1.zip 文件,解壓后即可。這里假設解壓到D盤(D:/james-2.3.1),目錄結構如下:

      

       D:/james-2.3.1

               |--- apps

               |--- bin

               |

       …………

 

       4。啟動 James 服務器

       雙擊或在命令行下執行D:/james-2.3.1/bin 目錄下的 run.bat文件,即可啟動 James 服務器。

 

       啟動后能在控制臺看到如下信息,說明啟動成功:

Java代碼 
  1. Using PHOENIX_HOME: D:/james-2.3.1   
  2. Using PHOENIX_TMPDIR: D:/james-2.3.1/temp   
  3. Using JAVA_HOME: D:/Java/jdk1.6.0_10   
  4.   
  5. Phoenix 4.2   
  6.   
  7. James Mail Server 2.3.1   
  8. Remote Manager Service started plain:4555   
  9. POP3 Service started plain:110   
  10. SMTP Service started plain:25   
  11. NNTP Service started plain:119   
  12. FetchMail Disabled  

   

      

       要關閉 James 服務,請使用 Ctrl + C

 

       說明:啟動前請確保您的JDK環境變量如JAVA_HOME等已經設置好;James 啟動時,其SMTP 服務默認在 25 端口啟動,POP3 服務默認在 110 端口啟動, NNTP 服務默認在 119 端口啟動, 請確保這些端口未被占用。比如本系統下就已經安裝了Microsoft的 SMTP 服務,造成 James無法啟動,解決方法為:開始--->設置--->控制面板--->管理工具--->服務,打開后找到“Simple Mail Transport Protocol(SMTP)”服務項,關閉即可。

 

     

       5。配置服務

       服務器啟動后會在本機配置一個默認的服務,這可以用來在本機上本服務器范圍內收發郵件,但是郵件發不到163等外網郵箱。我們這里關注的重點就是配置一個能發到外網如163這樣的郵箱的郵件,這樣才有價值。不過由于本人是在本機上測試,一時不能獲取公司的域名參數,無法測試接收外網郵箱(如163)的郵件,見晾,不過做法都是一樣的,至少我們可以向外網郵箱發送郵件,局域網內可以收、發郵件。

      

        打開D:/james-2.3.1/apps/james/SAR-INF 下的 config.xml 文件,初次啟動James之前,不會有這個文件,只有當James服務啟動一次之后才自動構件該文件。

      

        找到

Java代碼 
  1. ……   
  2. <postmaster>Postmaster@localhost</postmaster>   
  3. ……   
  4. <servernames autodetect="true" autodetectIP="true">   
  5.     <servername>localhost</servername>   
  6. </servernames>   
  7. ……   

  

  

        把localhost該成你自己想要的郵箱域名, 把自動探測IP屬性設置為“false”這里假設改成 zhaipuhong.com 如果開了一個帳號 zph ,那么他的郵件地址就是 [email protected] (^_^)修改結果如下:

 

Xml代碼 
  1. ……   
  2. <postmaster>[email protected]</postmaster>   
  3. ……   
  4. <servernames autodetect="false" autodetectIP="false">   
  5.     <servername>zhaipuhong.com</servername>   
  6. </servernames>   
  7. ……  

   

        找到

Xml代碼 
  1. <mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor">   
  2.     <processor> relay-denied </processor>   
  3.     <notice>550 - Requested action not taken: relaying denied</notice>   
  4. </mailet>  

   

        將其注釋,結果如下:

Xml代碼 
  1. <!--mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor">   
  2.     <processor> relay-denied </processor>   
  3.     <notice>550 - Requested action not taken: relaying denied</notice>   
  4. </mailet-->  

    

         找到下面元素,去掉其注釋

Xml代碼 
  1. <authRequired>true</authRequired>  

  

 

         這樣郵箱訪問需要帳號驗證,你不希望別人用你的帳號收發消息吧……^_^

        

         如此,James服務配置已經完成。

 

 

        6。創建郵件帳號

        創建郵件帳號后,就可以用來收發郵件了。James的賬號管理是通過基于Telnet客戶機的遠程管理器,這點頗為不爽,尤其是我的操作系統下的命令行控制臺是不顯示telnet命令輸入字符的,經常出錯。

 

        現在進入命令行控制臺,在telnet localhsot 4555 進入James管理器,操作如下:

C代碼 
  1. C:/Documents and Settings/db2admin>telnet localhost 4555   

  

 

        將進入

C代碼 
  1. JAMES Remote Administration Tool 2.3.1 Please enter your login and password Login id:  

   

 

        默認的登陸id 為root 密碼也為 root ,登陸成功后結果如下:

C代碼 
  1. JAMES Remote Administration Tool 2.3.1   
  2. Please enter your login and password   
  3. Login id:   
  4. Password:   
  5. Welcome root. HELP for a list of commands    

 

       創建新用戶的命令是:adduser username password

    這里創建了兩個賬戶來作為演示使用: zhaipuhong/zhangpuhong ;      zph/zph

 

      說明:你可以輸入help來獲取命令幫助

C代碼 
  1. help display this help 顯示幫助信息   
  2. listusers display existing accounts 顯示現有賬戶   
  3. countusers display the number of existing accounts 顯示現有賬戶數量   
  4. adduser [username] [password] add a new user 添加一個新用戶   
  5. verify [username] verify if specified user exist 核實指定用戶是否存在   
  6. deluser [username] delete existing user 刪除存在的用戶   
  7. setpassword [username] [password] sets a user's password 設置用戶密碼   
  8. setalias [user] [alias] locally forwards all email for 'user' to 'alias' 設置郵箱別名   
  9. showalias [username] shows a user's current email alias 顯示別名   
  10. unsetalias [user] unsets an alias for 'user' 刪除用戶別名   
  11. setforwarding [username] [emailaddress] forwards a user's email to another email address 轉發用戶的電子郵件地址到另一個電子郵件地址   
  12. showforwarding [username] shows a user's current email forwarding 顯示用戶的當前郵件轉發   
  13. unsetforwarding [username] emoves a forward 刪除轉發   
  14. user [repositoryname] change to another user repository 改變另一個用戶庫   
  15. shutdown kills the current JVM (convenient when James is run as a daemon)關閉當前的服務   
  16. quit close connection 關閉連接  

  

 

 

 

 

      賬號創建成功后,使用quit退出管理器?,F在我們可以開始部署我們的JMail應用了。

 

 

      7。用James收發郵件

      現在我們來寫兩個簡單的程序來體驗一下如何使用James收發郵件。請注意,示例程序是通用的。關于如何用JMail API收發郵件,這里不詳細介紹,如果還沒有接觸過請參考一下我之前的文章:

      http://zhaipuhong.javaeye.com/admin/blogs/213005

     

      關于接受郵件部分,我們在代碼中通過注釋來描述。另外我們來回憶一下上述步驟配置James服務器的參數:

      1。smtp 服務器:192.168.1.98或者localhost     192.168.1.98是我的局域網IP,由于我James服務就裝在我的機器上,所以我可以用localhost

      2。兩個郵件帳號:zhaipuhong/zhaipuhong   對應郵箱地址: [email protected]

                                zph/zph                            對應郵箱地址: [email protected]

      注意:郵箱域名我們配置的是zhaipuhong.com

 

      示例程序:

 

Java代碼
  1. package com.zhaipuhong.j2ee.jmail;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.Properties;  
  5.   
  6. import javax.mail.Authenticator;  
  7. import javax.mail.Folder;  
  8. import javax.mail.Message;  
  9. import javax.mail.MessagingException;  
  10. import javax.mail.PasswordAuthentication;  
  11. import javax.mail.Session;  
  12. import javax.mail.Store;  
  13. import javax.mail.Transport;  
  14. import javax.mail.internet.InternetAddress;  
  15. import javax.mail.internet.MimeMessage;  
  16. import javax.mail.internet.MimeUtility;  
  17.   
  18. public class HelloJMail {  
  19.       
  20.     //發送郵件  
  21.     public static void sendMail() {  
  22.         //String host = "192.168.1.98"; // 指定的smtp服務器,本機的局域網IP  
  23.         String host = "localhost"// 本機smtp服務器  
  24.         //String host = "smtp.163.com"; // 163的smtp服務器  
  25.         String from = "[email protected]"// 郵件發送人的郵件地址  
  26.         String to = "[email protected]"// 郵件接收人的郵件地址  
  27.         final String username = "zhaipuhong";  //發件人的郵件帳戶  
  28.         final String password = "zhaipuhong";   //發件人的郵件密碼  
  29.   
  30.         // 創建Properties 對象  
  31.         Properties props = System.getProperties();  
  32.   
  33.         // 添加smtp服務器屬性  
  34.         props.put("mail.smtp.host", host);  
  35.         props.put("mail.smtp.auth""true");  
  36.   
  37.         // 創建郵件會話  
  38.         Session session = Session.getDefaultInstance(props, new Authenticator(){  
  39.             @Override  
  40.             public PasswordAuthentication getPasswordAuthentication() {  
  41.                 return new PasswordAuthentication(username, password);  
  42.             }  
  43.               
  44.         });  
  45.   
  46.         try {  
  47.             // 定義郵件信息  
  48.             MimeMessage message = new MimeMessage(session);  
  49.             message.setFrom(new InternetAddress(from));  
  50.             message.addRecipient(Message.RecipientType.TO, new InternetAddress(  
  51.                     to));  
  52.             //message.setSubject(transferChinese("我有自己的郵件服務器了"));  
  53.             message.setSubject("I hava my own mail server");  
  54.             message.setText("From now, you have your own mail server, congratulation!");  
  55.   
  56.             // 發送消息  
  57.             session.getTransport("smtp").send(message);    
  58.             //Transport.send(message); //也可以這樣創建Transport對象發送  
  59.             System.out.println("SendMail Process Over!");  
  60.   
  61.         } catch (MessagingException e) {  
  62.             e.printStackTrace();  
  63.         }  
  64.     }  
  65.       
  66.     //接受郵件  
  67.     public static void getMail(){  
  68.         String host = "localhost";  
  69.         final String username = "zph";  
  70.         final String password = "zph";  
  71.   
  72.         // 創建Properties 對象  
  73.         Properties props = new Properties();  
  74.   
  75.         // 創建郵件會話  
  76.         Session session = Session.getDefaultInstance(props, new Authenticator(){  
  77.             @Override  
  78.             public PasswordAuthentication getPasswordAuthentication() {  
  79.                 return new PasswordAuthentication(username, password);  
  80.             }  
  81.               
  82.         });  
  83.   
  84.           
  85.         try {  
  86.             // 獲取郵箱的pop3存儲  
  87.             Store store = session.getStore("pop3");  
  88.             store.connect(host, username, password);  
  89.   
  90.             // 獲取inbox文件  
  91.             Folder folder = store.getFolder("INBOX");  
  92.             folder.open(Folder.READ_ONLY);  //打開,打開后才能讀取郵件信息  
  93.   
  94.             // 獲取郵件消息  
  95.             Message message[] = folder.getMessages();  
  96.   
  97.             for (int i=0, n=message.length; i<n; i++) {  
  98.                 System.out.println(i + ": " + message[i].getFrom()[0]  
  99.                                                + "/t" + message[i].getSubject());  
  100.                 try {  
  101.                     message[i].writeTo(System.out);  
  102.                 } catch (IOException e) {  
  103.                     e.printStackTrace();  
  104.                 }  
  105.   
  106.             }  
  107.   
  108.             // 關閉資源  
  109.             folder.close(false);  
  110.             store.close();  
  111.               
  112.         } catch (MessagingException e) {  
  113.             e.printStackTrace();  
  114.         }  
  115.           
  116.         System.out.println("GetMail Process Over!");  
  117.   
  118.     }  
  119.       
  120.     //郵件主題中文字符轉換  
  121.     public static String transferChinese(String strText){  
  122.         try{  
  123.             strText = MimeUtility.encodeText(new String(strText.getBytes(), "GB2312"), "GB2312""B");  
  124.         }catch(Exception ex){  
  125.             ex.printStackTrace();  
  126.         }  
  127.         return strText;  
  128.     }  
  129.   
  130.     public static void main(String[] args) {  
  131.         HelloJMail.sendMail();  
  132.         //HelloJMail.getMail();  
  133.     }  
  134.   
  135. }  

  

 

 

 

      說明: 執行測試時,先執行發送,在main方法中注釋掉郵件接受方法調用,等待片刻,再注釋掉郵件發送方法調用,執行郵件接受方法調用。因為就算163這樣優秀的企業級郵箱也不可能瞬間就能收到發送的郵件。

      在郵件發送方法中:sendMail(), 可以嘗試一下又本郵件服務器向163郵箱發送郵件,如果想通過163郵件服務器想本地發送郵件,你需要配置DSN。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日本一道aⅴ不卡免费播放 久久久久久久高清 | 成人免费毛片片v | 777zyz色资源站在线观看 | 亚洲福利视 | 免费观看一区二区三区 | 日韩美女电影 | 国产一级爱c视频 | 国产91免费看 | 国产一区成人 | 午夜视频在线观 | 国产午夜精品一区二区三区在线观看 | 亚洲第五色综合网 | 黄色免费在线视频网站 | 国产午夜精品理论片a级探花 | 99精品在线免费 | 欧美日韩在线视频一区 | 国产精品久久久av | 中文字幕激情 | 毛片在线免费观看网址 | 成人免费一区二区三区 | 黄色成年在线观看 | 偿还电影免费看 | 国产毛毛片一区二区三区四区 | 久久精精品 | 一区二区久久精品66国产精品 | 一区二区三区欧美在线 | 欧洲伊人网 | 黄色美女网站免费看 | 亚洲网站在线播放 | 99ri在线| 高清国产免费 | 色综合久久久久久久久久久 | 久久av免费| 九九热精| 一级毛片看 | 在线小视频国产 | 日韩视频在线一区二区三区 | 久久成人激情视频 | 日韩精品一二三区 | 日本在线视频免费观看 | www久久综合|