版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六次课用Java收发E-Mail(2)计算机科学与技术学院网络工程教研室袁卫华用java收发E-Mail一、复习二、JavaMailAPI核心类简介六、思考和作业
三、应用举例五、Authenticator类的用法及其应用举例四、问题解答一、因特网电子邮件系统的组成一、复习1.用户代理useragent,又称为邮件阅读器,允许用户阅读、回复、转发、保存和撰写报文。俗称电子邮件客户端软件。常用的电子邮件客户端软件Foxmail,Outlook,Dreammail,KooMail,IncrediMail,Becky!,PocoMail,Thunderbird,TheBat!,Eudora二、JavaMailAPI介绍1、JavaMailAPI简介JavaMailAPI是一个用于阅读、编写和发送电子邮件的可选包。功能:1.JavaMailAPI为Java程序开发者提供了一个访问邮件服务器的通用接口。2.用来创建邮件用户代理(MailUserAgent,MUA)类型程序,MUA类型的程序能让用户阅读和书写邮件。3.用JavaMailAPI编写的MUA程序依赖邮件传输代理(MailTransferAgent,MTA)处理实际消息传输。MTA:即通常的邮件服务器。二、JavaMailAPI介绍2、JavaMailAPI分层体系整个JavaMail体系可分为3层:抽象层Internet邮件实现层协议实现层JavaMailAPI包括:抽象层Internet邮件实现层二、JavaMailAPI介绍JavaMailAPI包含很多类和方法。其中核心类主要有SessionStoreFolderMessageAddressAuthenticatorTransport可用这些类可以完成大量常见的电子邮件任务。这些类均位于javax.mail顶级包中。3、JavaMail核心类层次结构邮件会话存储空间邮件夹邮件详细信息构造邮件地址邮件身份验证邮件发送出去二、JavaMailAPI介绍3、JavaMail核心类层次结构SessiongetStore()getTransport()Storeconnect()getFolder()Transportsend()getFolder()Folderopen()create()DeletecloseMessageAddress邮件会话存储空间邮件夹邮件详细信息构造邮件地址邮件发送出去二、JavaMailAPI介绍1.Session类Session类是JavaMailAPI的最高层入口类,它定义了一个基本邮件会话,是邮件系统的访问入口。所有其他类都是经由这个会话才得以生效。利用Session类可以在客户端与邮件服务器之间建立会话过程,进而访问邮箱、文件夹、邮件;或者是利用SMTPServer发送邮件。4、JavaMail核心类功能介绍二、JavaMailAPI介绍1.Session类Session类的构造方法是私有的,不能被继承,也不能使用new语句来创建实例。但它提供了两个静态方法:getInstance()和getDefaultInstance()方法来获取Session实例。如:4、JavaMail核心类功能介绍EmaiAuthenticatorauth=new EmaiAuthenticator(“wangyexjzy",“126126");Propertiesprops=System.getProperties();props.put("mail.smtp.host",smtp);props.put("mail.smtp.auth",true);Sessionsession=Session.getInstance(props,(Authenticator)auth);二、JavaMailAPI介绍2.Store类Store类表示接收邮件服务器上注册用户的存储空间,可以实现特定邮件协议上的读、写、监视、查找等操作。通过Store类可以访问Folder类(代表邮箱文件夹)。在使用类方法getFolder()获取一个Folder对象时,如果使用的是POP3协议,那么只能使用INBOX收件夹。如果使用的是IMAP协议,则可使用自己定义的收件夹。4、JavaMail核心类功能介绍二、JavaMailAPI介绍3.Folder类Folder类实现邮箱中的文件管理。POP3邮箱中的INBOX收件夹。Folder可以容纳消息(Message)或子目录。这样就形成了一个树状分层体系。利用Folder类,可以处理上下级的文件夹,也可以处理邮件。Folder类处理邮件的功能特别强大。4、JavaMail核心类功能介绍二、JavaMailAPI介绍4.Message类Message类实现了邮件管理,利用Message类可读取邮件的详细信息,还可以设定邮件的状态,以及对邮件进行各种操作。Message是一个抽象类,必须用其子类,如ernet.MimeMessage。Message类对象是根据获得的Session对象来创建的,主要内容是要发送的消息。MimeMessagemsg=newMimeMessage(session);MimeMessage是一个携带MIME类型和头的电子邮件消息。4、JavaMail核心类功能介绍二、JavaMailAPI介绍4.Message类MimeMessagemsg=newMimeMessage(session);
//创建Message对象msg.setFrom(newInternetAddress(from));
//设置发件人地址msg.addRecipient(Message.RecipientType.TO, newInternetAddress(to));
//设置收件人地址msg.setSubject(“SendMailTest”);//设置邮件主题Strings="TestText";msg.setText(s);//创建邮件正文4、JavaMail核心类功能介绍二、JavaMailAPI介绍5.Transport类由服务者提供的类,实现用特定的协议发送消息或邮件。它是抽象类,工作与Session类相似,仅调用静态send()方法即可完成消息或邮件的发送。例如:Transport.send(msg);也可以从针对自己的协议会话中获取一个特定的实例,传递用户名和密码,发送消息,关闭连接。Transporttransport=session.getTransport("smtp");transport.connect(smtp,“wangyexjzy@126.com",“126126");transport.sendMessage(msg,msg.getAllRecipients());transport.close();4、JavaMail核心类功能介绍二、JavaMailAPI介绍6.Address类Address主要用来确定邮件的地址。Address类也是一个抽象类,实际编程中经常使用的是Jernet.InternetAddress类。Address有两种常用的构造方法:Addressaddress=newInternetAddress(“abc@126.com”);//用电子邮件地址创建Addressadderss=new InternetAddress(“abc@126.com”,”Tom”);//用电子邮件地址和用户设置的名字创建4、JavaMail核心类功能介绍二、JavaMailAPI介绍7.Authenticator类JavaMailAPI利用Authenticator通过用户名和密码访问受保护的资源。Authenticator为抽象类。要使用Authenticator,需先创建抽象类的子类,并从getPasswordAuthentication()方法中返回PasswordAuthentication实例。创建完成后,还必须向Session类注册Authenticator。然后,在需要认证的时候,就会通知Authenticator。4、JavaMail核心类功能介绍三、应用举例设置mail.host属性,指向本地服务器利用session.getInstance()启动邮件会话创建MimeMessage邮件对象设置收件人、发件人、邮件主题、邮件内容利用Transport.send()方法发送邮件1、JavaMail编程基本步骤三、应用举例例题-1安装一个本地邮件服务器,利用JavaMailAPI编程从邮箱admin@发送email到邮箱admin@。准备工作配置本地邮件服务器merak,/,安装过程按照默认的步骤安装即可安装到最后的步骤时,需要Hostname,Domain,Username和Password,填入如下信息:2、例题三、应用举例例题-1:设计思路2、例题数据成员init()方法sendMessage()方法createSimpleMessage()方法main()方法protectedSessionsession;//邮件会话privateString sendHost="localhost";//邮件服务器主机名privateString sendProtocol="smtp";//发送邮件协议privateStringtoAddr="admin@";//收件人地址privateStringfromAddr="admin@";//发件人地址数据成员三、应用举例例题-1设计思路2、例题数据成员init()方法sendMessage()方法createSimpleMessage()方法main()方法publicvoidinit()throwsException{//根据配置的JavaMail属性生成邮件会话session对象Propertiesprops=newProperties();//配置JavaMail属性props.put("tocol",sendProtocol);//指定邮件发送协议props.put("mail.smtp.class","com.sun.mail.smtp.SMTPTransport");//指定支持SMTP协议的Transport具体类,由第三方支持props.put("mail.smtp.host",sendHost);//指定采用SMTP协议的邮件发送服务器的IP地址或者主机名session=Session.getDefaultInstance( props);//创建Session实例session.setDebug(true);//输出日志。}init()方法三、应用举例例题-1设计思路:需要设置的JavaMail属性tocol:指定邮件发送协议tocol:指定邮件接收协议mail.smtp.class:指定支持SMTP协议的Transport具体类,允许由第三方提供mail.imap.class:指定支持IMAP协议的Store具体类,允许由第三方提供mail.smtp.host:指定采用SMTP协议的邮件发送服务器的IP地址或者主机名2、例题三、应用举例例题-1设计思路2、例题数据成员init()方法sendMessage()方法createSimpleMessage()方法main()方法publicMessagecreateSimpleMessage(StringfromAddr,StringtoAddr)throwsException{Messagemsg=newMimeMessage(session);//根据session对象创建Message对象InternetAddress[]toAddrs=InternetAddress.parse(toAddr,false);msg.setRecipients(Message.RecipientType.TO,toAddrs);//邮件接收者地址msg.setSentDate(newDate());//日期msg.setSubject(“Hello!”);//主题msg.setFrom(newInternetAddress(fromAddr));//设置发件人地址msg.setText("Howareyou?!!");//正文returnmsg;}createSimpleMessage()方法三、应用举例例题-1设计思路2、例题数据成员init()方法sendMessage()方法createSimpleMessage()方法main()方法publicvoidsendMessage(StringfromAddr,StringtoAddr)throwsException{//发送邮件方法Message msg=createSimpleMessage(fromAddr,toAddr);Transport.send(msg);}sendMessage()方法三、应用举例例题-1设计思路2、例题数据成员init()方法sendMessage()方法createSimpleMessage()方法main()方法publicstaticvoidmain(String[]args)throwsException{MailSendClientToMyDomainclient=newMailSendClientToMyDomain();client.init();client.sendMessage(client.fromAddr,client.toAddr);}main()方法三、应用举例例题-1控制台输出的debug信息二、例题三、应用举例例题-2利用JavaMailAPI编制程序,读取邮箱admin@收件箱中的所有邮件。二、例题三、应用举例例题-2利用JavaMailAPI编制程序,读取邮箱admin@收件箱中的所有邮件。2、例题三、应用举例例题-2:设计思路2、例题数据成员init()方法receiveMessage()main()方法browseMessagesFromFolder(StringfolderName)browseMessagesFromFolder(Folderfolder)数据成员protectedSessionsession;//邮件会话protectedStorestore;//store对象privateStringreceiveHost= "localhost";//接收邮件服务器的主机名privateStringreceiveProtocol= "imap";//接收邮件协议privateStringusername="admin";//邮件用户名privateStringpassword="1234";//邮件密码privateStringtoAddr="admin@";//邮件地址三、应用举例例题-2:设计思路2、例题数据成员init()方法receiveMessage()main()方法browseMessagesFromFolder(StringfolderName)browseMessagesFromFolder(Folderfolder)publicvoidinit()throwsException{//设置JavaMail属性,并创建sessionPropertiesprops=newProperties();props.put("tocol",
receiveProtocol);props.put("mail.imap.class","com.sun.mail.imap.IMAPStore");session=Session.getDefaultInstance(props);store=session.getStore(receiveProtocol);//接收邮件服务器上注册用户的存储空间,参数为接收邮件协议imapstore.connect(
receiveHost,username,
password);//连接到接收邮件服务器}init()方法三、应用举例例题-2:设计思路2、例题数据成员init()方法receiveMessage()main()方法browseMessagesFromFolder(StringfolderName)browseMessagesFromFolder(Folderfolder)publicvoidbrowseMessagesFromFolder(Folderfolder)throwsException{folder.open(Folder.READ_ONLY);//打开邮件夹System.out.println(folder.getMessageCount()+"messagesininbox!");//获得邮件数目System.out.println(folder.getUnreadMessageCount()+"unreadmessagesininbox!");//未读邮件数目Message[]messages=folder.getMessages();//从邮件夹中取出邮件存于数组messages[]中for(inti=1;i<=messages.length;i++){System.out.println("-------第"+i+"封邮件");folder.getMessage(i).writeTo(System.out);System.out.println();}folder.close(false);}browseMessagesFromFolder(Folderfolder)三、应用举例例题-2:设计思路2、例题数据成员init()方法receiveMessage()main()方法browseMessagesFromFolder(StringfolderName)browseMessagesFromFolder(Folderfolder)publicvoidbrowseMessagesFromFolder(Folderfolder)throwsException{folder.open(Folder.READ_ONLY);//打开邮件夹……for(inti=1;i<=messages.length;i++){System.out.println("From:"+messages[i]. getFrom()[0]);System.out.println("Subject:"+messages[i]. getSubject());System.out.println("Text:"+messages[i]. getContent());System.out.println();}folder.close(false);}browseMessagesFromFolder(Folderfolder)三、应用举例例题-2:设计思路2、例题三、应用举例例题-2:设计思路2、例题数据成员init()方法receiveMessage()main()方法browseMessagesFromFolder(StringfolderName)publicvoidbrowseMessagesFromFolder(StringfolderName)throwsException{Folderfolder= store.getFolder(folderName);//根据folderName,返回store中指定的邮件夹if(folder==null) thrownewException(folderName+“ 邮件夹不存在!");browseMessagesFromFolder(folder);//调用重载方法//browseMessagesFromFolder(Folderfolder)输//出邮件夹中的信息}browseMessagesFromFolder(Folderfolder)browseMessagesFromFolder(StringfolderName)三、应用举例例题-2:设计思路2、例题数据成员init()方法receiveMessage()main()方法browseMessagesFromFolder(StringfolderName)browseMessagesFromFolder(Folderfolder)publicstaticvoidmain(String[]args)throwsException{MailReceiveClientFromMydomainclient=newMailReceiveClientFromMydomain();client.init();client.receiveMessage();client.close();}receiveMessage()publicvoidreceiveMessage()throwsException{browseMessagesFromFolder("inbox");}三、应用举例例题-2:设计思路2、例题数据成员init()方法receiveMessage()main()方法browseMessagesFromFolder(StringfolderName)browseMessagesFromFolder(Folderfolder)publicstaticvoidmain(String[]args)throwsException{MailReceiveClientFromMydomainclient=newMailReceiveClientFromMydomain();client.init();client.receiveMessage();client.close();}receiveMessage()publicvoidreceiveMessage()throwsException{browseMessagesFromFolder("inbox");}main()方法什么叫MX记录(邮件交换记录)?在自己编写的程序中,以下邮件发送过程能否成功?126---------126126-------126-------企业常用的邮件服务器有哪些?通常情况下邮件是如何发送和接收的?思考题三、应用举例三、应用举例例题-1运行界面2、例题三、应用举例2、例题protectedSessionsession;//邮件会话privateStringsendHost="localhost";//邮件服务器主机名privateStringsendProtocol="smtp";//发送邮件协议//这里toAddr可以换成你自己的邮箱地址privateStringtoAddr="wangluobiancheng09@126.com";privateStringfromAddr="admin@";例题-1代码三、应用举例将本次课所讲的两个例子移植到图形操作界面下如果要读取你自己126或者其他邮箱的邮件,应该如何改写例题?如何只读取某个人给你发送的所有邮件?如何通过程序从126邮箱向其他用户邮箱发送一封邮件?应如何改写例题?练习题在自己编写的程序中,以下邮件发送过程能否成功?126---------126126-------126-------四、问题解答1、问题之一:MX记录MailExchanger
是邮件交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器。当Internet上的某用户要发一封信给user@时该用户的邮件系统通过DNS查找这个域名的MX记录如果MX记录存在,用户计算机就将邮件发送到MX记录所指定的邮件服务器上。
四、问题解答1、问题之二:常用的邮件服务器地址:POP3服务器地址:SMTP服务器地址:
163.com:
POP3服务器地址:SMTP服务器地址::
POP3服务器地址:SMTP服务器地址::POP3服务器地址:SMTP服务器地址::POP3服务器地址:SMTP服务器地址::POP3服务器地址:SMTP服务器地址:四、问题解答1、问题之三:检查邮件系统的MX记录的方法nslookup:使用它来查询DNS中的各种数据。可以在Windows的命令行下直接运行nslookup进入一个交互模式,在这里能查询各种类型的DNS数据C:\>nslookup
DefaultServer:[66]
Address:66
>settype=mx
>四、问题解答1、问题之三:检查邮件系统的MX记录的方法nslookup
DefaultServer:[66]
Address:66
Non-authoritativeanswer:
MXpreference=10,mailexchanger=
nameserver=
nameserver=
internetaddress=79
internetaddress=30
internetaddress=66internetaddress=5四、问题解答1、问题之三:检查邮件系统的MX记录的方法nslookup
DefaultServer:[66]
Address:66
Non-authoritativeanswer:
MXpreference=10,mailexchanger=
nameserver=
nameserver=
internetaddress=79
internetaddress=30
internetaddress=66internetaddress=5用java收发E-Mail一、复习二、JavaMailAPI核心类简介六、思考和作业
三、应用举例五、Authenticator类的用法及其应用举例四、问题解答五、Authenticator类1、Authenticator类简介JavaMailAPI利用Authenticator类通过用户名和密码访问受保护的资源,实现E-mail身份验证。验证对象需要通过Session传递给服务器。用法
1.Authenticator是抽象类,首先定义一个继承了该抽象类的具体子类。2.然后通过实现Authentication类中的getPasswordAuthentication()方法中返回PasswordAuthentication对象。PasswordAuthentication对象中包含了通过SMTP服务器验证所需的用户名和密码。publicPasswordAuthentication getPasswordAuthentication(){returnnew PasswordAuthentication(m_username,m_userpass);}五、Authenticator类1、Authenticator类简介用法
3.最后将PasswordAuthentication对象在邮件会话Session中注册,以便验证用户名和密码。然后,在需要认证的时候,就会通知Authenticator。EmaiAuthenticatorauth=newEmaiAuthenticator(“wangyexjzy",“126126");Sessionsession=Session.getInstance(props,(Authenticator)auth);Storestore=session.getStore("pop3");store.connect(pop3,null,null);五、Authenticator类2、Authenticator类应用举例例题-1
读取admin@中所有发件人是admin@的邮件。要求:在程序中提供身份验证。思路:MailReceiveClientFromMydomain.java中在连接admin@中读取所有的邮件信息时,也提供了身份验证privateStringusername="admin";//邮件用户名privateStringpassword=“1234”;//邮件密码store.connect(receiveHost,username,password);//连接到接收邮件服务器这种做法有什么缺点吗?五、Authenticator类2、Authenticator类应用举例例题-1
思路但是上述代码是将用户名和口令作为硬代码写在程序中,但是在实际应用中,往往是希望连接邮件服务器时,能弹出一个对话框,提示用户输入用户名和密码。要达到这个效果,需要创建一个创建继承了Authenticator的子类,在这个子类中实现getPasswordAuthentication()方法,由这个方法返回一个PasswordAuthentication实例。五、Authenticator类2、Authenticator类应用举例例题-1:思路classEmaiAuthenticatorextendsAuthenticator{privateStringm_username;privateStringm_userpass;EmaiAuthenticator(Stringusername,Stringuserpass){super();m_username=username;m_userpass=userpass;}publicPasswordAuthenticationgetPasswordAuthentication(){ returnnewPasswordAuthentication(m_username,m_userpass);}}观察程序在实现上与MailReceiveClientFromMydomain.java有何不同?五、Authenticator类2、Authenticator类应用举例例题-1
:程序流程数据成员init()方法receiveMessage()main()方法browseMessagesFromFolder(StringfolderName)browseMessagesFromFolder(Folderfolder)数据成员EmaiAuthenticatorma;//验证类EmaiAuthenticator对象protectedSessionsession;//邮件会话protectedStorestore;privateStringreceiveHost="localhost";//接收邮件服务器主机名privateStringreceiveProtocol=
"imap";//接收邮件协议privateStringusername="admin";//邮箱用户名privateStringpassword="1234";//邮箱密码五、Authenticator类2、Authenticator类应用举例例题-1
:程序流程数据成员init()方法receiveMessage()main()方法browseMessagesFromFolder(StringfolderName)browseMessagesFromFolder(Folderfolder)Propertiesprops=newProperties();props.put("tocol",receiveProtocol);props.put("mail.imap.class","com.sun.mail.imap.IMAPStore");props.put("mail.smtp.auth",true);//设置需要身份验证的JavaMail属性ma=newEmaiAuthenticator (username,password);//实例化身份验证类对象session=Session.getDefaultInstance(props,(Authenticator)ma);////在session对象中注册PasswordAuthentication对象mastore=session.getStore(receiveProtocol);store.connect(receiveHost,null,null);//连接邮件服务器时,将用户名和口令设置为null。init()方法五、Authenticator类2、Authenticator类应用举例例题-1
:程序流程问题:身份验证在什么时候发生?……ma=newEmaiAuthenticator (username,password);//实例化身份验证类对象session=Session.getDefaultInstance(props,(Authenticator)ma);//以身份验证类对象ma为参数返回session对象store=session.getStore (receiveProtocol);store.connect(receiveHost,null,null);//连接邮件服务器Store.connect(receiveHost,null,null)调用MailAuthenticator的getPasswordAuthentication()方法。返回一个PasswordAuthentication对象,这个对象中包含了用户名和口令信息,进行验证注册:session=Session.getDefaultInstance(props,(Authenticator)ma);五、Authenticator类2、Authenticator类应用举例例题-1
:程序流程问题:如果程序中提供的用户名或密码错误的话,会抛出哪种异常?Exceptioninthread"main"javax.mail.AuthenticationFailedException:AUTHENTICATEUnknownuserorincorrectpassword atcom.sun.mail.imap.IMAPStocolConnect(IMAPStore.java:566) atjavax.mail.Service.connect(Service.java:310) atjavax.mail.Service.connect(Service.java:169)
atchap09.MailClientAuthFromMydomain.init(MailClientAuthFromMydomain.java:52) atchap09.MailClientAuthFromMydomain.main(MailClientAuthFromMydomain.java:91)store.connect(receiveHost,null,null);client.init();五、Authenticator类2、Authenticator类应用举例例题-2
:在读取admin@中的邮件时候,首先弹出一个对话框,在用户输入用户名和密码单击“确定”按钮后,系统先根据用户输入的信息进行身份验证,通过后才完成用户收发邮件的要求。和刚才的例题有什么区别?刚才的例题将用户名和密码显式地定义在程序的变量中。这里要求用户在图形界面下输入用户名和密码。五、Authenticator类2、Authenticator类应用举例例题-2
:设计思路一、信息验证类MailAuthenticatorDialog.java的设计创建一个Authenticator的子类,对EmaiAuthenticator.java改造。将其中的成员变量username,password直接通过变量参数进行传递,改为用户通过对话框进行输入。所以需要设计一个弹出式对话框,用来在合适的时候弹出,让用户输入用户名和密码。二、邮件读取或发送过程,同其他程序五、Authenticator类2、Authenticator类应用举例例题-2
:设计思路-MailAuthenticatorDialog.java:设计 弹出式对话框JDialog在Java中,对话框是有边框、有标题的独立存在的容器,并且不能被其他容器包容JDialog不能作为程序的最外层容器,也不能包含菜单条JDialog一般有固定的布局,且不能随便改变对话框的大小JDialog必须隶属于一个JFrame,并且由这个JFrame负责弹出创建JDialogJDialog(JFrame
owner,String
title,boolean
modal)
创建一个隶属于某个JFrame、指定的标题和有模式或无模式对话框的对话框。
五、Authenticator类2、Authenticator类应用举例例题-2
:设计思路-MailAuthenticatorDialog.java:设计弹出式对话框第一步:创建JDialogpasswordDg=newJDialog(newJFrame(),"输入用户名和密码",true);Containercontainer= passwordDg.getContentPane();//取得对话框隶属的那个JFrame的顶级容器container.setLayout(newGridLayout(4,1));//设置为网格布局方式五、Authenticator类2、Authenticator类应用举例例题-2
:设计思路-MailAuthenticatorDialog.java:第一步:设计弹出式对话框JDialogmainLb=newJLabel("请输入用户名和口令:");container.add(mainLb);//将标签添加到面板中JPaneluserJp=newJPanel();userLb=newJLabel("用户名:");usernameTf=newJTextField(20);userJp.add(userLb);userJp.add(usernameTf);//将用户名标签和输入框添加到JPanle中usernameTf.setText(username);//设置用户名输入框的初始值container.add(userJp);//将userJp添加到顶级容器container中五、Authenticator类2、Authenticator类应用举例例题-2
:设计思路-MailAuthenticatorDialog.java第一步:设计弹出式对话框JDialogJPanelpasswordPanel=newJPanel();passwordLb=newJLabel("密码:");passwordPf=newJPasswordField(20);passwordPanel.add(passwordLb);passwordPanel.add(passwordPf);//将密码标签和输入框添加到面板JPanelpasswordPanel中container.add(passwordPanel);//将passwordPanel添加到顶级容器container中JPanelokPanel=newJPanel();okBtn=newJButton("确定");okPanel.add(okBtn);container.add(okPanel);passwordDg.pack();五、Authenticator类2、Authenticator类应用举例例题-2
:设计思路-MailAuthenticatorDialog.java第一步:创建弹出式对话框JDialogActionListeneral=newActionListener(){//匿名内部类,动作事件ActionEvnetpublicvoidactionPerformed(ActionEvente){passwordDg.setVisible(false);//隐藏用户名和密码的对话框}};usernameTf.addActionListener(al);passwordPf.addActionListener(al);okBtn.addActionListener(al);问题:为啥动作事件发生时要隐藏对话框passwordDg?五、Authenticator类2、Authenticator类应用举例例题-2
:设计思路-MailAuthenticatorDialog.java第二步:实现getPasswordAuthentication()方法,由这个方法返回一个PasswordAuthentication实例publicPasswordAuthenticationgetPasswordAuthentication(){passwordDg.setVisible(true);//程序执行到需要进行验证的时候,显示该对话框Stringpassword=newString(passwordPf.getPassword());Stringusername=usernameTf.getText();passwordPf.setText("");returnnewPasswordAuthentication(username,password);//返回一个PasswordAuthentication对象}五、Authenticator类2、Authenticator类应用举例例题-2
:设计思路-MailClientFromMydomainDialog.java第三步:在MailClientFromMydomainDialog.java中利用弹出式对话框实现E-mail身份验证,在验证通过后输出邮件所有邮件信息。数据成员init()方法receiveMessage()main()方法browseMessagesFromFolder(StringfolderName)browseMessagesFromFolder(Folderfolder)数据成员Authenticatorma;//验证类Authenticator对象protectedSessionsession;//邮件会话protectedStorestore;privateStringreceiveHost="localhost";//接收邮件服务器主机名privateStringreceiveProtocol="imap";//接收邮件协议五、Authenticator类2、Authenticator类应用举例例题-2
:设计思路-MailClientFromMydomainDialog.java数据成员init()方法receiveMessage()main()方法browseMessagesFromFolder(StringfolderName)browseMessagesFromFolder(Folderfolder)……props.put("mail.smtp.auth",true);ma=newMailAuthenticatorDialog("admin");//实例化身份验证类对象session=Session.getDefaultInstance(props,(Authenticator)ma);try{store=session.getStore(receiveProtocol);store.connect(receiveHost,null,null);}catch(AuthenticationFailedExceptione){
JOptionPane.showMessageDialog(null,"用户名和密码不正确,系统结束!"); System.exit(0);}catch(Exceptione1){e1.printStackTrace();}init()方法五、Authenticator类2、Authenticator类应用举例例题-3
:修改例题-2,读取gaodengjisuanji11@126.com邮箱中发件人是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 结肠癌术后肠造口缺血坏死护理查房
- 2026年山东菏泽市高三二模高考生物试卷试题(含答案详解)
- 2025年内蒙古阿拉善高新技术产业开发区高中部教育领域教师招聘真题
- 2025年重庆武隆区法院招聘聘用制书记员真题
- 2025年凉山州会理市妇幼保健院招聘真题
- 《数控加工编程与操作2》课件-3.3.1篮球三维建模
- 2026泉州丰泽国有投资集团有限公司经营类岗位招聘10人笔试参考题库及答案解析
- 2026年安阳市政府采购中心(公共资源交易中心)人员招聘考试备考试题及答案详解
- 2026北京市大兴区人民医院招聘临时辅助用工人员2人考试参考题库及答案解析
- 秩序部安全管理方案落地培训
- 汽车清洗空调蒸发箱课件
- 高空坠物安全知识培训
- 医学人工智能导论
- 智慧工地施工方案及技术措施
- 艾滋病患者的心理与护理
- 毕业设计(论文)-液压挖掘机驾驶室方案设计
- 《工程水文学》习题册全解1
- 北京市海淀区2024-2025学年七年级下学期期中地理试题(解析版)
- 中国艾滋病诊疗指南(2024版)解读课件
- 天元公学模拟试题及答案
- 2025年江苏扬州市扬子工程质量检测有限公司招聘笔试参考题库含答案解析
评论
0/150
提交评论