《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 业界动态 > 在Linux下利用JavaMail收发邮件

在Linux下利用JavaMail收发邮件

2009-01-06
作者:吴旭

1 引言?

?? 電子郵件是Internet上最早使用的工具之一。隨著網(wǎng)絡(luò)的不斷普及,它已成為我們學(xué)習(xí)和工作中必不可少的通信工具。與此同時,linux的普及程度不斷提高,人們逐漸認(rèn)識到了它的優(yōu)越性,強(qiáng)大的,可靠的,可擴(kuò)展的,靈活的,可配置的,多用戶的,多任務(wù)的并且免費(fèi)的操作系統(tǒng)。在linux上的各種應(yīng)用開發(fā)也變得日益重要。電子郵件便是其中重要的一個方面。借助JavaMail可以很方便地實(shí)現(xiàn)在linux上收發(fā)郵件。?

Java語言的網(wǎng)絡(luò)能力早已被人們所熟知,再加上JavaMail更是如虎添翼。JavaMail是基于Java的標(biāo)準(zhǔn)化的電子郵件應(yīng)用編程接口。它提供了一系列抽象的概念,一個管理電子郵件的通用框架。JavaMail提供訪問電子郵件系統(tǒng)的能力,以及創(chuàng)建和傳送新郵件消息的能力。它能很容易地把郵件功能組合到軟件中。?

本篇文章將介紹如何在linux下通過配置DNS,實(shí)現(xiàn)imap ,smtp服務(wù)器,使用JavaMail實(shí)現(xiàn)收發(fā)郵件的功能。?

2.概述?

??? JavaMail是一個純java API ,因此可以不依賴于任何已安裝的系統(tǒng)。充分地體現(xiàn)了平臺無關(guān)性。在運(yùn)行的時候,不需要任何特定的設(shè)置。只需要提供用來連接和接收郵件的郵件服務(wù)器所需的信息就可以了。?

??? 圖1概述了JavaMail的體系結(jié)構(gòu)。采用分層方式,把實(shí)現(xiàn)細(xì)節(jié)和編程接口分開。當(dāng)應(yīng)用程序訪問郵件服務(wù)或向郵件服務(wù)發(fā)送消息時,利用JavaMail來請求實(shí)現(xiàn)。返回該實(shí)現(xiàn)的一個實(shí)例,然后?應(yīng)用程序就可以用該實(shí)例來檢索或發(fā)送郵件。實(shí)現(xiàn)的實(shí)際細(xì)節(jié)對應(yīng)用程序開發(fā)者透明。

??? 雖然應(yīng)用程序可以請求某個特殊協(xié)議的實(shí)現(xiàn),但是郵件服務(wù)的接口保持不變。?????????????????

??? 在linux 下,通過配置DNS來建立郵件收發(fā)服務(wù)器。這樣,Internet郵件服務(wù)無論是在網(wǎng)絡(luò)環(huán)境下還是在單機(jī)下測試均可以使用。(不同之處是網(wǎng)絡(luò)環(huán)境下使用真實(shí)IP,單機(jī)下使用localhost) 在本例中,?以www.javamail.com作為郵件收發(fā)服務(wù)器。圖2顯示了DNS的名?稱解析過程,具體內(nèi)容本文不在介紹。?????????????? ?

??? 第3部分將詳細(xì)介紹DNS的配置過程。

3.DNS的配置(設(shè)IP為192.168.10.104)?

(1)? 修改/etc/named.conf文件,新建兩個域(正向域和反向域)?

正向域??? zone? “javamail.com” IN? {?

???????????????? type? master;?

???????????????? file? “javamail.com” ;?

???????????????? allow-update { none;};?

????????? };?

反向域???? zone? “10.168.192.in-addr.arpa”? IN? {?

???????????????? type? master;?

???????????????? file? “javamail.com1” ;?

???????????????? allow-update { none;};?

????????? };?

(2)? 在/var/named/下建立數(shù)據(jù)庫文件,可通過復(fù)制已有文件生成?

正向域文件?? cp? /etc/named/localhost.zone?????? /etc/named/javamai.com?

