一起草最新网址_日韩一区二区麻豆国产_91视频婷婷_日本一区二区视频在线_日韩激情一区二区三区_国产另类第一区_成人免费在线播放视频_亚洲永久精品ww.7491进入_久久这里有精品视频_久久精品一级片_日韩av在线网页_波多野结衣不卡视频

Java mail 詳解與實例_JSP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:解答JavaMail的安裝和配置問題
問. 我如何安裝 JavaMail API 實現? 答:解壓縮分發的 zip 文件,并編輯 CLASSPATH 環境變量以包含 mail.jar 文件,該文件包括在 JavaMail API 分發中。你也需要 JavaBeans Activation Framework(參見下面)的實現。參閱 README 文件(在分發中),獲得其

 綜述:Java Mail API的開發是SUN為Java開發者提供公用API框架的持續努力的良好例證。提倡公用框架,反對受限于供應商的解決方案,充分預示著一個日益開放的開發環境的建立。
  Java Mail API的結構本身證明了它的開發者的基本目標之一--軟件開發的工作量應該取決于應用程序本身的復雜程度以及開發者所要求的控制程度。換句話說,Java Mail API盡可能地保持簡單。乍看起來,Java Mail API所擁有的類總數以及類之間的關系可能讓人誤解為要花費漫長的學習時間。實際上,一旦正式開始使用,你就會發現該API不失為在應用程序中加入健壯的郵件/通訊支持的簡單工具。
  建立JavaMail使用環境,需要哪些軟件

  首先,需要安裝JavaMail API。現在有兩種常用的 JavaMail API 版本:1.2 和 1.1.3。雖然版本 1.2 是最新版,但版本 1.1.3 包含了Java 2 平臺企業版(Java 2 Platform, Enterprise Edition,J2EE)的版本 1.2.1,所以仍然有很多人使用它。
  ·JavaMail 1.2 的安裝
  要使用 JavaMail 1.2 API,請下載 JavaMail 1.2 實現,解開Javamail-1_2.zip 文件,并將 mail.jar 文件添加到 CLASSPATH 中。除了核心類,隨版本 1.2 實現一起提供的還有 SMTP、IMAP4 和 POP3 供應商。
  · JavaMail 1.1.3 的安裝
  要使用 JavaMail 1.1.3 API,請下載 JavaMail 1.1.3 實現,解開Javamail1_1_3.zip文件,并將 mail.jar 文件添加到您的 CLASSPATH 中。除了核心類,隨版本 1.1.3 實現一起提供的還有 SMTP 和 IMAP4 供應商。
  如果您用 JavaMail 1.1.3 訪問一個 POP 服務器,請下載并安裝一個 POP3 供應商。Sun 就有一個獨立于 JavaMail 實現。下載并解開 pop31_1_1.zip 文件后,將 pop3.jar 也添加到您的 CLASSPATH 中。
  其次是JavaBeans Activation Framework 的安裝。JavaMail API 的所有版本都需要 JavaBeans Activation Framework 來支持任意數據塊的輸入及相應處理。功能似乎不多,但目前許多瀏覽器和郵件工具中都能找到這種基本的 MIME 型支持。下載完框架后,解開 jaf1_0_1.zip 文件,并將 activation.jar 文件添加到 CLASSPATH 中。
  對于 JavaMail 1.2 用戶來說,現在您應該已將 mail.jar 和 activation.jar 文件添加到 CLASSPATH 中了。
  而對于 JavaMail 1.1.3 用戶,現在您應該已將 mail.jar、pop3.jar和 activation.jar文件添加到 CLASSPATH 中了。如果不打算用 POP3,就不必將 pop3.jar 添加到 CLASSPATH 中去。
  如果您不想更改 CLASSPATH 環境變量,將 jar 文件復制到您 Java 運行時環境(Java Runtime Environment,JRE)目錄下的 lib/ext 目錄中去。例如,J2SE 1.3 發行版的缺省目錄在 Windows 平臺的 C:\jdk1.3\jre\lib\ext。

  Java Mail API有哪些核心類

  ·Javax.mail.Session:Session 類定義了一個基本郵件會話(session),是Java Mail API最高層入口類。所有其它類都是經由這個session 才得以生效。Session 對象用 Java.util.Properties 對象獲取信息,如郵件服務器、用戶名、密碼及整個應用程序中共享的其它信息。
  ·Javax.mail.Message:一旦獲得 Session 對象,就可以繼續創建要發送的消息。這由 Message 類來完成。因為 Message 是個抽象類,必需用一個子類,多數情況下為 Javax.mail.internet.MimeMessage。MimeMessage 是個能理解 MIME 類型和頭的電子郵件消息,正如不同 RFC 中所定義的。雖然在某些頭部域非 ASCII 字符也能被譯碼,但 Message 頭只能被限制為用 US-ASCII 字符。
  ·Javax.mail.Address:一旦您創建了 Session 和 Message,并將內容填入消息后,就可以用 Address 確定信件地址了。和 Message 一樣,Address 也是個抽象類。您用的是 Javax.mail.internet.InternetAddress 類。
  ·Javax.mail. Authenticator:與 Java.net 類一樣,JavaMail API 也可以利用 Authenticator 通過用戶名和密碼訪問受保護的資源。對于JavaMail API 來說,這些資源就是郵件服務器。JavaMail Authenticator 在 Javax.mail 包中,而且它和 Java.net 中同名的類 Authenticator 不同。兩者并不共享同一個 Authenticator,因為JavaMail API 用于 Java 1.1,它沒有 Java.net 類別。
要使用 Authenticator,先創建一個抽象類的子類,并從 getPasswordAuthentication() 方法中返回 PasswordAuthentication 實例。創建完成后,您必需向 session 注冊 Authenticator。然后,在需要認證的時候,就會通知 Authenticator。您可以彈出窗口,也可以從配置文件中(雖然沒有加密是不安全的)讀取用戶名和密碼,將它們作為 PasswordAuthentication 對象返回給調用程序。
  ·Javax.mail.Transport:消息發送的最后一部分是使用 Transport 類。這個類用協議指定的語言發送消息(通常是 SMTP)。它是抽象類,它的工作方式與 Session 有些類似。僅調用靜態 send() 方法,就能使用類的 缺省 版本:Transport.send(message);或者,讀者也可以從針對自己的協議的會話中獲得一個特定的實例,傳遞用戶名和密碼(如果不必要就不傳),發送消息,然后關閉連接。
  ·Javax.mail.Store:Store類實現特定郵件協議上的讀、寫、監視、查找等操作。通過Javax.mail.Store類可以訪問Javax.mail.Folder類。
  ·Javax.mail.Folder:Folder類用于分級組織郵件,并提供照Javax.mail.Message格式訪問email的能力。

使用java發送郵件 

import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.io.*;
import java.util.*;

public class SendMail {
public SendMail() {
}

public static void main(String[] args) {
try {
Authenticator auth = new PopupAuthenticator();
Properties mailProps = new Properties();
mailProps.put("mail.smtp.host", "smtp.163.com");
mailProps.put("mail.smtp.auth", "true");
mailProps.put("username", "pyrgz");
mailProps.put("password", "123456789");
Session mailSession = Session.getDefaultInstance(mailProps, auth);
MimeMessage message = new MimeMessage(mailSession);
message.setFrom(new InternetAddress("pyrgz@163.com"));
message.setRecipient(Message.RecipientType.TO, new InternetAddress(
"pyrgz@163.com"));
message.setSubject("Mail Test");
MimeMultipart multi = new MimeMultipart();
BodyPart textBodyPart = new MimeBodyPart();
textBodyPart.setText("Hello World!");
multi.addBodyPart(textBodyPart);
message.setContent(multi);
message.saveChanges();
Transport.send(message);
} catch (Exception ex) {
System.err.println("郵件發送失敗的原因是:" + ex.getMessage());
System.err.println("具體錯誤原因:");
ex.printStackTrace(System.err);
}
}
}

class PopupAuthenticator extends Authenticator {
public PasswordAuthentication getPasswordAuthentication() {
String username = "pyrgz"; // 163郵箱登錄帳號
String pwd = "123456789"; // 登錄密碼
return new PasswordAuthentication(username, pwd);
}
}

 怎樣使用JSP發送email?

  下面我們通過一個簡單的例子,來說明在JSP中郵件是如何發送的。該例由兩個文件組成。一個是HTML文件,用來建立郵件信息(包括發送人、接收人、主題等)的表單,并將表單內容發送給JSP文件;另外一個是JSP頁面,負責郵件的發送。

HTML文件

<HTML>
<HEAD>
<TITLE>發送郵件</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"></HEAD>
<BODY>
<FORM action="sendmail.jsp" method="post" name="form1">
<TABLE align="center">
<TR>
<TD width="50%">
T<BR><INPUT name="to" size="25">
</TD>
<TD width="50%">
From:<BR><INPUT name="from" size="25">
</TD>
</TR>
<TR>
<TD colspan="2">
Subject:<BR><INPUT name="subject" size="50">
</TD>
</TR>
<TR>
<TD colspan="2">
<P>Message:<BR>
<TEXTAREA name="text" rows=25 cols=85></TEXTAREA>
</P>
</TD>
</TR>
</TABLE>
<INPUT type="submit" name="cb_submit" value=" Send ">
<INPUT type="reset" name="cb_reset" value=" Clear ">
</FORM>
</BODY>
</HTML>

  JSP頁面的作用就是獲得表單提交過來的數據,并將這些數據賦給Java Mail API中相應的對象,最后完成郵件發送。

sendmail.jsp文件

<%@ page import=" Javax.mail.*, Javax.mail.internet.*, Javax.activation.*,Java.util.*"%>
<html>
<head>
<TITLE>JSP meets JavaMail, what a sweet combo.</TITLE>
</head>
<body>
<%
try{
Properties props = new Properties();
Session sendMailSession;
Store store;
Transport transport;

sendMailSession = Session.getInstance(props, null);
props.put("mail.smtp.host", "smtp.jspinsider.com");
Message newMessage = new MimeMessage(sendMailSession);
newMessage.setFrom(new InternetAddress(request.getParameter("from")));
newMessage.setRecipient(Message.RecipientType.TO, new InternetAddress ( request.getParameter ("to")));
newMessage.setSubject(request.getParameter("subject"));
newMessage.setSentDate(new Date());
newMessage.setText(request.getParameter("text"));
transport = sendMailSession.getTransport("smtp");
transport.send(newMessage);
%>
<P>Your mail has been sent.</P>
<%
}catch(MessagingException m)
{
out.println(m.toString());
}
%>
</body>
</html>

  如何發送HTML類型的郵件

  在上面的例子中,我們實現了如何發送文本格式的郵件,那么HTML格式的郵件該如何發送呢?那就看看下面的例子吧。
  該例由四個文件組成:
  ·form.htm:用來建立郵件信息的表單
  ·send.jsp:用來獲取表單提交的信息,并調用mymail.mail.HTML.send()方法發送郵件
  ·StringDataSource.Java:用戶自定義的JavaBean,用來將郵件的Body部分轉化為HTML格式
  ·HTML.Java:用戶自定義的JavaBean,用來發送HTML格式的郵件。在send.jsp文件中提到的mymail.mail.HTML.send()方法就在該JavaBean中定義。

