日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Apache James使用的方法及相关心得(转)

發布時間:2025/3/21 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Apache James使用的方法及相关心得(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

經過一番的辛苦努力,終于把James?配置搞定啦,好記性不如爛筆頭啊,趕緊記下我的成功經過,以備以后查閱!

?

首先要做的就是配置域名的MX?記錄啦:

先添加一條A記錄:

mail.abc.com?指向 你的服務器IP!

然后添加域名的MX?記錄,指向mail.abc.com A?記錄(?即域名MX?記錄的值為mail.abc.com).

OK?,域名的配置就完成啦!

?

接下來安裝配置James?:

James?不需要編譯安裝,解壓即可以使用,把james?下載來后,必須先啟動一下!

進入James?根目錄下的bin?目錄,啟動:

127.0.0.1[bin]$ ./run.sh

Log?如下:

127.0.0.1[bin]$ ./run.sh

Using PHOENIX_HOME: /usr/local/james-2.3.2

Using PHOENIX_TMPDIR: /usr/local/james-2.3.2/temp

Using JAVA_HOME: /home/java/jdk1.6.0_11

Running Phoenix:

Phoenix 4.2

James Mail Server 2.3.2

Remote Manager Service started plain:4555

POP3 Service started plain:110

SMTP Service started plain:25

NNTP Service started plain:119

FetchMail Disabled

JVM exiting abnormally. Shutting down Phoenix.

?

然后按Ctrl+C?停止。

第一次運行后,系統會在?apps?目錄下面生成一些初始化的配置文件。如果第一次運行有問題,用?netstat?檢查一下是否有系統默認的端口被占用了,比如?110,25?等。

?

進入配置文件目錄修改config.xml?文件:

127.0.0.1 [SAR-INF]$ pwd

/usr/local/james-2.3.2/apps/james/SAR-INF

127.0.0.1 [SAR-INF]$ vi config.xml

查找替換所有的?localhost?為你的域名,比如?abc.com

查找所有?autodetect?屬性,修改為?false?。?AutodetectIP?也設為?false.

注釋掉??
??????? <mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor>?
??????? <processor> relay-denied </processor>?
??????? <notice>550 - Requested action not taken: relaying denied</notice>?
??????? </mailet>

?

配置?DNS Server?,由于我未配置自己的?DNS?服務器,所以使用?Google?的?Public DNS?:?

<dnsserver>?
??????? <servers>?
? ? ? ? ? <server>8.8.8.8</server>?????????

? ? ? ? ? <server>8.8.4.4</server>?????????
? ? </servers>
</dnsserver>

設置?autodiscover?為?false

注意?,設置?DNS?這步很重要,發送郵件不成功的問題經常會出在這里!

有些文章說?ping?域名提供商管理設置的域名?DNS?來獲得?IP?,我試過,這種方法基本上是不行了,所以我使用?Google?的?Public DNS?。

當然,也可以自己做?DNS?服務器,使用?Bind?則可,但其麻煩程度不敢茍同,不建議新手使用!

?

配置?smtp server?,?pop3 server?等?
查找所有?myMailServer,?替換為你的域名。如:?
<helloName autodetect="false">myMailServer</helloName>?,將?myMailServer?修改為你的域名。比如:?abc.com

?

注釋以下的語句:

<mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor">
?????????? <processor> relay-denied </processor>
??????????? <notice>550 - Requested action not taken: relaying denied</notice>
???????? </mailet>


打開?smtp?認證?
<authRequired>true</authRequired>

smtp?認證的作用在于不讓未能授權的人使用你的郵件服務器發送垃圾郵件,在?<servername></servername>?里指定哪些域名可以使用這個郵件服務器,如:

<servername>abc.com</servername>

<servername>abc.com.cn</servername>

則當發送人地址為?XXX.abc.com?或者?XXX.abc.com.cn?時才能通過,如果寫成?XXX.bbc.com?的話就不會通過驗證,這種方式就禁止了不法人士使用啦!

?

修改?root?口令。?account login="root" password="mypassword"

?

啟動?James(?使用?Phoenix.sh)?:

./Phoenix.sh start

?

最后使用?telnet?添加郵件用戶?(?具體命令在?telnet?后輸入?help?查看?)?:

telnet server-name 4555

?

?

http://www.iteye.com/topic/777797

http://www.iteye.com/topic/777797

簡介 James 是一個企業級的郵件服務器,它完全實現了smtp 和 pops 以及nntp 協議。同時,james服務器又是一個郵件應用程序平臺。James的核心是Mailet API,而james 服務齊是一個mailet的容器。它可以讓你非常容易的實現出很強大的郵件應用程序。James開源項目被廣泛的應用于與郵件有關的項目中。你可以通過它來搭建自己的郵件服務器。我們可以利用Mailet API,編程接口來實現自己所需的業務。James集成了Avalon 應用程序框架以及Phoenix Avalon?框架容器。Phoenix為james?服務器提供了強大的支持。需要說明的是Avalon開源項目目前已經關閉。 ?快速上手 安裝james 我這次使用的安裝包是james 2.3.1。大家可以從這里下載到http://james.apache.org/download.cgi 現在讓我們開始我們激動人心的james之旅。首先我們將james-binary-2.3.1.zip解壓縮下載到你的安裝目錄。我們可以把這個過程理解為安裝的過程。我在這里將它解壓到c:\.并且把它改名為james.這樣我們的james就安裝好了。目錄為C:\james。很簡單吧! 準備知識?- 學習一些必要的知識 在我使用james的時候讓我感覺首先理解james的應用程序結構是很重要的。否則你會在使用中感到很困惑。 它的應用程序結構是這樣的: James |_ _apps |_ _bin |_ _conf |_ _ext |_ _lib |_ _logs |_ _tools 我們重點介紹一下兩個文件夾bin?和?apps. bin目錄中的run.bat和run.sh是James的啟動程序。只要記住這個重要文件就可以。 啟動之后控制臺顯示如下: Using PHOENIX_HOME:?? C:\james
Using PHOENIX_TMPDIR: C:\james\temp
Using JAVA_HOME:????? C:\j2sdk1.4.2_02

Phoenix 4.2

James Mail Server 2.3.1
Remote Manager Service started plain:4555
POP3 Service started plain:110
SMTP Service started plain:25
NNTP Service started plain:119
FetchMail Disabled

Apps?目錄下有個james的子目錄這個目錄是它的核心。 james |_ _SAR-INF |_ _conf |_ _logs |_ _var |_mail |_address-error |_error |_indexes |_outgoing |_relay-denied |_spam |_spool |_nntp |_.... … |_users SAR-INF?下有一個config.xml是james中的核心配置文件。 Logs?包含了與james有關的Log。調試全靠它了。 Var?包含了一些文件夾通過它們的名字我們大概也能猜測出它們的用途。Mail主要用于存儲郵件。nntp主要用于新聞服務器。Users用于存儲所有郵件服務器的用戶。也就是郵件地址前面的東東。如:pig@sina.com的pig就是所謂用用戶。 創建用戶: ?我們在James上建若干用戶,用來測試收發郵件。當然如果你不用james本身的用戶也可以。James以telnet?的方式提供了接口用來添加用戶。下面我來演示一下。 首先使用telnet來連接james的remote manager . 1.telnet localhost 4555?回車 2.然后輸入管理員用戶名和密碼(user/pwd?:?root/root?是默認設置這個可以在config.xml中修改) JAMES Remote Administration Tool 2.3.1 Please enter your login and password Login id: root Password: root Welcome root. HELP for a list of commands 3.添加用戶 adduser kakaxi kakaxi User kakaxi added Adduser mingren mingren User mingren added 4.查看添加情況 listusers Existing accounts 2 user: mingren user: kakaxi 得到上面的信息說明我們已經添加成功。 發送器 這個類主要用來測試我們的郵件服務器,可以不用將其打入包中。 java 代碼
  • package?com.yy.jamesstudy; ??
  • ??
  • import?java.util.Date; ??
  • import?java.util.Properties; ??
  • ??
  • import?javax.mail.Authenticator; ??
  • import?javax.mail.Message; ??
  • import?javax.mail.PasswordAuthentication; ??
  • import?javax.mail.Session; ??
  • import?javax.mail.Transport; ??
  • import?javax.mail.internet.InternetAddress; ??
  • import?javax.mail.internet.MimeMessage; ??
  • ??
  • public?class?Mail?{ ??
  • ????private?String?mailServer,?From,?To,?mailSubject,?MailContent; ??
  • ??
  • ????private?String?username,?password; ??
  • ??
  • ????private?Session?mailSession; ??
  • ??
  • ????private?Properties?prop; ??
  • ??
  • ????private?Message?message; ??
  • ??
  • ????//?Authenticator?auth;//認證???
  • ????public?Mail()?{ ??
  • ????????//?設置郵件相關???
  • ????????username?=?"kakaxi"; ??
  • ????????password?=?"kakaxi"; ??
  • ????????mailServer?=?"localhost"; ??
  • ????????From?=?"kakaxi@localhost"; ??
  • ????????To?=?"mingren@localhost"; ??
  • ????????mailSubject?=?"Hello?Scientist"; ??
  • ????????MailContent?=?"How?are?you?today!"; ??
  • ????} ??
  • ????public?void?send(){ ??
  • ????????EmailAuthenticator?mailauth?=? ??
  • new?EmailAuthenticator(username,?password); ??
  • ????????//?設置郵件服務器???
  • ????????prop?=?System.getProperties(); ??
  • ????????prop.put("mail.smtp.auth",?"true"); ??
  • ????????prop.put("mail.smtp.host",?mailServer); ??
  • ????????//?產生新的Session服務???
  • ????????mailSession?=?mailSession.getDefaultInstance(prop, ??
  • ????????????????(Authenticator)?mailauth); ??
  • ????????message?=?new?MimeMessage(mailSession); ??
  • ??
  • ????????try?{ ??
  • ????????message.setFrom(new?InternetAddress(From));?//?設置發件人???
  • ????????message.setRecipient(Message.RecipientType.TO,? ??
  • new?InternetAddress(To));//?設置收件人???
  • ????????message.setSubject(mailSubject);//?設置主題???
  • ????????message.setContent(MailContent,?"text/plain");//?設置內容???
  • ????????message.setSentDate(new?Date());//?設置日期???
  • ????????Transport?tran?=?mailSession.getTransport("smtp"); ??
  • ????????tran.connect(mailServer,?username,?password); ??
  • ????????tran.send(message,?message.getAllRecipients()); ??
  • ????????tran.close(); ??
  • ????????}?catch?(Exception?e)?{ ??
  • ????????????e.printStackTrace(); ??
  • ????????} ??
  • ????} ??
  • ????public?static?void?main(String[]?args)?{ ??
  • ????????Mail?mail; ??
  • ????????mail?=?new?Mail(); ??
  • ????????System.out.println("sending......"); ??
  • ????????mail.send(); ??
  • ????????System.out.println("finished!"); ??
  • ????} ??
  • ??
  • } ??
  • ??
  • class?EmailAuthenticator?extends?Authenticator?{ ??
  • ????private?String?m_username?=?null; ??
  • ??
  • ????private?String?m_userpass?=?null; ??
  • ??
  • ????void?setUsername(String?username)?{ ??
  • ????????m_username?=?username; ??
  • ????} ??
  • ??
  • ????void?setUserpass(String?userpass)?{ ??
  • ????????m_userpass?=?userpass; ??
  • ????} ??
  • ??
  • ????public?EmailAuthenticator(String?username,?String?userpass)?{ ??
  • ????????super(); ??
  • ????????setUsername(username); ??
  • ????????setUserpass(userpass); ??
  • ????} ??
  • ??
  • ????public?PasswordAuthentication?getPasswordAuthentication()?{ ??
  • ????????return?new?PasswordAuthentication(m_username,?m_userpass); ??
  • ????} ??
  • } ??
  • 實現-Matcher 和 Mailet編寫 我先解釋一下大概的流程:當james?接收到一個smtp請求時首先會交給matcher來進行一系列過濾動作。然后由matcher交給相應的mailet來進行處理。James就相當于一個matcher和mailet的容器。就像tomcat之于servlet。而mailet和servlet很是相似。 我們這里要完成的功能很簡單,就是當james郵件服務器接收到鳴人(人名)后把發送者和郵件正文打印到控制臺。我們分析這個需求發現我們需要寫一個matcher以及一個mailet.matcher用來過濾而mailet用來將郵件內容打印到控制臺。為了簡單起見,我這次只是繼承了GenericMailet?和GenericRecipientMatcher?兩個已經實現的?mailet?和?matcher.具體的Matcher和Mailet的使用我以后會整理成另外一篇文章。 ?
    溫馨提示:
    GenericMailet 和GenericRecipientMatcher依賴于 apache-mailet-base 以下Maven項
    <dependencies><dependency><groupId>org.apache.james</groupId><artifactId>apache-mailet-api</artifactId><version>3.1.0</version></dependency><dependency><groupId>org.apache.james</groupId><artifactId>apache-mailet-base</artifactId><version>3.1.0</version></dependency><!--<dependency>--><!--<groupId>org.apache.james</groupId>--><!--<artifactId>apache-mailet-standard</artifactId>--><!--<version>3.1.0</version>--><!--</dependency>--></dependencies>

    ?



    Matcher?的實現 import javax.mail.MessagingException; import org.apache.mailet.GenericRecipientMatcher; import org.apache.mailet.MailAddress; public class BizMatcher extends GenericRecipientMatcher { public boolean matchRecipient(MailAddress recipient) throws MessagingException { //只接受郵件地址包含鳴人的郵件 if (recipient.getUser().indexOf("mingren")!=-1) { return true; } return false; } }

    GenericRecipientMatcher?是一個針對收件人進行過濾的matcher.

    Mailet?的實現
    import java.io.IOException; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import org.apache.mailet.GenericMailet; import org.apache.mailet.Mail; import org.apache.mailet.MailAddress; public class BizMaillet extends GenericMailet { public void service(Mail mail) { MailAddress ma = mail.getSender(); System.out.println("sender:"+ma.toInternetAddress().toString()); try { MimeMessage mm = mail.getMessage(); System.out.println("content:"+(String)mm.getContent().toString()); } catch (IOException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } } }

    GenericMailet?是一個mailet的基本實現。

    編譯 我們把這兩個java文件的class文件編譯成一個名字為:jamesstudy.jar?的jar文件。 發布-Matcher 和 Mailet以及config.xml 1.發布jar文件 我們把這個jar文件發布到C:\james\apps\james\SAR-INF\lib。 注意:如果沒有找到相關目錄,則需要先啟動一遍james,相關的文件夾才會被創建。還有一點需要特別說明:lib目錄是通過我們手動創建的。 2.將Matcher?和?Mailet發布到config.xml中,config.xml在james\apps\james\SAR-INF\下 1)我們首先找到如下內容 <mailetpackages> <mailetpackage>org.apache.james.transport.mailetsmailetpackage> <mailetpackage>org.apache.james.transport.mailets.smimemailetpackage> mailetpackages> <matcherpackages> <matcherpackage>org.apache.james.transport.matchersmatcherpackage> <matcherpackage>org.apache.james.transport.matchers.smimematcherpackage> matcherpackages>

    ?

    2)加入包聲明
  • <mailetpackages>??
  • ??????<mailetpackage>com.yy.jamesstudymailetpackage>??
  • ??????<mailetpackage>org.apache.james.transport.mailetsmailetpackage>??
  • ??????<mailetpackage>org.apache.james.transport.mailets.smimemailetpackage>??
  • ???mailetpackages>??
  • ??
  • ???<matcherpackages>??
  • ??????<matcherpackage>com.yy.jamesstudy?matcherpackage>??
  • ??????<matcherpackage>org.apache.james.transport.matchersmatcherpackage>??
  • ??????<matcherpackage>org.apache.james.transport.matchers.smimematcherpackage>??
  • ???matcherpackages>??
  • 3)加入?Matcher?和?Mailet的關聯關系 找到?<processor name="root"></processor>?元素在它的下面加入 xml 代碼
  • <mailet?match="BizMatcher"?class="BizMaillet"/>??
  • Mailet元素代表了一個matcher和一個mailet的組合。Match屬性:是指matcher的類名。而class?屬性:是指mailet的類名。 最后別忘了,保存退出。并且重新啟動james服務器。 測試- 驗證我們的mail應用程序 我們主要通過mail類來測試我們的應用。還記得我們剛才寫的那個mail類嗎?!在那個類中我們初始化了相關的信息. username = "kakaxi"; password = "kakaxi"; mailServer = "localhost"; From = "kakaxi@localhost"; To = "mingren@localhost"; mailSubject = "Hello Scientist"; MailContent = "How are you today!"; 發件人是卡卡西,收件人是mingren.這兩個用戶我們在前面都已經創建完畢。我們用他們來測試james的郵件收發以及mailet api的應用。 根據需求假設我們發給james?服務器(這里是james的默認配置:localhost)的郵件的收件人是鳴人。那么我們就能通過matcher監測到這封郵件,并且調用相應的mailet來進行處理。由mailet打印出相應的郵件發送者和正文。運行Mail類后得到 Using PHOENIX_HOME:?? C:\james
    Using PHOENIX_TMPDIR: C:\james\temp
    Using JAVA_HOME:????? C:\j2sdk1.4.2_02

    Phoenix 4.2

    James Mail Server 2.3.1
    Remote Manager Service started plain:4555
    POP3 Service started plain:110
    SMTP Service started plain:25
    NNTP Service started plain:119
    FetchMail Disabled


    sender:kakaxi@localhost
    content:How are you today!

    總結

    最終我們看到發送者和正文的信息。That’s all !?大功告成。 其實james的功能是非常非常強大的,尤其是它的Mailet API能夠幫助我們完成很多與郵件郵件有關的工作如過濾垃圾郵件。用它我們甚至可以搭建我們自己的企業郵件服務器。我們最近的項目中就使用到了。我們通過james接收到的郵件,然后用matcher找到我們想要處理的郵件,然后通過mailet做一些業務上的處理。這篇文章涵蓋的面很小。如果大家有興趣可以研究一下james項目。Config.xml實際上是最重要的文件,如果你把它研究透徹了那么就就算把Mailet API研究透了。以后我可能會寫一篇相關的文章,在這就不多說了。希望這篇文章能夠對大家有所啟發!有所幫助!祝大家工作順利! http://www.iteye.com/topic/123845

    ?

    轉載于:https://www.cnblogs.com/softidea/p/5348057.html

    總結

    以上是生活随笔為你收集整理的Apache James使用的方法及相关心得(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。