反向域文件?? cp? /etc/named/named.local???????? /etc/named/javamail.com1?

(3)? 編輯新生成的數(shù)據(jù)庫文件javamail.com和javamail.com1?

javamail.com內(nèi)容:?

$TTL? 86400?

@?????? ???IN? SOA? ns.javamail.com??? root.javamail.com.(?

????????????????????? 20030615?

?????????????????????? 3H?

?????????????????????? 15M?

?????????????????????? 1W?

?????????????????????? 1D? )?

@??????????? IN?? NS? ns.javamail.com.?

ns??????????? IN?? A??? 192.168.10.104?

www????????? IN?? A??? 192.168.10.104?

javamail.com.?? IN?? MX? 1?? ns.javamail.com.?

javamail.com1內(nèi)容:?

?$TTL? 86400?

@????????? IN? SOA? ns.javamail.com.? root.javamail.com.(?

????????????????????? 1997022700?

?????????????????????? 28800?

?????????????????????? 14400?

?????????????????????? 3600000?

?????????????????????? 86400? )?

@??????????? IN?? NS? ns.javamail.com.?

104???????? IN?? PTR?? ns.javamail.com.?

(4)? 啟動服務(wù) ?

service named start?

(5)? 測試?

ping?? www.javamail.com?? ?

若能ping通,則配置成功。?

4.編程細(xì)節(jié)?

??? 在配置好DNS后,我們使用www.javamail.com作為郵件收發(fā)服務(wù)器。?

在linux上新建一個帳號,例java,作為郵件用戶。?

發(fā)送郵件?

?????? 需提供郵件接收者的電子郵件地址和SMTP服務(wù)器的名字。?

?????? 關(guān)鍵語句:?

??????? Message?? message = new MimeMessage (mySession);?

??????? Message.setSubject(“Using JavaMail”);?

??????? Message.setContent (“This message is sent by JavaMail……….”, “text/plain”);?

??????? InternetAddress? toAddr =? new InternetAddress ( to );?

??????? Message.setRecipient (Message.RecipientType.TO, toAddr);?

??????? InternetAddress? fromAddr = new InternetAddress (java@javamail.com, “SendMail”); ?

??????? Message.setFrom(fromAddr);?

??? Transport.send(message);?

?檢索郵件?

??????? 需提供使用的協(xié)議(IMAP或POP3),郵件服務(wù)的主機(jī)名,用戶名(本例是java)和密碼。?

?(1)連接服務(wù)器?

Store? myStore? =? mySession.getStore(protocol);?

MyStore.connect (host, username, password );?

?(2)打開文件夾?

郵件系統(tǒng)在文件夾中存儲消息。默認(rèn)文件夾是INBOX?

Folder? myFolder = myStore.getFolder(“INBOX”);?

MyFolder.open(Folder.READ_ONLY);?

?(3)獲得消息?

建立一個消息數(shù)組,存放從第一條消息到最后一條。?

Int messagecount = myFolder.getMessageCount();?

Message[]? message = myFolder.getMessages();?

?(4)遍歷消息數(shù)組中的元素,顯示消息的發(fā)送者和消息主題。?

For( int I = 0; I < message.length; I++)?

{?

Address[]? fromAddr? =? message[I].getFrom();?

System.out.println? ( fromAddr[0]? +? “:” +?

????????????????? Message[I].getSubject());?

??????????????? }?

????JavaMail? API 的一個突出好處是提供了可在編碼時透明選擇郵件協(xié)議接口。不管是IMAP還是POP3,訪問郵件文件夾的代碼都是相同的,只需很少修改,或者根本不用修改就可用于將來的郵件協(xié)議。?

5.結(jié)束語?

????通過JavaMail能夠很輕松地實(shí)現(xiàn)郵件的收發(fā),在linux下也不例外,但需要進(jìn)行一些相應(yīng)的配置。Linux與java地結(jié)合,能夠更加體現(xiàn)linux的開放性和java的平臺無關(guān)性,同時也提高了安全性。相信java會在linux上更加耀眼。?

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。

相關(guān)內(nèi)容