国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
javamail的簡單實現(xiàn)--lotusxyhf
javamail的簡單實現(xiàn)
1。基本的發(fā)郵件操作
public static void sendMessage
(
Session session,
String from,
String[] to,
String[] cc,
String[] bcc,
String subject,
String content,
String mimeType
)
throws MessagingException
{
Message message = new MimeMessage(session);
// n.b. any default from address is expected to be determined by caller.
if (! StringUtils.isEmpty(from)) {
InternetAddress sentFrom = new InternetAddress(from);
message.setFrom(sentFrom);
if (mLogger.isDebugEnabled()) mLogger.debug("e-mail from: " + sentFrom);
}
if (to!=null)
{
InternetAddress[] sendTo = new InternetAddress[to.length];
for (int i = 0; i < to.length; i++)
{
sendTo[i] = new InternetAddress(to[i]);
if (mLogger.isDebugEnabled()) mLogger.debug("sending e-mail to: " + to[i]);
}
message.setRecipients(Message.RecipientType.TO, sendTo);
}
if (cc != null)
{
InternetAddress[] copyTo = new InternetAddress[cc.length];
for (int i = 0; i < cc.length; i++)
{
copyTo[i] = new InternetAddress(cc[i]);
if (mLogger.isDebugEnabled()) mLogger.debug("copying e-mail to: " + cc[i]);
}
message.setRecipients(Message.RecipientType.CC, copyTo);
}
if (bcc != null)
{
InternetAddress[] copyTo = new InternetAddress[bcc.length];
for (int i = 0; i < bcc.length; i++)
{
copyTo[i] = new InternetAddress(bcc[i]);
if (mLogger.isDebugEnabled()) mLogger.debug("blind copying e-mail to: " + bcc[i]);
}
message.setRecipients(Message.RecipientType.BCC, copyTo);
}
message.setSubject((subject == null) ? "(no subject)" : subject);
message.setContent(content, mimeType);
// First collect all the addresses together.
Address[] remainingAddresses = message.getAllRecipients();
int nAddresses = remainingAddresses.length;
boolean bFailedToSome = false;
SendFailedException sendex = new SendFailedException("Unable to send message to some recipients");
// Try to send while there remain some potentially good addresses
do
{
// Avoid a loop if we are stuck
nAddresses = remainingAddresses.length;
try
{
// Send to the list of remaining addresses, ignoring the addresses attached to the message
Transport.send(message,remainingAddresses);
}
catch(SendFailedException ex)
{
bFailedToSome=true;
sendex.setNextException(ex);
// Extract the remaining potentially good addresses
remainingAddresses=ex.getValidUnsentAddresses();
}
} while (remainingAddresses!=null && remainingAddresses.length>0 && remainingAddresses.length!=nAddresses);
if (bFailedToSome) throw sendex;
}
2。附件的發(fā)送:
發(fā)送附件非常像轉(zhuǎn)發(fā)消息。您建立各部分以組成完整消息。完成第一部件,即消息正文后,您添加其它部件,其中每個 DataHandler 都代表附件,而不是轉(zhuǎn)發(fā)消息情況下的共享處理程序。如果從文件中讀附件,附件的數(shù)據(jù)源是 FileDataSource。而如果從 URL 中讀時,附件的數(shù)據(jù)源是 URLDataSource。一旦存在 DataSource,只要先把它傳遞給 DataHandler 構(gòu)造器,最后再用 setDataHandler() 把它附加到 BodyPart。假定您要保留附件的原始文件名,最終要做的是用 BodyPart 的 setFileName() 方法設(shè)置與附件相關(guān)的文件名。如下所示:
// Define message
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
message.setSubject("Hello JavaMail Attachment");
// Create the message part
BodyPart messageBodyPart = new MimeBodyPart();
// Fill the message
messageBodyPart.setText("Pardon Ideas");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
// Part two is attachment
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
// Put parts in message
message.setContent(multipart);
// Send the message
Transport.send(message);
就消息引入附件時,若程序是個 servlet (小服務(wù)程序),除告知消息發(fā)送到何處外,還必需上載附件??梢詫?multipart/form-data 表單編碼類型(form encoding type)用于每個上載文件的處理。 注意:消息大小由 SMTP 服務(wù)器而不是 JavaMail API 來限制。
3:附件的獲取:
從消息中獲取附件比發(fā)送它們棘手些,因為 MIME 沒有簡單的關(guān)于附件的概念。當(dāng)消息包含附件時,消息的內(nèi)容是個 Multipart 對象。接著,您需要處理每個 Part,獲取主要內(nèi)容和附件。標(biāo)有從 part.getDisposition() 獲得的 Part.ATTACHMENT 配置(disposition)的部件(Part)無疑就是附件。但是,沒有配置(以及一個非文本 MIME 類型)和帶 Part.INLINE 配置的部件也可能是附件。當(dāng)配置要么是 Part.ATTACHMENT,要么是 Part.INLINE 時,這個消息部件的內(nèi)容就能被保存。只要用 getFileName() 和 getInputStream() 就能分別得到原始文件名和輸入流。
Multipart mp = (Multipart)message.getContent();
for (int i=0, n=multipart.getCount(); i<n; i++) {
Part part = multipart.getBodyPart(i));
String disposition = part.getDisposition();
if ((disposition != null) &&
((disposition.equals(Part.ATTACHMENT) ||
(disposition.equals(Part.INLINE))) {
saveFile(part.getFileName(), part.getInputStream());
}
}
saveFile() 方法僅依據(jù)文件名創(chuàng)建了一個 File,它從輸入流中將字節(jié)讀出,然后寫入到文件中。萬一文件已經(jīng)存在,就在文件名后添加一個數(shù)字作為新文件名,如果這個文件名仍存在,則繼續(xù)添,直到找不到這樣的文件名為止。
// from saveFile()
File file = new File(filename);
for (int i=0; file.exists(); i++) {
file = new File(filename+i);
}
上面的代碼涵蓋了最簡單的情況 - 消息中各部件恰當(dāng)?shù)臉?biāo)記了。要涵蓋所有情況,還要在配置為空時進(jìn)行處理,并且獲取部件的 MIME 類型來進(jìn)行相應(yīng)處理。
if (disposition == null) {
// Check if plain
MimeBodyPart mbp = (MimeBodyPart)part;
if (mbp.isMimeType("text/plain")) {
// Handle plain
} else {
// Special non-attachment cases here of image/gif, text/html, ...
}
...
}
如何一次發(fā)送多個郵件?
取得必要的Transport對象并調(diào)用SendMessage()發(fā)送每一個郵件。注意在調(diào)用之間設(shè)置或改變接收者。
Message message = …;
Transport t = session.getTransport("smtp");
t.connect();
message.setRecipient(Message.RecipientType.TO,recipient1);
t.sendMessage(message,recipient);
message.setRecipient(Message.RecipientType.TO,recipient2);
t.sendMessage(message,recipient);
message.setRecipient(Message.RecipientType.TO,recipient3);
t.sendMessage(message,recipient);
t.close();
如何保存郵件?
用MimeMessage類的writeTo()方法可以實現(xiàn)。用Message類的對象不能實現(xiàn)。
FileOutputStream fos = new FileOutputStream("test.mail");
Mimemessage.writeTo(fos);
怎樣發(fā)送帶有圖像的HTML格式郵件?
一些圖像還是放在服務(wù)器上較好,讓用戶的郵件工具處理。讀者可以將圖像作為附件或HTML體發(fā)送。如果所有附件保存在同一個目錄下,那么必須用不同的圖像文件名以確保郵件工具不會顯示其他圖片。另外圖像URL要用絕對路徑,不能用相對路徑。
如何設(shè)置∕獲取郵件的優(yōu)先級?
設(shè)置郵件的優(yōu)先級,只需在消息頭中添加"X-Priority"屬性:
MimeMessage msg;
Msg.addHeader("X-Priority","1");
同樣道理,要獲取郵件的優(yōu)先級只要獲取"X-Priority"屬性的值就可以了:
String priority = msg.getHeader("X-Priority");
附錄:Java Mail API的基本概念
什么是Java Mail API
JavaMail API 是一個用于閱讀、編寫和發(fā)送電子郵件的可選包(標(biāo)準(zhǔn)擴(kuò)展)。與 Eudora、pine 及 Microsoft Outlook 相似,這個包用來創(chuàng)建郵件用戶代理(Mail User Agent,MUA) 類型程序。API 的主要用途并不在于傳輸、發(fā)送和轉(zhuǎn)發(fā)消息;這一功能范圍屬于某些應(yīng)用程序,如 sendmail 及其它郵件傳輸代理(Mail Transfer Agent,MTA)類型程序。MUA 類型的程序能讓用戶閱讀和書寫郵件,而它卻依賴 MTA 處理實際發(fā)送。
什么是SMTP
SMTP(Simple Mail Transfer Protocol),即簡單郵件傳輸協(xié)議,它定義了發(fā)送電子郵件的機制。在 JavaMail API 環(huán)境中,基于 JavaMail 的程序?qū)⒑湍墓净蛞蛱鼐W(wǎng)服務(wù)供應(yīng)商的(Internet Service Provider's,ISP's)SMTP 服務(wù)器通信。SMTP 服務(wù)器可將消息中轉(zhuǎn)至接收方 SMTP 服務(wù)器,以便最終讓用戶經(jīng)由 POP 或 IMAP 獲得。這不是要求 SMTP 服務(wù)器成為開放的中繼,盡管 SMTP 服務(wù)器支持身份驗證,不過還是得確保它的配置正確。像配置服務(wù)器來中繼消息或添加刪除郵件賬號這類任務(wù)的實現(xiàn),JavaMail API 中并不支持。
什么是POP
POP(Post Office Protocol),即郵局協(xié)議。目前用的是版本3,所以人們通常將它稱為 POP3,RFC 1939 定義了這個協(xié)議。POP 和SMTP一樣,也是一種機制,Internet上大多數(shù)人通過它得到郵件。該協(xié)議規(guī)定每個用戶只能有一個郵箱的支持。這就是它所能做的,而這也造成了許多混淆。使用 POP 時,用戶熟悉的許多性能并不是由 POP 協(xié)議支持的,如查看有幾封新郵件消息這一性能。這些性能內(nèi)建于如 Eudora 或 Microsoft Outlook 之類的程序中,它們能記住一些事,諸如最近一次收到的郵件,還能計算出有多少是新的。所以當(dāng)使用 JavaMail API 時,如果讀者想要這類信息,就只能由自己來計算了。
什么是IMAP
IMAP(Internet Message Access Protocol),即Internet消息訪問協(xié)議,是更高級的用于接收消息的協(xié)議,在 RFC 2060 中有它的定義。目前使用的IMAP版本為4,人們習(xí)慣將它稱為 IMAP4。在用到 IMAP 時,郵件服務(wù)器必需支持這個協(xié)議。不能僅僅把使用 POP 的程序用于 IMAP,并指望它支持 IMAP 所有性能。假設(shè)郵件服務(wù)器支持 IMAP,基于 JavaMail 的程序可以利用這種情況--用戶在服務(wù)器上可以有多個文件夾(folder),并且這些文件夾可以被多個用戶共享。
因為有這一更高級的性能,您也許會認(rèn)為所有用戶都會使用 IMAP。事實并不是這樣。要求服務(wù)器接收新消息,在用戶請求時發(fā)送到用戶手中,還要在每個用戶的多個文件夾中維護(hù)消息。這樣雖然能將消息集中備份,但隨著用戶長期的郵件夾越來越大,到磁盤空間耗盡時,每個用戶都會受到損失。使用 POP,就能卸載郵件服務(wù)器上保存的消息了。
什么是MIME
MIME(Multipurpose Internet Mail Extensions),即多用途Internet郵件擴(kuò)展標(biāo)準(zhǔn)。它不是郵件傳輸協(xié)議,而是對傳輸內(nèi)容的消息、附件及其它的內(nèi)容定義了格式。這里有很多不同的RFC(Requirement of Comment)文檔:RFC 822、RFC 2045、RFC 2046 和 RFC 2047。作為一個 JavaMail API 的用戶,您通常不必對這些格式操心。無論如何,一定存在這些格式而且程序會用到它。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
JavaMail API詳解
JavaMail使用教程
JavaMail發(fā)送和接收
JSP與Java Mail API
用JavaMail API編寫可帶附件的郵件發(fā)送程序
使用 JavaMail 收發(fā)郵件,解決中文附件問題
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服