form.htm
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title> JavaMail - 發送HTML郵件</title>
</head>
<body>
<form method="post" action="send.jsp">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td>SMTP主機:</td>
<td><input type="text" name="smtp" size="80"></td>
</tr>
<tr>
<td>發信人:</td>
<td><input type="text" name="from" size="80"></td>
</tr>
<tr>
<td>收信人:</td>
<td><input type="text" name="to" size="80"></td>
</tr>
<tr>
<td>抄送人:</td>
<td><input type="text" name="cc" size="80"></td>
</tr>
<tr>
<td>暗送人:</td>
<td><input type="text" name="bcc" size="80"></td>
</tr>
<tr>
<td>主題:</td>
<td><input type="text" name="subject" size="80"></td>
</tr>
<tr>
<td valign="top">內容:</td>
<td><textarea name="body" rows="5" cols="80"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="發送"></td>
</tr>
</table>
</form>
</body>
</html>

send.jsp
<%
//變量聲明
Java.lang.String smtp,from,to,cc,bcc,subject,body;

//獲得用戶輸入數據
smtp = request.getParameter("smtp");
from = request.getParameter("from");
to = request.getParameter("to");
cc = request.getParameter("cc");
bcc = request.getParameter("bcc");
subject = request.getParameter("subject");
if(subject!=null){
subject = new Java.lang.String(subject.getBytes("iso-8859-1"));
}
body = request.getParameter("body");
//發送郵件
mymail.mail.HTML.send(smtp,from,to,cc,bcc,subject,body);
%>

mymail.jaf.StringDataSource.Java
package mymail.jaf;
public class StringDataSource implements Javax.activation.DataSource
{
private Java.lang.String data;
  private Java.lang.String type;

    public StringDataSource(Java.lang.String data,Java.lang.String type){
        this.data = data;
  this.type = type;
  }

    public Java.io.InputStream getInputStream() throws Java.io.IOException{
        return new Java.io.StringBufferInputStream(data);
}

  public Java.io.OutputStream getOutputStream() throws Java.io.IOException{
      throw new Java.io.IOException("it does not support this method now!");
 }

 public Java.lang.String getContentType(){
          return type;
}

  public Java.lang.String getName(){
      return " mymail ";
}
}

mymail.mail.HTML.Java
package mymail.mail;

public final class HTML
{
public static void send(
   Java.lang.String smtp,   /*SMTP主機地址*/
   Java.lang.String from,   /*發信人*/
    Java.lang.String to,   /*收信人*/
    Java.lang.String cc,   /*抄送人*/
    Java.lang.String bcc,  /*暗送人*/
    Java.lang.String subject, /*主題*/
    Java.lang.String body /*內容*/
        ) throws Java.lang.Exception
{
   //變量聲明
     Java.util.Properties props;   //系統屬性
   Javax.mail.Session mailSession;   //郵件會話對象
     Javax.mail.internet.MimeMessage mimeMsg; //MIME郵件對象

   //設置系統屬性
     props = Java.lang.System.getProperties(); //獲得系統屬性對象
   props.put("mail.smtp.host",smtp); //設置SMTP主機

     //獲得郵件會話對象
   mailSession = Javax.mail.Session.getDefaultInstance(props,null);

     //創建MIME郵件對象
   mimeMsg = new Javax.mail.internet.MimeMessage(mailSession);

     //設置發信人
   mimeMsg.setFrom(new Javax.mail.internet.InternetAddress(from));

     //設置收信人
   if(to!=null)
{
mimeMsg.setRecipients(Javax.mail.Message.RecipientType.TO,Javax.mail. internet.InternetAddress.parse(to));
     }

   //設置抄送人
     if(cc!=null)
{
mimeMsg.setRecipients(Javax.mail.Message.RecipientType.CC,Javax.mail. internet.InternetAddress.parse(cc));
     }

//設置暗送人
if(bcc!=null)
{
mimeMsg.setRecipients(Javax.mail.Message.RecipientType.BCC,Javax.mail. internet.InternetAddress.parse(bcc));
     }

   設置郵件主題
     //mimeMsg.setSubject(subject);
   mimeMsg.setSubject(subject,"gb2312");

     //設置郵件內容,將郵件body部分轉化為HTML格式
   mimeMsg.setDataHandler(new Javax.activation.DataHandler(new mymail.jaf. StringDataSource (body,"text/html")));

   //發送郵件
     Javax.mail.Transport.send(mimeMsg);
 }
}

  如何實現消息和標志的刪除?

  消息的刪除涉及到與消息相關的 Flags(標志)。不同 flag 表示不同的狀態,有些標志由系統定義,而有些則由用戶自己定義。下面列出在內部類 Flags.Flag 中預定義的標志:
  ·Flags.Flag.ANSWERED
  ·Flags.Flag.DELETED
  ·Flags.Flag.DRAFT
  ·Flags.Flag.FLAGGED
  ·Flags.Flag.RECENT
  ·Flags.Flag.SEEN
  ·Flags.Flag.USER
  上述這些標志只是標準定義,并不意味著所有郵件服務器或供應商都支持所有這些標志。例如,除了刪除消息標志外,POP 協議不再支持其它任何標志。檢查是否存在新郵件,這不是個 POP 任務,而是內建于郵件客戶機的任務。為找出哪些標志能被支持,可以用 getPermanentFlags() 向 folder 提出請求。
  要刪除消息,您可以設置消息的 DELETED flag:
  message.setFlag(Flags.Flag.DELETED, true);
  首先,請以 READ_WRITE 模式打開 folder:
  folder.open(Folder.READ_WRITE);
  然后,當所有消息的處理完成后,關閉 folder,并傳遞一個 true 值,從而擦除(expunge)有 delete 標志的消息。
  folder.close(true);
  一個 Folder 的 expunge() 方法可以用來刪除消息。但 Sun 的 POP3 供應商不支持。其它供應商有的或許能夠實現這一功能,而有的則不能。IMAP 供應商極有可能實現此功能。因為 POP 只支持單個對郵箱的訪問,對 Sun 的供應商來說,您必需關閉 folder 以刪除消息。
  要取消標志,只要傳遞 false 給 setFlag() 方法就行了。想知道是否設置過標志,可以用 isSet() 檢查。

  如何實現認證?

  想必讀者已經知道 ,如果需要可以用一個 Authenticator 提示用戶輸入用戶名和密碼,而不是將用戶名和密碼作為字符串傳遞。在這里您會明確了解怎樣更充分的使用Java Mail API的認證機制。
  不用主機、用戶名和密碼與 Store 相連接,而是設置 Properties 來擁有主機,然后告訴 Session 自定義的 Authenticator 實例,如下所示:

// Setup properties
Properties props = System.getProperties();
props.put("mail.pop3.host", host);

// Setup authentication, get session
Authenticator auth = new PopupAuthenticator();
Session session = Session.getDefaultInstance(props, auth);

// Get the store
Store store = session.getStore("pop3");
store.connect();

  然后,創建一個 Authenticator 子類并從 getPasswordAuthentication() 方法中返回 PasswordAuthentication 對象。下面就是這樣一種實現,其中用戶名和密碼僅占用一個域。(這不是一個 Swing 工程教程;只要將兩部分輸入同一個域,用逗號分隔就行。)

import Javax.mail.*;
import Javax.swing.*;
import Java.util.*;

public class PopupAuthenticator extends Authenticator
{
public PasswordAuthentication getPasswordAuthentication()
{
String username, password;
  String result = JOptionPane.showInputDialog("Enter 'username,password'");
  StringTokenizer st = new StringTokenizer(result, ",");
  username = st.nextToken();
  password = st.nextToken();
  return new PasswordAuthentication(username, password);
        }
}

  因為 PopupAuthenticator 涉及到 Swing,它會啟動 AWT 的事件處理線程。這一點基本上要求您在代碼中添加一個對 System.exit() 的調用來終止程序。

  如何實現消息的轉發?

  轉發消息,相對于其他功能來說,顯得有些棘手。沒有單獨的方法可以供調用,讀者必須通過對組成消息各部分的處理來組織要轉發的消息。
  一條郵件消息可以由多個部分組成。在處理 MIME 消息時,消息中每部分都是 BodyPart,再特殊些,是 MimeBodyPart。不同的 body part(信體部件或正文部件)結合成一個容器,名為 Multipart,再特殊些,就是 MimeMultipart。要轉發一條消息,您為自己的消息正文創建一個部件,要轉發的消息作為另一部件。并且將兩個部件結合成一個 multipart(多部件)。然后您將這個 multipart 添加到一則已寫好恰當地址的消息中,并發送。
  本質上就是如此。要將一條消息內容復制到另一條,只要復制 DataHandler (JavaBeans Activation Framework 中的類)就行了。

// Create the message to forward
Message forward = new MimeMessage(session);
// Fill in header
forward.setSubject("Fwd: " + message.getSubject());
forward.setFrom(new InternetAddress(from));
forward.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Create your new message part
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText( "Here you go with the original message:\n\n");
// Create a multi-part to combine the parts
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);

// Create and fill part for the forwarded content
messageBodyPart = new MimeBodyPart();
messageBodyPart.setDataHandler(message.getDataHandler());

// Add part to multi part
multipart.addBodyPart(messageBodyPart);

// Associate multi-part with message
forward.setContent(multipart);

// Send message
Transport.send(forward);

  怎樣處理附件?

  附件是郵件消息的相關資源,如通常不包含在消息正文里文本文件、電子表格或圖像等。常見的郵件程序,如 Eudora 和 pine 之類,可以用 JavaMail API 將資源 attach(附加) 到您的消息上,就可以在收到消息時得到。

  附件的發送:

  發送附件非常像轉發消息。您建立各部分以組成完整消息。完成第一部件,即消息正文后,您添加其它部件,其中每個 DataHandler 都代表附件,而不是轉發消息情況下的共享處理程序。如果從文件中讀附件,附件的數據源是 FileDataSource。而如果從 URL 中讀時,附件的數據源是 URLDataSource。一旦存在 DataSource,只要先把它傳遞給 DataHandler 構造器,最后再用 setDataHandler() 把它附加到 BodyPart。假定您要保留附件的原始文件名,最終要做的是用 BodyPart 的 setFileName() 方法設置與附件相關的文件名。如下所示:

 // 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 (小服務程序),除告知消息發送到何處外,還必需上載附件。可以將 multipart/form-data 表單編碼類型(form encoding type)用于每個上載文件的處理。

<FORM ENCTYPE="multipart/form-data"
  method=post action="/myservlet">
 <INPUT TYPE="file" NAME="thefile">
 <INPUT TYPE="submit" VALUE="Upload">
</FORM>

  注意:消息大小由 SMTP 服務器而不是 JavaMail API 來限制。如果您碰到問題,可以考慮用設置 ms 和 mx 參數的方法增大 Java 堆大小。

  附件的獲取:

  從消息中獲取附件比發送它們棘手些,因為 MIME 沒有簡單的關于附件的概念。當消息包含附件時,消息的內容是個 Multipart 對象。接著,您需要處理每個 Part,獲取主要內容和附件。標有從 part.getDisposition() 獲得的 Part.ATTACHMENT 配置(disposition)的部件(Part)無疑就是附件。但是,沒有配置(以及一個非文本 MIME 類型)和帶 Part.INLINE 配置的部件也可能是附件。當配置要么是 Part.ATTACHMENT,要么是 Part.INLINE 時,這個消息部件的內容就能被保存。只要用 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() 方法僅依據文件名創建了一個 File,它從輸入流中將字節讀出,然后寫入到文件中。萬一文件已經存在,就在文件名后添加一個數字作為新文件名,如果這個文件名仍存在,則繼續添,直到找不到這樣的文件名為止。

// from saveFile()
File file = new File(filename);
for (int i=0; file.exists(); i++) {
file = new File(filename+i);
}

  上面的代碼涵蓋了最簡單的情況 - 消息中各部件恰當的標記了。要涵蓋所有情況,還要在配置為空時進行處理,并且獲取部件的 MIME 類型來進行相應處理。

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, ...
 }
...
}

  如何一次發送多個郵件?

  取得必要的Transport對象并調用SendMessage()發送每一個郵件。注意在調用之間設置或改變接收者。

    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()方法可以實現。用Message類的對象不能實現。

    FileOutputStream fos = new FileOutputStream("test.mail");
    Mimemessage.writeTo(fos);

  怎樣發送帶有圖像的HTML格式郵件?

  一些圖像還是放在服務器上較好,讓用戶的郵件工具處理。讀者可以將圖像作為附件或HTML體發送。如果所有附件保存在同一個目錄下,那么必須用不同的圖像文件名以確保郵件工具不會顯示其他圖片。另外圖像URL要用絕對路徑,不能用相對路徑。

  如何設置∕獲取郵件的優先級?

  設置郵件的優先級,只需在消息頭中添加"X-Priority"屬性:
  MimeMessage msg;
  Msg.addHeader("X-Priority","1");
  同樣道理,要獲取郵件的優先級只要獲取"X-Priority"屬性的值就可以了:
String priority = msg.getHeader("X-Priority");

  附錄:Java Mail API的基本概念

  什么是Java Mail API

  JavaMail API 是一個用于閱讀、編寫和發送電子郵件的可選包(標準擴展)。與 Eudora、pine 及 Microsoft Outlook 相似,這個包用來創建郵件用戶代理(Mail User Agent,MUA) 類型程序。API 的主要用途并不在于傳輸、發送和轉發消息;這一功能范圍屬于某些應用程序,如 sendmail 及其它郵件傳輸代理(Mail Transfer Agent,MTA)類型程序。MUA 類型的程序能讓用戶閱讀和書寫郵件,而它卻依賴 MTA 處理實際發送。

  什么是SMTP

  SMTP(Simple Mail Transfer Protocol),即簡單郵件傳輸協議,它定義了發送電子郵件的機制。在 JavaMail API 環境中,基于 JavaMail 的程序將和您的公司或因特網服務供應商的(Internet Service Provider's,ISP's)SMTP 服務器通信。SMTP 服務器可將消息中轉至接收方 SMTP 服務器,以便最終讓用戶經由 POP 或 IMAP 獲得。這不是要求 SMTP 服務器成為開放的中繼,盡管 SMTP 服務器支持身份驗證,不過還是得確保它的配置正確。像配置服務器來中繼消息或添加刪除郵件賬號這類任務的實現,JavaMail API 中并不支持。

  什么是POP

  POP(Post Office Protocol),即郵局協議。目前用的是版本3,所以人們通常將它稱為 POP3,RFC 1939 定義了這個協議。POP 和SMTP一樣,也是一種機制,Internet上大多數人通過它得到郵件。該協議規定每個用戶只能有一個郵箱的支持。這就是它所能做的,而這也造成了許多混淆。使用 POP 時,用戶熟悉的許多性能并不是由 POP 協議支持的,如查看有幾封新郵件消息這一性能。這些性能內建于如 Eudora 或 Microsoft Outlook 之類的程序中,它們能記住一些事,諸如最近一次收到的郵件,還能計算出有多少是新的。所以當使用 JavaMail API 時,如果讀者想要這類信息,就只能由自己來計算了。

  什么是IMAP

  IMAP(Internet Message Access Protocol),即Internet消息訪問協議,是更高級的用于接收消息的協議,在 RFC 2060 中有它的定義。目前使用的IMAP版本為4,人們習慣將它稱為 IMAP4。在用到 IMAP 時,郵件服務器必需支持這個協議。不能僅僅把使用 POP 的程序用于 IMAP,并指望它支持 IMAP 所有性能。假設郵件服務器支持 IMAP,基于 JavaMail 的程序可以利用這種情況--用戶在服務器上可以有多個文件夾(folder),并且這些文件夾可以被多個用戶共享。
  因為有這一更高級的性能,您也許會認為所有用戶都會使用 IMAP。事實并不是這樣。要求服務器接收新消息,在用戶請求時發送到用戶手中,還要在每個用戶的多個文件夾中維護消息。這樣雖然能將消息集中備份,但隨著用戶長期的郵件夾越來越大,到磁盤空間耗盡時,每個用戶都會受到損失。使用 POP,就能卸載郵件服務器上保存的消息了。

  什么是MIME

  MIME(Multipurpose Internet Mail Extensions),即多用途Internet郵件擴展標準。它不是郵件傳輸協議,而是對傳輸內容的消息、附件及其它的內容定義了格式。這里有很多不同的RFC(Requirement of Comment)文檔:RFC 822、RFC 2045、RFC 2046 和 RFC 2047。作為一個 JavaMail API 的用戶,您通常不必對這些格式操心。無論如何,一定存在這些格式而且程序會用到它。

規范格式的代碼
import java.util.* ;
import java.io.* ;
import javax.mail.* ;
import javax.mail.internet.* ;
import javax.activation.* ;
public class Mail {
//定義發件人、收件人、SMTP服務器、用戶名、密碼、主題、內容等
private String displayName;
private String to;
private String from;
private String smtpServer;
private String username;
private String password;
private String subject;
private String content;
private boolean ifAuth; //服務器是否要身份認證
private String filename="";
private Vector file = new Vector(); //用于保存發送附件的文件名的集合


/**
* 設置SMTP服務器地址
*/
public void setSmtpServer(String smtpServer){
this.smtpServer=smtpServer;
}

/**
* 設置發件人的地址
*/
public void setFrom(String from){
this.from=from;
}
/**
* 設置顯示的名稱
*/
public void setDisplayName(String displayName){
this.displayName=displayName;
}

/**
* 設置服務器是否需要身份認證
*/
public void setIfAuth(boolean ifAuth){
this.ifAuth=ifAuth;
}

/**
* 設置E-mail用戶名
*/
public void setUserName(String username){
this.username=username;
}

/**
* 設置E-mail密碼
*/
public void setPassword(String password){
this.password=password;
}

/**
* 設置接收者
*/
public void setTo(String to){
this.to=to;
}

/**
* 設置主題
*/
public void setSubject(String subject){
this.subject=subject;
}

/**
* 設置主體內容
*/
public void setContent(String content){
this.content=content;
}

/**
* 該方法用于收集附件名
*/
public void addAttachfile(String fname){
file.addElement(fname);
}

public Mail(){

}

/**
* 初始化SMTP服務器地址、發送者E-mail地址、用戶名、密碼、接收者、主題、內容
*/
public Mail(String smtpServer,String from,String displayName,String username,String password,String to,String subject,String content){
this.smtpServer=smtpServer;
this.from=from;
this.displayName=displayName;
this.ifAuth=true;
this.username=username;
this.password=password;
this.to=to;
this.subject=subject;
this.content=content;
}

/**
* 初始化SMTP服務器地址、發送者E-mail地址、接收者、主題、內容
*/
public Mail(String smtpServer,String from,String displayName,String to,String subject,String content){
this.smtpServer=smtpServer;
this.from=from;
this.displayName=displayName;
this.ifAuth=false;
this.to=to;
this.subject=subject;
this.content=content;
}

/**
* 發送郵件
*/
public HashMap send(){
HashMap map=new HashMap();
map.put("state", "success");
String message="郵件發送成功!";
Session session=null;
Properties props = System.getProperties();
props.put("mail.smtp.host", smtpServer);
if(ifAuth){ //服務器需要身份認證
props.put("mail.smtp.auth","true");
SmtpAuth smtpAuth=new SmtpAuth(username,password);
session=Session.getDefaultInstance(props, smtpAuth);
}else{
props.put("mail.smtp.auth","false");
session=Session.getDefaultInstance(props, null);
}
session.setDebug(true);
Transport trans = null;
try {
Message msg = new MimeMessage(session);
try{
Address from_address = new InternetAddress(from, displayName);
msg.setFrom(from_address);
}catch(java.io.UnsupportedEncodingException e){
e.printStackTrace();
}
InternetAddress[] address={new InternetAddress(to)};
msg.setRecipients(Message.RecipientType.TO,address);
msg.setSubject(subject);
Multipart mp = new MimeMultipart();
MimeBodyPart mbp = new MimeBodyPart();
mbp.setContent(content.toString(), "text/html;charset=gb2312");
mp.addBodyPart(mbp);
if(!file.isEmpty()){//有附件
Enumeration efile=file.elements();
while(efile.hasMoreElements()){
mbp=new MimeBodyPart();
filename=efile.nextElement().toString(); //選擇出每一個附件名
FileDataSource fds=new FileDataSource(filename); //得到數據源
mbp.setDataHandler(new DataHandler(fds)); //得到附件本身并至入BodyPart
mbp.setFileName(fds.getName()); //得到文件名同樣至入BodyPart
mp.addBodyPart(mbp);
}
file.removeAllElements();
}
msg.setContent(mp); //Multipart加入到信件
msg.setSentDate(new Date()); //設置信件頭的發送日期
//發送信件
msg.saveChanges();
trans = session.getTransport("smtp");
trans.connect(smtpServer, username, password);
trans.sendMessage(msg, msg.getAllRecipients());
trans.close();

}catch(AuthenticationFailedException e){
map.put("state", "failed");
message="郵件發送失敗!錯誤原因:\n"+"身份驗證錯誤!";
e.printStackTrace();
}catch (MessagingException e) {
message="郵件發送失敗!錯誤原因:\n"+e.getMessage();
map.put("state", "failed");
e.printStackTrace();
Exception ex = null;
if ((ex = e.getNextException()) != null) {
System.out.println(ex.toString());
ex.printStackTrace();
}
}
//System.out.println("\n提示信息:"+message);
map.put("message", message);
return map;
}

}



public class SmtpAuth extends javax.mail.Authenticator {
private String username,password;

public SmtpAuth(String username,String password){
this.username = username;
this.password = password;
}
protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
return new javax.mail.PasswordAuthentication(username,password);
}
}


來源:CSDN

分享:JspSmartUpload上傳常見問題解析
因為手頭的項目需要 上傳圖片,初次才用比較流行的jspSmartUpload上傳。 畢竟沒有搞過,弄了一個下午,終于將碰到的問題搞定了。 第一個問題,表單設置:method=post,ENCTYPE=multipart/form-data,只能這樣 第二個問題,不能通過request.getParameter()

來源:模板無憂//所屬分類:JSP教程/更新時間:2012-06-10
相關JSP教程
亚洲精品丝袜日韩| 欧美日韩国产一二| 亚洲黄色在线免费观看| 国产自产女人91一区在线观看| 天天综合网在线观看| 7777精品伊久久久大香线蕉语言| 一级全黄肉体裸体全过程| 97在线国产视频| 日韩 中文字幕| 久久久久国产精品麻豆| 亚洲第一国产精品| 日韩理论片在线观看| 91污片在线观看| 亚洲高清123| 天天射,天天干| 欧洲亚洲免费视频| 免费看国产曰批40分钟| 久久资源av| 日韩人妻精品中文字幕| 亚洲成人久久久| 色偷偷中文字幕| 国产视频一区二区在线| 成人网址在线观看| 黄色一级片在线看| 欧美日韩黄色大片| 久久国产色av免费观看| 成人综合在线观看| 熟妇人妻va精品中文字幕| 亚洲一区二区五区| www.激情网| 免费在线成人网| 久久av综合网| 日韩理论片中文av| 欧美精品免费观看二区| 一区二区三区在线视频免费观看| **亚洲第一综合导航网站| 青青草97国产精品免费观看 | 成人av动漫在线| 日本理论中文字幕| 免费久久久久久| 色成人在线视频| 永久看看免费大片| 日韩精品高清视频| 天天干天天干天天干天天| 欧美成人午夜免费视在线看片 | 亚洲视频在线观看一区二区| 国产精品美女999| 丰满白嫩尤物一区二区| 天天爱天天操天天干| 久久精品国产网站| 黄色片免费网址| 国产精品久久久久久久久粉嫩av| 亚洲影院理伦片| 日韩影院精彩在线| 91蝌蚪视频在线| 国产丝袜视频一区| 青青草伊人久久| 久久黄色免费看| 欧美综合色免费| 国模私拍在线观看| 久久99精品久久久久久青青日本 | 欧美极品少妇xxxxⅹ高跟鞋| 日本少妇aaa| 大胆欧美熟妇xx| 91九色视频导航| 成人免费淫片aa视频免费| 欧美夫妻性生活xx| 日韩激情片免费| 国产综合久久久久影院| 激情文学亚洲色图| 另类图片亚洲另类| 天堂中文在线观看视频| 亚洲制服丝袜在线播放| 色8久久精品久久久久久蜜| 日韩免费毛片视频| 婷婷国产在线综合| 视色视频在线观看| 91在线中文字幕| 亚洲大片在线观看| 亚洲精品国产91| 成人高h视频在线| 精品日韩欧美一区二区| 一本色道久久综合狠狠躁的推荐| 精品久久久久久久久中文字幕| 国产综合色在线视频区| 99热在线观看精品| 欧美日韩在线观看一区二区三区 | 亚洲高清一区二区三区| 欧美一区二区三区成人片在线| 亚洲韩国在线| 26uuu精品一区二区| 国产1区2区3区中文字幕| 亚洲亚洲人成综合网络| 国产精品theporn动漫| 日本中文字幕有码| 性欧美xxxx视频在线观看| 欧美日韩在线播放三区| www.亚洲人| 另类调教123区| 极品少妇xxxx偷拍精品少妇| 国产小视频一区| 亚洲成人黄色av| 国产综合第一页| 在线视频一区二区| 国产又爽又黄的视频| 特级西西444| 国产欧美综合色| 欧美性大战久久久久xxx| 精品日韩在线一区| av中文字幕第一页| 国产一级一片免费播放放a| 成人免费在线小视频| 欧美成人全部免费| 日韩免费观看高清完整版在线观看| 午夜视频在线观看一区二区三区| 欧美性猛交xxxx免费看| 91网站在线观看视频| 日本一区二区不卡在线| 日韩video| 国产综合在线看| 91精品国产综合久久久久久久| 黄色av一区二区三区| 亚洲欧美激情网| 精品少妇在线视频| 日本福利视频一区| 99在线高清视频在线播放| www.亚洲一区| 美女国产一区二区三区| 在线观看亚洲欧美| 我不卡一区二区| 久久久精品视频免费观看| 波多野结衣在线电影| 久久99国产精品免费网站| 日日摸夜夜添夜夜添精品视频| 国产模特av私拍大尺度| 国产乡下妇女做爰| 日韩av三级在线| 亚洲最新免费视频| 欧美凹凸一区二区三区视频| 日韩精品久久久久久福利| 久久伊人中文字幕| 麻豆视频一区二区| 国产高清不卡二三区| 免费又黄又爽又猛大片午夜| 亚洲国产综合久久| 中文字幕视频在线播放| 日本不卡一区二区三区在线观看| 亚洲a在线观看| 日本精品免费观看| 日韩有码在线电影| 久久精品国产欧美亚洲人人爽| 一本色道久久综合精品竹菊| 日韩在线一区二区| 999av视频| 久久久99精品| 成年人网站av| 午夜一区二区三区| 97免费观看视频| 波多野结衣视频一区| 一区二区不卡在线播放| 久久综合九色欧美综合狠狠| 成人免费看的视频| 亚洲国产成人自拍| 久草视频在线免费看| 高潮无码精品色欲av午夜福利| 国产亚洲成人精品| 成人性视频免费网站| 日韩理论片久久| 神马一区二区影院| 91蝌蚪视频在线| 波多野结衣视频网址| 色呦呦中文字幕| 亚洲一级特黄毛片| 中文字幕 自拍偷拍| 国产天堂第一区| 少妇一级淫片免费看| 无码h黄肉3d动漫在线观看| 疯狂揉花蒂控制高潮h| 欧美xxxx吸乳| 国产精品区一区| 久久频这里精品99香蕉| 大胆欧美人体视频| 91日本在线观看| 99在线国产| 国语精品免费视频| 欧美aⅴ在线观看| 麻豆网站免费观看| 久久精品午夜| 日韩欧美国产综合一区| 就去色蜜桃综合| 国产精品国产三级国产传播| 亚洲国产成人一区二区| 久久99在线观看| 人成网站在线观看| 95精品视频在线| 亚洲成人在线网站| 在线视频国产日韩| 欧美www视频| 日韩成人在线观看| 国产精品av电影| 男人靠女人免费视频网站| 午夜久久久久久久| 国产99对白在线播放| 成人午夜激情在线| 岳乳丰满一区二区三区| 国产 欧美在线| 精品动漫一区二区| 欧美精品在线播放| 国产一区二区三区黄| 国产传媒久久久| 欧美激情第三页| 日韩av色在线| 国产日韩视频在线观看| 男人插女人视频在线观看| 日本精品一区在线观看| 虎白女粉嫩尤物福利视频| 激情婷婷综合网| 免费成人你懂的| 亚洲午夜免费电影| 91大神在线播放精品| 亚洲 自拍 另类小说综合图区| 国产精品一级黄片| 一二三区视频在线观看| 国产一区二区在线视频观看| 成人a免费在线看| 欧美老女人在线视频| 国产xxxx视频| 99久久99久久免费精品蜜臀| 久久久久久久一区二区三区| 做a视频在线观看| 国产乱码一区二区三区| 欧美在线色视频| 欧美精品久久久久久久| 亚洲va久久久噜噜噜久久狠狠 | 日韩视频免费观看高清| 久草网视频在线观看| 麻豆freexxxx性91精品| 欧美黑人性视频| 日韩视频第二页| 欧美成人三级在线观看| 精品午夜久久福利影院 | 97公开免费视频| 无码人妻精品一区二区三区9厂 | 青青草伊人久久| 国产精品成人av性教育| 国产毛片久久久久久| 成人激情免费网站| 九九热在线精品视频| 免费看国产精品一二区视频| 特级丰满少妇一级| 成年人免费高清视频| 中文字幕精品综合| 韩国v欧美v日本v亚洲| 91久久久在线| 爱情岛论坛亚洲首页入口章节| 超碰人人人人人人| 美女久久久久久久| 欧美成人福利在线观看| 日韩av不卡在线观看| 欧美精品一区二区三| 日本不卡一二三区| 亚洲精品一二三四五区| 精品一区二区三区蜜桃| 精品国产乱码久久| 欧美激情国内自拍| 一区二区三区免费网站| 欧美日韩一级在线| 成人国产在线观看| 国产精品卡一卡二卡三| 国语对白永久免费| 好吊色在线观看| 91欧美一区二区| 国产精品99久久久久久www| 国产精品麻豆免费版现看视频| 91精品国产综合久久香蕉的特点| 亚州精品一二三区| 亚洲精品视频在线| 老太脱裤让老头玩ⅹxxxx| 国产成人精品免费在线| 日韩av不卡电影| 国产无人区码熟妇毛片多| 91麻豆视频网站| 成人网欧美在线视频| 免费无遮挡无码永久在线观看视频| 亚洲人成网站影音先锋播放| 欧美在线视频在线播放完整版免费观看| 成人免费看片视频在线观看| 中文字幕 人妻熟女| 欧美一区二区三区日韩| 精品中文字幕在线播放| 日韩一区二区三区免费看 | 一级黄色片毛片| 国产精品免费视频网站| 九九精品在线观看| 亚洲美女福利视频| 国产激情一区二区三区在线观看 | 91福利视频导航| 在线观看视频二区| 最新亚洲国产精品| 日本成人中文字幕在线| 久久综合狠狠综合| 国产一区二区黄色| 亚洲一级生活片| 欧美精品精品一区| 香蕉视频黄色在线观看| 欧美性xxxx在线播放| 91成人在线观看国产| 美女搡bbb又爽又猛又黄www| 日本午夜一本久久久综合| 国产亚洲欧美aaaa| 爽爽爽在线观看| 亚洲国产精品成人综合色在线婷婷 | 国产模特av私拍大尺度| 久久高清视频免费| 亚洲AV无码一区二区三区性| 日韩第一页在线观看| 欧美色男人天堂| 日韩在线中文字幕视频| 久久久久久国产三级电影| 日产欧产美韩系列久久99| 91超碰rencao97精品| 丰满少妇高潮在线观看| 亚洲第一综合天堂另类专| 韩国av中国字幕| 日本久久电影网| 日本黄色www| 91精品国产高清一区二区三区| 日韩人妻一区二区三区蜜桃视频| 内射无码专区久久亚洲| 国产精品欧美日韩一区二区| 成人av一区二区三区在线观看| 久久综合中文色婷婷| 青青草成人在线观看| 亚洲九九九在线观看| 久久国产黄色片| 国产精品va在线播放| 天堂网在线资源| 欧美色偷偷大香| 九九精品久久久| 色狠狠av一区二区三区香蕉蜜桃| 亚洲国产无线乱码在线观看| 色99中文字幕| 欧美一区二区久久久| 精品二区在线观看| 国产精品二区视频| 国产精品一区二区三| 中文字幕综合网| 精品亚洲乱码一区二区| 国产精品久久波多野结衣| 中文字幕一区av| 性生交大片免费看l| 日韩黄色av网站| 精品久久人妻av中文字幕| 日韩精品久久一区二区三区| 国产午夜久久久久| 美女被到爽高潮视频| 国外色69视频在线观看| a级片在线播放| 久久久精品国产一区二区三区| 99热在这里有精品免费| 亚洲av永久无码精品| 91久久在线观看| 色吊一区二区三区| 中文文字幕文字幕高清| 久久国产精彩视频| 日韩一级片免费观看| 国产嫩草在线观看| 欧美精品videossex性护士| 夜夜爽妓女8888视频免费观看| 亚洲免费一在线| 日本va欧美va精品| 五月天六月丁香| 色综合天天狠天天透天天伊人| 五月综合激情网| 国产高清精品在线| 亚洲av综合一区| 男人的天堂免费| 一区二区在线观| 97av在线影院| 欧美日韩一区二区三区不卡| 日韩电影一区二区三区四区| 日本xxxxxxx免费视频| 亚洲欧美www| 丁香五精品蜜臀久久久久99网站| 日韩欧美国产综合在线| 午夜剧场成人观在线视频免费观看| 国产欧美一区二区三区在线看蜜臀 | 欧美成人在线免费| 色国产综合视频| 婷婷综合激情网| 野花视频免费在线观看| 久久亚洲精品中文字幕冲田杏梨| 高清不卡在线观看| 亚洲综合图片一区| 日韩电影免费观看在| 日韩美女视频在线| 男人午夜免费视频| 日日摸天天爽天天爽视频| 欧美精品久久久久a| 成人免费在线观看入口| 日本在线观看视频网站| 91亚洲精品国产| 久久精品视频一| 亚洲人精品一区| 日韩成人毛片视频| 欧美一级爱爱| 欧美日韩精品一区二区三区| 久久深夜福利| 日本在线视频免费| 四虎成人免费视频|