javamail实例.docx

上传人:b****3 文档编号:3940071 上传时间:2023-05-06 格式:DOCX 页数:16 大小:21.66KB
下载 相关 举报
javamail实例.docx_第1页
第1页 / 共16页
javamail实例.docx_第2页
第2页 / 共16页
javamail实例.docx_第3页
第3页 / 共16页
javamail实例.docx_第4页
第4页 / 共16页
javamail实例.docx_第5页
第5页 / 共16页
javamail实例.docx_第6页
第6页 / 共16页
javamail实例.docx_第7页
第7页 / 共16页
javamail实例.docx_第8页
第8页 / 共16页
javamail实例.docx_第9页
第9页 / 共16页
javamail实例.docx_第10页
第10页 / 共16页
javamail实例.docx_第11页
第11页 / 共16页
javamail实例.docx_第12页
第12页 / 共16页
javamail实例.docx_第13页
第13页 / 共16页
javamail实例.docx_第14页
第14页 / 共16页
javamail实例.docx_第15页
第15页 / 共16页
javamail实例.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

javamail实例.docx

《javamail实例.docx》由会员分享,可在线阅读,更多相关《javamail实例.docx(16页珍藏版)》请在冰点文库上搜索。

javamail实例.docx

javamail实例

JavaMail深入浅出

   我干软件开发也有一点的年头了,回头想想,也经历了不少的酸甜苦辣,为解决了复杂的问题快乐过.也为不分昼夜的加班赶工程郁闷过.不过这些都没能减少我对计算机的热情,我对程序的喜好.以前对JavaMail也有一些学习性的认识,不过一直没在实际的项目中应用过.直到最近的一个项目,需要JavaMail所以我打算认真的学习一下这种技术,因为我目前擅长的是Struts,而Struts又不具备邮件发送的功能,所以我要深刻的学习一下JavaMailAPI.所以在我学会了JavaMail的基本操作的同时也将这篇文章献给大家,虽然技术含量不高,但是希望能对一些刚刚接触JavaMail的同道中人有所帮助.好了闲话少说进入正题,首先介绍几个邮件传输协议,虽然说不了解这些协议也可以实用JavaMailAPI,但是我始终认为,如果不透彻的了解一种技术的本质,即使会用了也是照葫芦画瓢,换一种模式也许就玩不转了.

   SMTP:

简单邮件传输协议(SimpleMailTransferProtocol,SMTP)由RFC821定义,它定义了发送邮件的机制,在JavaMail环境中,基于JavaMail的程序将和因特网服务供应商ISP(internetServiceProvider’s)SMTP服务器通信.SMTP服务器会中转消息给接收方SMTP服务器以便最终让用户经由POP或者IMAP获得.

   POP:

代表邮局协议(PostOfficeProtocol).目前的版本是3.所以一般都称之为POP3.这个协议是由RFC1939定义的.POP是一种机制,因特网上多大数用户用它得到邮件.它规定每个用户一个邮箱的支持.使用POP协议的时候,用户的许多性能并不是由POP协议支持的,如查看几封新邮件消息这个功能,这些功能内建在如Eudora或MicrosoftOutlook之类的程序中,它们记住一些事.所以在用JavaMail的时候,如果你想要这些信息,你就必须自己算了.

   IMAP:

是更高级的用户接收消息的协议,被定义在RFC2060中,IMAP代表因特网消息访问协议(InternetMessageAccessProtocol),目前用的版本是4,所以也叫做IMAP4.在用到IMAP的时候,邮件服务器必须支持这个协议,不能仅仅把使用POP的程序用于IMAP,并指望它支持IMAP所有性能.

   MIME:

是因特网邮件扩展标准(MultipurposeInternetMailExtensions).它不是邮件传输协议,但是对于传输的内容的消息,附件以及其他的内容定义了格式.可以理解成一个定义合适的标准.

   NNTP:

因为JavaMail将供应商和所有其它的东西分开了,您就能轻松添加额外的协议支持.NNTP就是网络新闻传输协议.

   JavaMailAPI可以到进行下载,并将mail.jar添加到classpath即可.

   JAF框架可以到进行下载,并将activation.jar添加到classpath即可.

   如果实用J2EE就没由什么特定非要用基本的JavaMailAPI了.J2EE的类就能处理了.只要确保j2ee.jar文件在classpath中就Ok了.

下面我用一个最简单的例子还演示第一条消息的发送.

1,获取系统Properties.

Propertiesprops=System.getProperties();

2,将您的SMTP服务器名添加到mail.smtp.host关键字的属性中.

Props.pout(“mail.smtp.host”,host);

3,获取基于PropertiesSession对象.

Sessionsession=Session.getDefaultInstance(props,null);

4,从Session创建一个MimeMessage.

MimeMessagemessage=newMimeMessage(session);

5,设置消息from域.

Message.setForm(newInternetAddress(from));

6,设置to域.

Message.addRecipient(Message.RecipientType.TO,newInternetAddress(to));

7,设置消息主题.

message.setSubject(“HelloJavaMail”);

8,设置消息内容.

Message.setText(“WelcometoJavaMail”);

9发送消息.

Transport.send(message);

10,在编译用运的时候传递MSTP服务器,from地址,to地址.

   通过简单的接触了JavaMail相信大家多邮件发送也有了简单的了解和认识,下面我主要研究一下它的具体功能,也就是说具体的接口或类的含义.

   Session类定义了一个基本的邮件会话,所有的其他类都是由这个session才得意生效的,Session对象用java.util.Properties对象获取信息,如邮件服务器,用户名,密码及整个应用程序中共享的其他信息.类的构造器是此有的,private.它能用getDefaultInstance()方法来共享.获取Session对象的方方法如下:

Propertiesprops=newProperties();

Sessionsession=Session.getDefaultInstance(props,null);

Null参数都是Authenticator对象,在这里没有使用.

对于大多数情况,共享的session已经足够用了.

   Message消息类,在获得了Session对象后,就可以继续创建要发送的消息.因为Message是个抽象类,您必须用一个子类,多数情况下为java.mail.internet.MimeMessage.这个能理解成MIME类型和头的电子邮件消息.正如不同的RFC中定义的,虽然在某些头部域非ASCII字符也能被编译,但是Message头只能被限制用US-ASCII字符.要创建一个Message请将Session对象传递给MimeMessage的构造器.

MimeMessagemessage=newMimeMessage(session);

一旦获得消息,就可以设置各个部分了.最基本的就是setContent()方法,例如/

message.setContent(“Hello”,”text/plain”);

如果知道在实用MimeMessage,而且消息是纯文本格式,就可以用setText()方法,它只需要代表实际内容的参数.(Mime类型缺省为text/plain)

用setSubject()方法设置subject(主题);

message.setSubject(“主题”);

   Address地址类,和Message一样也是一个抽象类,一旦创建了Session和Message并将内容填入消息后,就可以用Address确定信件的地址了,用javax.mail.internet.

InternetAddress类.若创建的地址只包含电子邮件地址,只要传递电子邮件地址给构造器就可以了.例如:

Addressaddress=newInternetAddress(“it5719@”);

若希望名字挨着电子邮件现实,就可以把它传递给构造器,如下:

Addressaddress=newInternetAddress(“it5719@”,”我心依旧”);

需要为消息的from域和to域创建地址对象,除非邮件服务器阻止,没有什么能阻止你发送一段看上去是任何人的消息了呵呵.一旦创建address将他们域消息连接方法有两种,如要要识别发件人的就可以用setFrom()和setReplyTo方法.然后message.setFrom(address);

需要实用多个from地址的就用addFrom()方法.例子如下:

Address[]address=,.,.;   message.addFrom(address);

若要识别消息recipient收件人,就要实用addRecipient()方法了.例如:

message.addRecipient(type,address)

   Authenticator与类一样,JavaMailAPI也可以利用Authentcator通过用户名密码访问受保护的资源.对于JavaMail来说,这些资源就是邮件服务器,Authentcator类在javax.mail包中.要使用Authenticator,首先创建一个抽象的子类,并从

GetPasswordAuthentication方法中返回passwordAuthentication实例,创建完成后,您必须向session注册Authenticator,然后在需要认证的时候会通知它,其实说白了就是把配置的用户名和密码返回给调用它的程序.例如:

Propertiesprops=newproperties();

Authenticatorauth=newMailAuthenticator()//接口声明,创建自己新类的实例.

Sessionsession=Session.getDefauItInstance(props,auth);

   Transport消息发送传输类,这个类用协议指定的语言发送消息,通常是SMTP,它是抽象类,它的工作方式与Session有些类似,尽调用静态方法send()方法,就OK了.例如:

Transport.send(message);

或者也可以从针对协议的会话中获取一个特定的实例,传递用户名和密码.发送消息,然后关闭连接,例如:

message.saveChanges();

transporttransport=session.getTreansport(“smtp”);//指定的协议

transport.connect(host,username,password);

transport.sendMessage(message,message.getAllRecipients());

transport.close();

如果要观察传到邮件服务器上的邮件命令,请用session.setDubug(true)设置调试标志.

   Store和folder用session获取消息,与发送消息开始很相似,但是在session得到后,很可能实用用户名和密码或实用Authenticator连接到一个Store.类似于Transport,也是一样要告诉store用什么协议.例如

Storestore=session.getStore(“pop3”);

Store.connect(host,username,password);

连接到Store之后,接下来,获得一个folder,必须打开它就可以读取里边的消息了.

Folderfolder=store.getFolder("INBOX");

folder.open(Folder.READ_ONLY);

Message[]message=folder.getMessages();

POP3唯一可用的文件夹就是INBOX,如果实用IMAP,还可以用其他的文件夹.

当读到了具体的message以后,就可以用getContent来获取内容,或者用writeTo()将内容写入流,getContent()方法只能得到消息内容,而writeTo()的输出却包含消息头.

System.out.println(((MimeMessage)message).getConntent());

一旦读取完毕邮件,要关闭store和folder的连接.

folder.colse(boolean);

store.colse();

传递给folder的close()方法的boolean参数表示是否清楚已删除的消息从而更新folder.

   上面就是JavaMail邮件操作的基本的常用类,我觉得理解了这几个类的机制,基本就可以处理一般的邮件操作了.下面是一个我写的JavaMail实现邮件发送的代码.

首先是一个Authenticator类的实现:

记录用户名和密码:

importjavax.mail.*;

 

 

publicclassMailAuthenticatorextendsAuthenticator

{

   //******************************

   //由于发送邮件的地方比较多,

   //下面统一定义用户名,口令.

   //******************************

   publicstaticStringHUAWEI_MAIL_USER="it5719@";

   publicstaticStringHUAWEI_MAIL_PASSWORD="密码";

 

 

   publicMailAuthenticator()

   {

   }

 

   protectedPasswordAuthenticationgetPasswordAuthentication()

   {

      returnnewPasswordAuthentication(HUAWEI_MAIL_USER,HUAWEI_MAIL_PASSWORD);

   }

 

}

 

这个类是发送邮件的类.

 

 

packagemon.mail;

 

/**

 *此处插入类型说明。

 *创建日期:

(2006-4-2114:

57:

16)

 *@author:

张宏亮

 */

 

importjava.util.*;

importjava.io.*;

importjavax.mail.*;

importjavax.mail.internet.*;

importjavax.activation.*;

 

 

publicclassSendMail{

 

   //要发送Mail地址

   privateStringmailTo=null;

   //Mail发送的起始地址

   privateStringmailFrom=null;

   //SMTP主机地址

   privateStringsmtpHost=null;

   //是否采用调试方式

   privatebooleandebug=false;

 

   privateStringmessageBasePath=null;

   //Mail主题

   privateStringsubject;

   //Mail内容

   privateStringmsgContent;

 

   privateVectorattachedFileList;

   privateStringmailAccount=null;

   privateStringmailPass=null;

   privateStringmessageContentMimeType="text/html;charset=gb2312";

 

   privateStringmailbccTo=null;

   privateStringmailccTo=null;

   /**

    *SendMailService构造子注解。

    */

   publicSendMail(){

      super();

   

   }

 

   privatevoidfillMail(Sessionsession,MimeMessagemsg)throwsIOException,MessagingException{

   

      StringfileName=null;

      MultipartmPart=newMimeMultipart();

      if(mailFrom!

=null){

          msg.setFrom(newInternetAddress(mailFrom));

          System.out.println("发送人Mail地址:

"+mailFrom);

      }else{

          System.out.println("没有指定发送人邮件地址!

");

          return;

      }

      if(mailTo!

=null){

          InternetAddress[]address=InternetAddress.parse(mailTo);

          msg.setRecipients(Message.RecipientType.TO,address);

          System.out.println("收件人Mail地址:

"+mailTo);

      }else{

          System.out.println("没有指定收件人邮件地址!

");

          return;

      }

   

      if(mailccTo!

=null){

          InternetAddress[]ccaddress=InternetAddress.parse(mailccTo);

          System.out.println("CCMail地址:

"+mailccTo);

          msg.setRecipients(Message.RecipientType.CC,ccaddress);

      }

      if(mailbccTo!

=null){

          InternetAddress[]bccaddress=InternetAddress.parse(mailbccTo);

          System.out.println("BCCMail地址:

"+mailbccTo);

          msg.setRecipients(Message.RecipientType.BCC,bccaddress);

      }

      msg.setSubject(subject);

      InternetAddress[]replyAddress={newInternetAddress(mailFrom)};

      msg.setReplyTo(replyAddress);

      //createandfillthefirstmessagepart

      MimeBodyPartmBodyContent=newMimeBodyPart();

      if(msgContent!

=null)

          mBodyContent.setContent(msgContent,messageContentMimeType);

      else

          mBodyContent.setContent("",messageContentMimeType);

      mPart.addBodyPart(mBodyContent);

      //attachthefiletothemessage

      if(attachedFileList!

=null){

          for(EnumerationfileList=attachedFileList.elements();fileList.hasMoreElements();){

              fileName=(String)fileList.nextElement();

              MimeBodyPartmBodyPart=newMimeBodyPart();

   

              //attachthefiletothemessage

              FileDataSourcefds=newFileDataSource(messageBasePath+fileName);

              System.out.println("Mail发送的附件为:

"+messageBasePath+fileName);

              mBodyPart.setDataHandler(newDataHandler(fds));

              mBodyPart.setFileName(fileName);

              mPart.addBodyPart(mBodyPart);

          }

      }

      msg.setContent(mPart);

      msg.setSentDate(newDate());

   }

   /**

    *此处插入方法说明。

    */

   publicvoidinit()

   {

   

   }

   /**

    *发送e_mail,返回类型为int

    *当返回值为0时,说明邮件发送成功

    *当返回值为3时,说明邮件发送失败

    */

   publicintsendMail()

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2