📄 java资源网 深入探讨javamail api的使用.htm
字号:
<BR><BR>String from=args[1];//<FONT color=#660000>发信人地址</FONT>
<BR><BR>String to =args[2];//<FONT color=#660000>收信人地址</FONT>
<BR><BR>// <FONT color=#660000>创建properties对象</FONT>
<BR><BR>Properties props = new Properties();
<BR><BR>file://<FONT color=#660000>创建邮件服务器</FONT>
<BR><BR>props.put("mail.smtp.host", smtpHost);
<BR><BR>file://<FONT color=#660000>取得默认的Session</FONT>
<BR><BR>Session session = Session.getDefaultInstance(props,
null); <BR><BR>// <FONT
color=#660000>创建一条信息,并定义发信人地址和收信人地址</FONT> <BR><BR>MimeMessage
message = new MimeMessage(session);
<BR><BR>message.setFrom(new InternetAddress(from));
<BR><BR>InternetAddress[] address = {new InternetAddress(to)};
<BR><BR>message.setRecipients(Message.RecipientType.TO,
address); <BR><BR>message.setSubject("Hello,FangZhou");//<FONT
color=#660000>设定主题</FONT> <BR><BR>message.setSentDate(new
Date());//<FONT color=#660000>设定发送时间</FONT>
<BR><BR>message.setText(msgText);//<FONT
color=#660000>把前面定义的msgText中的文字设定为邮件正文的内容</FONT>
<BR><BR>file://<FONT color=#660000>发送邮件</FONT>
<BR><BR>Transport.send(message); <BR><BR>} <BR><BR>}
<BR> 问题二、如果我想在邮件中加上附件怎么办?
<BR><BR> 这也是一个相当好的问题,要加入附件的话就要使用MimeBodyPart来创建邮件,只需把上面的程序稍加修改就可以了,为了简单起见,我在这里只是使用了一条字符串作为附件内容来解释如何添加附件。
<BR><BR>file://<FONT color=#660000>msgText是信件的正文,共有两行</FONT>
<BR><BR>static String msgText = "Dear Mr.FangZhou\nI’m a
reader of your net!" <BR><BR>file://<FONT
color=#660000>msgAttachment是一段字符串作为附件</FONT> <BR><BR>static
String msgAttachment = "This is an attachment string!"
<BR><BR>. . . . . . . . . <BR><BR>MimeBodyPart mbp1 = new
MimeBodyPart(); <BR><BR>mbp1.setText(msgText); file://<FONT
color=#660000>把前面定义的msgText中的文字设定为邮件正文的内容</FONT>
<BR><BR>file://<FONT color=#660000>创建附件部分</FONT>
<BR><BR>MimeBodyPart mbp2 = new MimeBodyPart();
<BR><BR>file://<FONT color=#660000>使用setText(text,
charset)来加入附件</FONT> <BR><BR>mbp2.setText(msgAttachment,
"gb2312"); <BR><BR>file://<FONT
color=#660000>创建Multipart</FONT> <BR><BR>Multipart mp = new
MimeMultipart(); <BR><BR>mp.addBodyPart(mbp1);
<BR><BR>mp.addBodyPart(mbp2); <BR><BR>// <FONT
color=#660000>添加 Multipart到Message中
</FONT><BR><BR>message.setContent(mp); <BR><BR>file://<FONT
color=#660000>发送邮件</FONT> <BR><BR>Transport.send(message);
<BR><BR>} <BR> 问题三、我怎样从邮件服务器中获取邮件列表
<BR><BR> 回答:其实实现这个问题的方法很简单 <BR><BR> 1.
JavaMail客户端通过创建一个默认的会话(Session)对象来开始一个邮件处理任务
<BR><BR> Session session =
Session.getDefaultInstance(props, authenticator); <BR><BR> 2.
客户端使用Session对象的getStore方法来连接到默认到Store提供者。GetStore方法返回一个 Store
对象子类,它支持用户属性中定义的连接协议。 <BR><BR> Store store =
session.getStore(); <BR><BR> store.connect(); <BR><BR> 3.
如果连接成功的话,客户端就能够列出Store中的可用的文件夹。然后我们就可以取得或时浏览特定的Message对象。
<BR><BR>// <FONT color=#660000>取得 INBOX 文件夹</FONT>
<BR><BR>Folder inbox = store.getFolder("INBOX"); <BR><BR>//
<FONT color=#660033>打开 INBOX 文件夹</FONT>
<BR><BR>inbox.open(Folder.READ_WRITE); <BR><BR>Message
message[] = inbox.getMessage(); <BR><BR>for(int i
=0;filenumber=message.length;i < filenumber;i ++) <BR><BR>{
<BR><BR>System.out.println(“第”+i +”封信:”+message[i
].getFrom()[0]+”\t”+message[i ].getSubject()); <BR><BR>}
<BR><BR>... <BR><BR>... <BR><BR> 4.
最后,客户端关闭所有打开的文件夹,并关闭所有Store。 <BR><BR>inbox.close(); // <FONT
color=#660000>关闭INBOX</FONT> <BR><BR>store.close(); // <FONT
color=#660000>关闭Store</FONT> <BR><BR> 问题四:我想删除邮箱中的某些邮件,该怎么办呢?
<BR><BR> 在邮件服务器上,我们如果想删除某封信的话,只需调用setFlag()来设置Flags.Flag.DELETE为真即可。
<BR><BR>例如:Message message = folder.getMessage(1);
<BR><BR>message.setFlag(Flags.Flag.DELETED, true);
file://设置Flags.Flag.DELETE为真。 <BR><BR>// <FONT
color=#660000>检查这封信的DELETED标记是否设置</FONT> <BR><BR>if
(message.isSet(Flags.Flag.DELETED))
<BR><BR>System.out.println("这封信已被删除,请返回!");
<BR><BR> 问题五:我想知道我的邮箱中有多少封信我读过了有多少封信我没有读过,我该怎么办?
<BR><BR> 我们知道,Folder对象提供了三个方法,getMessageCount,getNewMessageCount和getUnreadMessageCount。GetMessageCount方法显示邮箱中总共有多少封信,getNewMessageCount显示邮箱中新邮件的封数;getUnreadMessageCount显示邮箱中已读邮件的封数。利用这三个方法,我们可以很容易的看到邮箱中有多少封信我们已经读到过,有多少没有读。见下面的程序:
<BR><BR>import javax.mail.*; <BR><BR>import
javax.mail.internet.*; <BR><BR>public class CheckMyMailBox{
<BR><BR>public class void main( ) <BR><BR>throws Exception{
<BR><BR>Properties props= new <BR><BR>// <FONT
color=#660000>创建properties对象</FONT> <BR><BR>Properties props =
new Properties(); <BR><BR>file://<FONT
color=#660000>获得Session</FONT> <BR><BR>Session session =
Session.getDefaultInstance(props, null); <BR><BR>file://<FONT
color=#660000>获得Store</FONT> <BR><BR>Store
store=session.getStore(“pop3”);s
<BR><BR>store.connect(Pop3Host,username,password);
<BR><BR>file://<FONT color=#660000>获得folder,打开INBOX
</FONT><BR><BR>Folder inbox= store.getFolder(“INBOX”);
<BR><BR>file://<FONT color=#660000>以只读方式打开邮件夹</FONT>
<BR><BR>inbox.open(Folder.READ_ONLY); <BR><BR>file://<FONT
color=#660000>取得邮箱中总共有多少封信</FONT> <BR><BR>int numberOfTotal =
inbox.getMessageCount(); <BR><BR>file://<FONT
color=#660000>取得邮箱中未读过的信</FONT> <BR><BR>int numberOfUnread=
inbox.getUnreadMessageCount();
<BR><BR>System.out.println(“您的邮箱中共有”+ numberOfTotal+”封邮件,其中有”+
numberOfUnread+”封没有读过”); <BR><BR>file://<FONT
color=#660000>关闭连接</FONT> <BR><BR>inbox.close();
<BR><BR>store.close(); <BR> 问题六:我的邮件中有一个附件,我怎么把它打开呢?
<BR><BR> 说到邮件中的附件,我不得不说一说Multipart类,Multipart类是Message类的子类,提供了在邮件中加入附加的实现方法。一个多部分邮件是一个内容类型(content-type)被设置为multipart的Message对象。Multipart类是一个容器类,包含Bodypart类型的对象。Bodypart对象是一个Part接口的实例,它既包括一个新的Multipart容器对象,又包括一个DataHandler对象。
<BR><BR>下图显示了一个Multipart邮件的结构。 <BR><BR><IMG height=435
src="Java资源网 深入探讨JavaMail API的使用.files/jt-2001-7-3-javama1.jpg"
width=554><BR><BR>下图显示了一个典型的Multipart邮件的嵌套 <BR><BR><IMG
height=510
src="Java资源网 深入探讨JavaMail API的使用.files/jt-2001-7-3-javama2.jpg"
width=554><BR><BR>当邮件中有附件时,邮件的内容就是Multipart而不是我在前面所说的Part类型了。我们需要取得Multipart的每一部分并根据以需要和内容进行处理。现在让我们看一看在程序上是如何实现的:
<BR><BR>import java.io.*; <BR><BR>import java.util.Properties;
<BR><BR>import javax.mail.*; <BR><BR>import
javax.mail.internet.*; <BR><BR>public class getAttachment{
<BR><BR>public static void main(String args[]) <BR><BR>{
<BR><BR>String host=args[0]; <BR><BR>String username=args[1];
<BR><BR>String userpassword=args[2]; <BR><BR>n=3;//<FONT
color=#660000>为了简单起见,我默认第三封信为有附件的邮件</FONT> <BR><BR>Session
session =Session.getInstance(new Properties(),null);
<BR><BR>Store store=session.getStore("pop3");
<BR><BR>store.connect(host,username,userpassword);
<BR><BR>Folder folder=store.getFolder("INBOX");
<BR><BR>folder.open(Folder.READ_ONLY); <BR><BR>Message
message[]=folder.getMessage(); <BR><BR>Object
content=message[n].getContent(); <BR><BR>if (content
instanceof Multipart) <BR><BR>{
<BR><BR>handleMultiPart((Multipart)content); <BR><BR>}
<BR><BR>else <BR><BR>{ <BR><BR>handlePart(message[n]);
<BR><BR>} <BR><BR>folder.close(); <BR><BR>store.close();
<BR><BR>} <BR><BR><BR><BR>public static void
handleMultiPart(Multipart multipart) <BR><BR>{ <BR><BR>for(int
i=0,i<MULTIPART.GETCOUNT();I++) <BR> <BR>{
<BR><BR>handlePart(multipart.getBodyPart(i)); <BR><BR>}
<BR><BR>} <BR><BR><BR><BR>public static void handlePart(Part
part) <BR><BR>{ <BR><BR>String disposit=part.getDisposition();
<BR><BR>String conType=part.getContentType();
<BR><BR>if(disposit==null){//<FONT color=#660000>如果只有正文
</FONT><BR><BR>System.out.println("没有:"+conType);
<BR><BR>file://<FONT color=#660000>检查是否为普通邮件</FONT> <BR><BR>if
((conType.length()>=10)&&(conType.toLowerCase().substring(0,10).equals("text/plain"))){
<BR><BR>part.writeTo(System.out); <BR><BR>} <BR><BR>else {
<BR><BR>file://<FONT
color=#660000>可能为HTML格式的邮件,但是本文还不涉及这方面的内容故不予以考虑</FONT>。
<BR><BR>System.out.println("其它各是的正文:"+conType);
<BR><BR>part.writeTo(System.out); <BR><BR>} <BR><BR>}
<BR><BR>else if (disposit.equals(Part.ATTACHMENT))//<FONT
color=#660000>否则说明邮件中有附件</FONT> <BR><BR>{
<BR><BR>System.out.println("附件:"+part.getFileName()+:conType);
<BR><BR>storeFile(part.getFileName(),part.getInputStream());
<BR><BR>} <BR><BR>else {
<BR><BR>System.out.println("其它:"+disposit); <BR><BR>}
<BR><BR>} <BR><BR>public static void storeFile(String
fileName,InputStream inputstream)//保存文件 <BR><BR>{ <BR><BR>File
file=new File(fileName); <BR><BR>for(int
i=0;file.exists();i++) <BR><BR>{ <BR><BR>file= new
File(fileName+i); <BR><BR>} <BR><BR>FileOutputStream
fileoutputstream =new FileOutputStream(file);
<BR><BR>BufferedOutputStream bufferedoutputstream =new
BufferedOutputStream(fileoutputstream);
<BR><BR>BufferedInputStream bufferedinputstream =new
BufferedInputStream(BufferedInputStream); <BR><BR>int n;
<BR><BR>while ((n=bufferedinputstream.read())!=-1) <BR><BR>{
<BR><BR>bufferedoutputstream.write(n); <BR><BR>}
<BR><BR>bufferedoutputstream.flush();
<BR><BR>bufferedoutputstream.close();
<BR><BR>bufferedinputstream.close(); <BR><BR>} <BR><BR>}
<BR><BR>本文用了一些问题和相应的解答,和大家探讨了JavaMail
Api的使用方法,希望本文对大家的学习和工作有所帮助。 <BR><BR></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD>
<TABLE class=buttomBorder cellSpacing=0 cellPadding=0 width="100%"
border=0>
<TBODY>
<TR>
<TD class=Htitle align=left> --相关文章--</TD></TR>
<TR>
<TD class=about align=left>· <A
href="http://www.javazy.com/contentex/2005916165628.shtml"
target=_blank>JavaMail的使用之邮件发送</A> (2005-09-16) </TD></TR>
<TR>
<TD class=about align=left>· <A
href="http://www.javazy.com/contentex/200581610233.shtml"
target=_blank>JavaMail API简介</A> (2005-08-16) </TD></TR>
<TR>
<TD class=about align=left>· <A
href="http://www.javazy.com/contentex/20057615926.shtml"
target=_blank>JavaMail常见问题</A> (2005-07-06) </TD></TR>
<TR>
<TD class=about align=left>· <A
href="http://www.javazy.com/contentex/200571112546.shtml"
target=_blank>在JSP中使用JavaMail</A> (2005-07-01) </TD></TR>
<TR>
<TD class=about align=left>· <A
href="http://www.javazy.com/contentex/2005622173027.shtml"
target=_blank>用JavaMail写简易电子邮件发送系统</A> (2005-06-22) </TD></TR>
<TR>
<TD class=about align=left>· <A
href="http://www.javazy.com/contentex/2005622172914.shtml"
target=_blank>深入探讨JavaMail API的使用</A> (2005-06-22)
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR></TD></TR></TBODY>
<TABLE>
<TBODY></TBODY></TABLE>
<TABLE height=37 cellSpacing=0 cellPadding=0 width=760 align=center
bgColor=#ffffff background="Java资源网 深入探讨JavaMail API的使用.files/but05_bg.gif"
border=0>
<TBODY>
<TR>
<TD width=19 background="Java资源网 深入探讨JavaMail API的使用.files/k_bg_left.gif"
bgColor=#ffa200><IMG height=37
src="Java资源网 深入探讨JavaMail API的使用.files/but05_left.gif" width=19></TD>
<TD align=left width=312
background="Java资源网 深入探讨JavaMail API的使用.files/but05_bg.gif"
height=37>版权所有©2005-2006 JAVA资源网 渝ICP备05007591号 </TD>
<TD align=left width=26
background="Java资源网 深入探讨JavaMail API的使用.files/but05_bg.gif">
<SCRIPT language=javascript
src="Java资源网 深入探讨JavaMail API的使用.files/click.htm"></SCRIPT>
</TD>
<TD class=fil align=right width=391><A class=p1
href="http://www.javazy.com/ad.asp">虚拟主机</A> | <A class=p1
href="http://www.javazy.com/page/other.asp?id=478">关于我们</A> | <A class=p1
href="http://www.javazy.com/page/other.asp?id=479">联系方式</A> | <A class=p1
href="http://www.javazy.com/page/other.asp?id=481">广告业务</A> | <A class=p1
href="http://www.javazy.com/map.asp">网站地图</A> | <A class=p1
href="http://www.javazy.com/page/index.asp?sortid=476&id=1480">友情链接</A><BR></TD>
<TD align=middle width=12 bgColor=#dbdbdb><IMG height=37
src="Java资源网 深入探讨JavaMail API的使用.files/but05_right.gif"
width=12></TD></TR></TBODY></TABLE>
<SCRIPT src="Java资源网 深入探讨JavaMail API的使用.files/urchin.js" type=text/javascript>
</SCRIPT>
<SCRIPT type=text/javascript>
_uacct = "UA-1805546-1";
urchinTracker();
</SCRIPT>
</CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -