📄 jsp与java mail api----源码下载网.htm
字号:
cellPadding=0 width=468 bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD>// Setup properties<BR>Properties props =
System.getProperties();<BR>props.put("mail.pop3.host", host);
<BR><BR>// Setup authentication, get session<BR>Authenticator
auth = new PopupAuthenticator();<BR>Session session =
Session.getDefaultInstance(props, auth); <BR><BR>// Get the
store<BR>Store store =
session.getStore("pop3");<BR>store.connect();
</TD></TR></TBODY></TABLE><BR> 然后,创建一个 Authenticator 子类并从
getPasswordAuthentication() 方法中返回 PasswordAuthentication
对象。下面就是这样一种实现,其中用户名和密码仅占用一个域。(这不是一个 Swing
工程教程;只要将两部分输入同一个域,用逗号分隔就行。) <BR><BR>
<TABLE style="WIDTH: 491px; HEIGHT: 365px" cellSpacing=0
cellPadding=0 width=491 bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD>import Javax.mail.*;<BR>import Javax.swing.*;<BR>import
Java.util.*; <BR><BR>public class PopupAuthenticator extends
Authenticator <BR>{<BR>public PasswordAuthentication
getPasswordAuthentication() <BR>{<BR>String username,
password;<BR> String result =
JOptionPane.showInputDialog("Enter
'username,password'");<BR> StringTokenizer st = new
StringTokenizer(result, ",");<BR> username =
st.nextToken();<BR> password = st.nextToken();<BR> return
new PasswordAuthentication(username,
password);<BR> }<BR>} </TD></TR></TBODY></TABLE><BR> 因为
PopupAuthenticator 涉及到 Swing,它会启动 AWT 的事件处理线程。这一点基本上要求您在代码中添加一个对
System.exit()
的调用来终止程序。<BR><BR> 如何实现消息的转发?<BR><BR> 转发消息,相对于其他功能来说,显得有些棘手。没有单独的方法可以供调用,读者必须通过对组成消息各部分的处理来组织要转发的消息。<BR> 一条邮件消息可以由多个部分组成。在处理
MIME 消息时,消息中每部分都是 BodyPart,再特殊些,是 MimeBodyPart。不同的 body
part(信体部件或正文部件)结合成一个容器,名为 Multipart,再特殊些,就是
MimeMultipart。要转发一条消息,您为自己的消息正文创建一个部件,要转发的消息作为另一部件。并且将两个部件结合成一个
multipart(多部件)。然后您将这个 multipart
添加到一则已写好恰当地址的消息中,并发送。<BR> 本质上就是如此。要将一条消息内容复制到另一条,只要复制 DataHandler
(JavaBeans Activation Framework 中的类)就行了。 <BR><BR>
<TABLE style="WIDTH: 501px; HEIGHT: 527px" cellSpacing=0
cellPadding=0 width=501 bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD>// Create the message to forward<BR>Message forward = new
MimeMessage(session);<BR>// Fill in
header<BR>forward.setSubject("Fwd: " +
message.getSubject());<BR>forward.setFrom(new
InternetAddress(from));<BR>forward.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));<BR>// Create your new message
part<BR>BodyPart messageBodyPart = new
MimeBodyPart();<BR>messageBodyPart.setText( "Here you go with
the original message:\n\n");<BR>// Create a multi-part to
combine the parts<BR>Multipart multipart = new
MimeMultipart();<BR>multipart.addBodyPart(messageBodyPart);
<BR><BR>// Create and fill part for the forwarded
content<BR>messageBodyPart = new
MimeBodyPart();<BR>messageBodyPart.setDataHandler(message.getDataHandler());
<BR><BR>// Add part to multi
part<BR>multipart.addBodyPart(messageBodyPart); <BR><BR>//
Associate multi-part with
message<BR>forward.setContent(multipart); <BR><BR>// Send
message<BR>Transport.send(forward);
</TD></TR></TBODY></TABLE><BR> 怎样处理附件?
<BR><BR> 附件是邮件消息的相关资源,如通常不包含在消息正文里文本文件、电子表格或图像等。常见的邮件程序,如 Eudora 和
pine 之类,可以用 JavaMail API 将资源 attach(附加)
到您的消息上,就可以在收到消息时得到。<BR><BR> 附件的发送:<BR><BR> 发送附件非常像转发消息。您建立各部分以组成完整消息。完成第一部件,即消息正文后,您添加其它部件,其中每个
DataHandler 都代表附件,而不是转发消息情况下的共享处理程序。如果从文件中读附件,附件的数据源是
FileDataSource。而如果从 URL 中读时,附件的数据源是 URLDataSource。一旦存在
DataSource,只要先把它传递给 DataHandler 构造器,最后再用 setDataHandler() 把它附加到
BodyPart。假定您要保留附件的原始文件名,最终要做的是用 BodyPart 的 setFileName()
方法设置与附件相关的文件名。如下所示: <BR><BR>
<TABLE style="WIDTH: 492px; HEIGHT: 612px" cellSpacing=0
cellPadding=0 width=492 bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD> // Define message<BR> Message message = new
MimeMessage(session);<BR> message.setFrom(new
InternetAddress(from));<BR> message.addRecipient(Message.RecipientType.TO,<BR> new
InternetAddress(to));<BR> message.setSubject("Hello JavaMail
Attachment"); <BR><BR> // Create the message part<BR> BodyPart
messageBodyPart = new MimeBodyPart(); <BR><BR> // Fill the
message<BR> messageBodyPart.setText("Pardon Ideas");
<BR><BR> Multipart multipart = new
MimeMultipart();<BR> multipart.addBodyPart(messageBodyPart);
<BR><BR> // Part two is attachment<BR> messageBodyPart = new
MimeBodyPart();<BR> DataSource source = new
FileDataSource(filename);<BR> messageBodyPart.setDataHandler(new
DataHandler(source));<BR> messageBodyPart.setFileName(filename);<BR> multipart.addBodyPart(messageBodyPart);
<BR><BR> // Put parts in
message<BR> message.setContent(multipart); <BR><BR> // Send
the message<BR> Transport.send(message);
</TD></TR></TBODY></TABLE><BR> 就消息引入附件时,若程序是个 servlet
(小服务程序),除告知消息发送到何处外,还必需上载附件。可以将 multipart/form-data 表单编码类型(form
encoding type)用于每个上载文件的处理。 <BR><BR>
<TABLE style="WIDTH: 492px; HEIGHT: 112px" cellSpacing=0
cellPadding=0 width=492 bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD><FORM ENCTYPE="multipart/form-data"<BR> method=post
action="/myservlet"><BR> <INPUT TYPE="file"
NAME="thefile"><BR> <INPUT TYPE="submit"
VALUE="Upload"><BR></FORM> </TD></TR></TBODY></TABLE><BR> 注意:消息大小由
SMTP 服务器而不是 JavaMail API 来限制。如果您碰到问题,可以考虑用设置 ms 和 mx 参数的方法增大 Java
堆大小。</FONT><BR>[page_break] 附件的获取: <BR><BR> 从消息中获取附件比发送它们棘手些,因为
MIME 没有简单的关于附件的概念。当消息包含附件时,消息的内容是个 Multipart 对象。接着,您需要处理每个
Part,获取主要内容和附件。标有从 part.getDisposition() 获得的 Part.ATTACHMENT
配置(disposition)的部件(Part)无疑就是附件。但是,没有配置(以及一个非文本 MIME 类型)和带
Part.INLINE 配置的部件也可能是附件。当配置要么是 Part.ATTACHMENT,要么是 Part.INLINE
时,这个消息部件的内容就能被保存。只要用 getFileName() 和 getInputStream()
就能分别得到原始文件名和输入流。 <BR><BR>
<TABLE style="WIDTH: 468px; HEIGHT: 220px" cellSpacing=0
cellPadding=0 width=468 bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD>Multipart mp = (Multipart)message.getContent();<BR>for
(int i=0, n=multipart.getCount(); i<n; i++) {<BR> Part part =
multipart.getBodyPart(i));<BR> String disposition =
part.getDisposition();<BR> if ((disposition != null)
&&<BR> ((disposition.equals(Part.ATTACHMENT)
||<BR> (disposition.equals(Part.INLINE)))
{<BR> saveFile(part.getFileName(),
part.getInputStream());<BR> }<BR>}
</TD></TR></TBODY></TABLE><BR> saveFile() 方法仅依据文件名创建了一个
File,它从输入流中将字节读出,然后写入到文件中。万一文件已经存在,就在文件名后添加一个数字作为新文件名,如果这个文件名仍存在,则继续添,直到找不到这样的文件名为止。
<BR><BR>
<TABLE style="WIDTH: 468px; HEIGHT: 107px" cellSpacing=0
cellPadding=0 width=468 bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD>// from saveFile()<BR>File file = new
File(filename);<BR>for (int i=0; file.exists(); i++) {<BR>file
= new File(filename+i);<BR>}
</TD></TR></TBODY></TABLE><BR> 上面的代码涵盖了最简单的情况 -
消息中各部件恰当的标记了。要涵盖所有情况,还要在配置为空时进行处理,并且获取部件的 MIME 类型来进行相应处理。 <BR><BR>
<TABLE style="WIDTH: 479px; HEIGHT: 219px" cellSpacing=0
cellPadding=0 width=479 bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD>if (disposition == null) {<BR> // Check if
plain<BR> MimeBodyPart mbp = (MimeBodyPart)part;<BR> if
(mbp.isMimeType("text/plain")) {<BR> // Handle plain<BR> }
else {<BR> // Special non-attachment cases here of image/gif,
text/html, ...<BR> }<BR>...<BR>}
</TD></TR></TBODY></TABLE><BR> 如何一次发送多个邮件?
<BR><BR> 取得必要的Transport对象并调用SendMessage()发送每一个邮件。注意在调用之间设置或改变接收者。<BR><BR>
<TABLE style="WIDTH: 471px; HEIGHT: 215px" cellSpacing=0
cellPadding=0 width=471 bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD> Message message = …;<BR> Transport t =
session.getTransport("smtp");<BR> t.connect();<BR>message.setRecipient(Message.RecipientType.TO,recipient1);<BR>t.sendMessage(message,recipient);<BR>message.setRecipient(Message.RecipientType.TO,recipient2);<BR>t.sendMessage(message,recipient);<BR>message.setRecipient(Message.RecipientType.TO,recipient3);<BR>t.sendMessage(message,recipient);<BR>t.close();
</TD></TR></TBODY></TABLE><BR> 如何保存邮件?
<BR><BR> 用MimeMessage类的writeTo()方法可以实现。用Message类的对象不能实现。<BR><BR>
<TABLE style="WIDTH: 519px; HEIGHT: 46px" cellSpacing=0
cellPadding=0 width=519 bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD> FileOutputStream fos = new
FileOutputStream("test.mail");<BR> Mimemessage.writeTo(fos);</TD></TR></TBODY></TABLE><BR> 怎样发送带有图像的HTML格式邮件?
<BR><BR> 一些图像还是放在服务器上较好,让用户的邮件工具处理。读者可以将图像作为附件或HTML体发送。如果所有附件保存在同一个目录下,那么必须用不同的图像文件名以确保邮件工具不会显示其他图片。另外图像URL要用绝对路径,不能用相对路径。
<BR><BR> 如何设置∕获取邮件的优先级?
<BR><BR> 设置邮件的优先级,只需在消息头中添加"X-Priority"属性:<BR> MimeMessage
msg;<BR> Msg.addHeader("X-Priority","1");<BR> 同样道理,要获取邮件的优先级只要获取"X-Priority"属性的值就可以了:<BR>String
priority = msg.getHeader("X-Priority"); <BR><BR> 附录:Java Mail
API的基本概念 <BR><BR> 什么是Java Mail API <BR><BR> JavaMail API
是一个用于阅读、编写和发送电子邮件的可选包(标准扩展)。与 Eudora、pine 及 Microsoft Outlook
相似,这个包用来创建邮件用户代理(Mail User Agent,MUA) 类型程序。API
的主要用途并不在于传输、发送和转发消息;这一功能范围属于某些
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -