Tải bản đầy đủ (.pdf) (17 trang)

Java mail

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.6 MB, 17 trang )

Trang 205
Chng 9: JAVA MAIL
I. Các khái nim MAIL
Ngày nay e-mail hay thn tã tr nên ph bin và hu nh không th thiu
trong th gii Internet. E-mail cho phép gi thông p t ni này n ni khác tng t
nh cách gi th truyn thng thông qua bu n. Trong cách thông thng bn phi cung
p a ch ngi gi (sender), a ch ngi nhn (reciept) sau ó ngi gi mang thn
u n nh bu n chuyn thi. Bu n s chuyn thn hp th ca ngi nhn.
 i vi thn t e-mail gi qua h thng Internet hay mng thì c ch gi/nhn
ng hoàn toàn tng t. Các máy ch (mail server) cung cp cho bn  ch mail (còn gi
là e-mail address). Bn ghi a ch mail ca bn và ca ngi nhn, sau ó nhp vào ni
dung cn gi. Mail server s gi th ca bn n mt máy ch hay mail server ca a ch
ngi nhn. Mail server ni nhn s ct th vào mt ni thích hp (mail box hay còn gi là
p th) trên máy ch. Ngi nhn s tin hành ng nhp (hay còng gi là login) vào hp
th ca máy chc ni dung e-mail gi cho mình.
  thng nht gia các máy ch mail trên toàn th gii v cách thc gi nhn mail
òi hi hình thành các chun v mail. u này giúp cho vic gi nhn các thông p c
m bo, làm cho nhng ngi  các ni khác nhau có th trao i thông tin vi nhau.
Có 2 chun v Mail thng c các máy ch mail h tr là X.400 và SMTP
(Simple Mail Transfer Protocol). SMTP thng i kèm vi chun POP3 và do hn ch ca
SMTP mà ngày nay ngi ta dùng chun m rng ca nó là ESMTP (Extended SMTP).
c ích chính ca X.400 là cho phép các mail có thc truyn nhn thông qua các loi
ng khác nhau bt chp cu hình phn cng, hu hành mng, giao thc truyn dn
c dùng. Còn mc ích ca chun SMTP miêu t cách u khin các thông p trên
ng Internet. u quan trng ca chun SMTP là ginh máy nhn phi dùng giao thc
SMTP gi Mail cho mt Server luôn luôn hot ng. Sau ó, ngi nhn sn ly Mail
a h t Server khi nào h mun dùng giao thc POP (Post Office Protocol), ngày nay
POP c ci tin thành POP3 (Post Officce Protocol vertion 3). Các giao thc Mail thông
ng : chun X.400, chun MAIP, SMTP (ESMTP), POP3. Trong chng này ta s s
ng hai giao thc :POP3 và SMTP  gi nhn mail.
Mô hình gi nhn mail


Trc khi i vào phn chính chúng ta cùng ôn li mt s khái nim c s sau:
Sende
r
Reveicer
Mail Server trung
gian
Mail Server ngi
i
Mail Server ngi
nhn
ng ng
Trang 206
Mail server: là mt chng trình chy di dng mt dch v. dch v này có nhim v
nhn mail t máy khách gi n, phân phi mail n máy ch khác, cho phép máy
khách truy cp vào  ly mail, lu tr mail… Chính vì vy trc khi bn gi nhn mail
n phi bit a ch ca máy ch mail (máy ang chy dch v mail). a ch này
thng c gi là mail host.
Giao thc gi mail (Mail transport protocol): gi mail n máy ch, trình khách
phi s dng mt giao thc trò chuyn vi mail server. Tng t nh trình duyt s
ng giao thc HTTP  trò chuyn vi Web server. Các máy khách mun bt tay vi
trình ch và gi mail lên máy ch s s dng giao thc SMTP (Simple Mail Transport
Protocol). SMTP khá ni ting và c hu các máy ch mail trên th gii h tr. a
ch ca máy ch nhn mail gi i c gi là outgoing mail address. Trình ch tip
nhn mail theo giao thc SMTP c gi là SMTP Server. Trình khách s dng giao
thc SMTP  gi thi c gi là SMTP Client.
Giao thc lu tr và nhn mail (mail store protocol): Khi trình ch mail tip nhn
c mail. Nó tin hành lu tr mail theo mt cách thc nào ó  trình khác có th d
dàng truy cp vào và nhn mail v. Hin nay POP3 (Post Office Protocol) và IMAP
(Internal Message Access Protocol) là hai giao thc lu tr và ly mail t hp th
(Inbox) c nhiu mail server s dng. a ch ca máy ch lu tr mail cho phép

máy khách truy cp vào  nhn mail v c gi là incoming mail address. Các
chng trình mail Client thng s dng giao thc POP3  nhn mail t trình ch.
Trình ch tip nhn yêu cu ca trình khách theo giao thc POP3 c gi là POP
Server.
SMTP Relay: Các mail server nu nhn c mail không thuc a ch do mình qun
lý, khi ó nó có trách nhim gi mail n máy ch khác vi cùng giao thc SMTP.
Trong trng hp này mail server (ni chuyn tip thi) óng vai trò nh mt trình
khác (mail client) i vi máy ch ni nhn. C th. Internet mail là mt h thng
chuyn mail liên tc gia các máy ch mail vi nhau cho n khi nào mail n c
máy chích. Các mail server a phn h tr tính nng Relay.
POP before SMTP (Chng thc quyn truy cp theo giao thc POP trc khi s
ng SMTP): tránh tình trng máy ch mail c li dng  gi mail mt cách 
t. C ch POP before SMTP yêu cu máy khách mun s dng dch v mail ca máy
ch phi trc ht phi ng nhp (login) vào tài khon (account) theo giao thc POP.
u quá trình ng nhp thành công, c ch gi mail bng SMTP mi có th thc hin
c.
Mail client, Web mail: là chng trình dùng  nhn mail v t trình ch và cho phép
i mail lên trình ch. Nu mail client c vit di giao din Web thì nó c gi là
Web mail.
II. Gi mail vi th vin có sn ca java
Java cung cp cho bn mt th vin nh gn giúp bn có th gu mail mt cách d
dàng, tuy nhiên vi th vin này bn không có c các tính nng cao cp nh gi
file ính kèm…,  s dng các tính nng cao cp bn x th vin Mail API (gii
thiu trong phn sau). Th vin này có lp SmtpClient dùng  gi mail.
 gi mail bn cung cp a ch ca ngi gi (from), a ch ca ngi nhn (to),
a ch ca mail server (máy ch tip nhn mail do bn gi lên) cùng vi ni dung
mà bn mun gi. Di ây là mt chng trình n gin dùng  gi mail n a
Trang 207
ch nh vào máy ch mail utehy.edu.vn (máy ch mail ca
trng DHSP KT Hng Yên). a ch ngi gi có tht tu ý. Nhng thng là

a ch ca bn  ngi nhn sau khi c th xong có th hi âm (Reply) li cho
n.
//SendMailApp.java
import sun.net.smtp.*;
import java.io.*;
public class SendMailApp {
public static void main(String[] args) throws Exception {
String host = "utehy.edu.vn";
String from = "";
String to = "";
String subject = "Test Message";
String body = "Hello this is test message for mail";
/* To i tng gi mail theo giao thc SMTP, host là a ch ca máy ch nhn mail do ta
i lên */
SmtpClient mailer = new SmtpClient(host);
// Thit lp a ch ca ngi gi và ngi nhn
mailer.from(from);
mailer.to(to);
//Ly v lung xut gn vi mail
PrintStream ps = mailer.startMessage();
//Din các thông tin khác
ps.println("From:" + from);
ps.println("To:" + to);
ps.println("Subject:" + subject);
ps.println();// Thêm CRLF vào trc phn ni dung
ps.println(body);
//Kt thúc quá trình gi mail
mailer.closeServer();
System.out.println("Mail has been sent");
}

}
Chú ý: Hãy thay a ch From, To bng a ch e-mail mà bn mun gi.
III. Gii thiu java mail API
Lp SmtpClient ca java mà chúng ta s dng trên ây ch giúp bn gi mail  mc
n gin nht vi ni dung mail  dng thun vn bn. Mt ng dng mail phía máy khách
thng có các chc nng phc tp hn nh : Gi file ính kèm, d liu c nhúng c hình
nh, âm thanh… thc hin nhng chc nng này java a ra mt th vin riêng chuyên
 lý các thao tác gi nhn mail.
1. Cài t th vin java mail
Mc nh các th vin java mail API không c cài t khi bn cài JDK. Th vin
này gm ba phn:
Phn th nht là ht nhân ca các tác v x lý mail, nó c óng gói trong tp mail.jar.
n có th download ta ch />Trang 208
Phn th hai là JavaBean Activation FrameWork cn cho mi phiên bn ca java mail.
Th vin này mang tên activation.jar. vi th vin này bn có th ti xung t
/>Phn th ba là các lp c hay nhn mail t trình ch. Trong java 1.4 th vin này có
tên mail.jar
n t bin môi trng classpath=%CLASSPATH%; C:\JBuilderX\lib\mail.jar;
C:\JBuilderX\lib\activation.jar;
Chú ý: Khi bn cài JBuilder hai th vin này cng c tng cài t vào máy, bn có
th tìm thy nó trong th mc Jbuilder_Home/lib
2. Các bc gi nhn mail
Các bc  nhn mail:
o i tng mail Session.
o i tng store chun b ly mail v.  to i tng Store bn yêu cu ngi
dùng nhp vào tên và mt khu chng thc quyn truy cp hp pháp.
 dng i tng Store  ly vi tng Folder. Mi Folder s cha mt loi mà
n mun ly. Nh Folder Inbox cha các th vin gi n. Folder trash cha các th
a b xoá. Folder sent cha các th va gi i…
Duyt i tng Folder  ly v danh sách các th.

Các bc  gi mail
Yêu cu ngi gi chn giao thc  gi (SMTP) và nhn (POP3 hay IMAP…). Lu
các thông tin này vào i tng Session.
o i tng Message. i tng này s cha các thông tin v mail cn gi i nha
ch ngi gi, a ch ngi nhn, tiêu  mail, ni dung mail…
i phng thc Transport.send() hoc phng thc sendMessage ca i tng
Transport  gi thi.
3. Các lp c bn x lý thao tác gi nhn mail
Ta tìm hiu các gói trong th vin java mail. Hu ht các ng dng mail client cn
import các th vin javax.mail, javax.mail.interner, javax.mail.activation.
3.1. Các lp liên quan n vic gi mail
3.1.1. Lp Session
Lp này th hin mt phiên kt ni ti mail server. Trc khi truy cp (gi/nhn)
n cn phi to ra mt i tng Session th hin cho mt phiên làm vic. ví d:
//To i tng Properties cha thông tin khi to nu có
Properties props=new Properties();
/*gán giá tr cho các thuc tính bng phng thc
props.setProperty(PropertyName, PropertyValue) */
//To i tng Session
Session session =Session.getDefaultInstance(props,null);
Hoc bn có th gi phng thc getInstance() ca lp Session thay cho
getDefaultInstance()  to ra th hin ca i tng Session nh sau:
//To i tng Properties cha thông tin khi to nu có
Properties props=new Properties();
Trang 209
/*gán giá tr cho các thuc tính bng phng thc
props.setProperty(PropertyName, PropertyValue)*/
//To i tng Session
Session session =Session.getInstance(props,null);
Trong c hai phng thc khi to i tng Session nêu trên. các thuc tính cu

hình c t trong i tn Properties nên trc khi bn bn gi nhn mail bn cn thit
t các thuc tính này. ví d:
props.setProperty("mail.host","utehy.edu.vn");
props.setProperty("mail.from","");…
ây thng thì bn truyn null cho tham s th hai vi ý ngha s dng c ch
chng thc (authentication) mc nh ca mail server.
S khác nhau gia hai phng thc này là getInstance() thì luôn to ra mt Session
i còn getDefaultInstance() thì không to ra mt th hin mi ca Session nu nh nó ã
c to ra trong cùng java virtual machine.
3.1.2. Lp Message
Sau khi có i tng Session bn,  gi mail bn bn cn to ra i tng Message.
Tuy nhiên ít khi bn làm vic trc tip vi i tng này mà bn thng làm vic vi các
p con ca nó, lp MimeMessage. ví d, bn to thông p mail  chun b gi i nh
sau:
MimeMessage message =new MimeMessage(mailsession);
u ni dung ca thông p là thun vn bn, bn có th thit t ni dung th gi bng
nh:
message.setText(content);
u bn chnh Mime cho ni dung cn gi nu nó không phi là thun vn bn nh sau:
message.setContent(content,"text/html");
u ni dung không phi thun vn bn thì bn phi chnh Mime cho nó,  ni nhn
mail s cn c vào Mime  hin thúng ni dung ca thông p nhn c.
Mt thói quen tt nên có là t cho mail mt tiêu  (subject). Ngi nhn cn c
vào tiêu  th bit c ni dung vn tt mô t trong th. Phng thc setSubject() s
giúp ta làm vic ó. Ví d:
Session.setSubject(Xin chao);
3.1.3. Lp Address
Sau khi bn to ra i tng Session và Message, tip n ta s dng lp Address 
o ra  ch ca ngi gu và ngi nhn. Lp Address là lp tru tng, bn s
ng lp con ca nó là InternetAddresss. Ví d bn to a ch mail t lp này nh

sau:
Address address =new InternetAddresss();
Hoc
InternetAddresss address =new InternetAddresss();
Nu bn mun a ch e-mail có thêm thông tin din gii bn thêm s dng cú pháp
nh sau:
Address address =new InternetAddresss(, Hoang Trong The);
Thông tin din gii này sc hin th thay khi ngi nhn c th thay cho a
ch mail from.
Trang 210
Sau khi to xong a ch ca ngi gi, a ch ca ngi nhn bn cn gn nó vào
thông p cn gi i. Java cung cp cho bn ba loi a ch ph bin:
Kiu a ch ý ngha
Message.RecipientType.TO a ch ni n
Message.RecipientType.CC a ch ngi gi cn lu ý
Message.RecipientType.BCC a ch ngi gi cn tham kho
Bn gi phng thc addRecipient() ca i tng Message  gán a ch cn gi.
Ví d:
//To a ch
Address toAddress=new InternetAddresss(“”);
Address ccAddress=new InternetAddresss(“”);
//Gán a ch cho ngi nhn
message.addRecipient(Message.RecipientType.TO, toAddress);
message.addRecipient(Message.RecipientType.CC, ccAddress);
 t a ch ca ngi gi bn gi phng thc setFrom(). Ví d:
Address myAddress=new InternetAddresss(“”);
message.setFrom(myAddress);
 a ch ca ngi gi không quan trng, bn có tht cho nó mt a ch e-mail
không có thc, nu bn t a ch ca ngi gi không có thc thì ngi nhn không th
phn hi (reply) li cho bn.

Ta có tht a ch ca ngi gi là mt danh sách (mng)  ngi nhn có th
phn hi li cho nhiu ngi cùng mt lúc. Bn gi phng thc addFrom() nh
sau:
Address address[]=…
Message.addFrom(address);
Chú ý: java mail không cung cp c ch kim tra xem a ch ca ngi gi có hp l hay
không.  kim tra mt a ch mail có hp l hay không không phi là d, thông thng
n gin nht bn kim tra xem trong a chó có kí t @ hay không?
3.1.4. Lp Transport
Lp Transport cung cp các phng thc gi mail n mail server. n gin bn gi
phng thc tnh send() ca lp Transport  gi i tng thông p i. Ví d:
Transport.send(message);
Hoc bn có th chn giao thc gi mail ti tng Session, to kt ni n trình
ch mail và gi phng thc sendMessage()  gi mail i:
Transport transport;
transport =mailSession.getStransport(smtp);
transport.connnect(host, user, password);
// hoc bn có th gi phng thc transport.connnect();
transport.sendMessage(message, message.getAllRecipients());
transport.close();

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×