




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
{售后服务}构建邮件服务实现服务器启动成功后,将自动在apps目录下根据文件生成相应的James发布文件包,我们后面讨论的配置文件即存在于此发布文件包中。2.2用Telnet管理用户用cmd进入MS-DOS,输入telnetlocalhost4555(注:localhost是邮件4555\apps\james\SAR-INF\我们使用其默认配置)然后输入用户名和密码(rootroot)出现如下信息说明登陆成功:删查改等操作了。常用的用户信息操作命令参见下表:?Currentlyimplementedmands:常用实现命令?helpdisplaythishelp显示帮助信息?listusersdisplayexistingaccounts显示现有账户?countusersdisplaythenumberofexistingaccounts显示现有账户数量?adduser[username][password]addanewuser添加一个新用户?verify[username]verifyifspecifieduserexist核实指定用户是否存在?deluser[username]deleteexistinguser删除存在的用户?setpassword[username][password]setsauser’spassword设置用户密码?setalias[user][alias]locallyforwardsallemailfor‘user’to‘alias’设置邮箱别名?showalias[username]showsauser’scurrentemailalias显示别名?unsetalias[user]unsetsanaliasfor‘user’删除用户别名?setforwarding[username][emailaddress]forwardsauser’semailtoanotheremailaddress转发用户的电子邮件地址到另一个电子邮件地址?showforwarding[username]showsauser’scurrentemailforwarding显示用户的当前邮件转发?unsetforwarding[username]removesaforward删除转发?user[repositoryname]changetoanotheruserrepository改变另一个用户库?shutdownkillsthecurrentJVM(convenientwhenJamesisrunasadaemon)关闭当前的服务?quitcloseconnection关闭连接adduserchenfengcn881213来添加一个的邮件用户,则其用户名为:chenfengcn,密码为:881213,邮箱地址为:(用户名后的域名跟服务器配置的域名相同,在文件中配置,我们将在后面部分讨论如何配置邮件服务器域名)操作。下面就让我们使用Foxmail来测试一下我们的邮箱帐户是否真正可以使用吧。2.3使用Foxmail测试邮箱帐户打开Foxmail,点击“邮箱”->“新建邮箱帐户”电子邮件地址:密码为:881213POP3服务器:localhostSMTP服务器:localhost其余选项均使用默认即可,新建完成后,Foxmail将发送一测试邮件到“收取”当收到Foxmail发送的测试邮件,就说明我们的邮件帐户可以正常使用了。作为程序设计人员,我们当然希望能使用自己写的程序来测试我们的邮件服务器是否搭建成功,而不是Foxmail下面就让我们用Javamail来实现这一切吧。James+Javamail构建邮件服务(二)电子邮件开发2009-11-3010:15:30阅读21评论0字号:大中小3Javamail快速入门进行Javamail开发需要用到两个包:和,在开始Javamail编程之前,请自己将这两个包添加到IDE的Buildpath中或将这两个包的路径配置到环境变量中。3.1使用Javamail向James的邮箱帐户发送邮件3.1.1业务描述本例将使用Javamail实现邮件的发送功能发送邮件需要配置邮件服务器属性信息,配置邮件接收地址,使用SMTP认证获得会话(Session),构建邮件体(MimeMessage),发送邮件。具体编码如下:3.1.2编码实现SMTP用户身份认证类(James在默认情况下,是需要SMTP起见,我们直接将邮件的相关信息,如:标题、内容、发送者、接收者等信息直接写在类中,运行main()函数即发送。当然,你同样可以为自己的邮件Servlet将相关参数传递至后台进行处理与发送。其主要代码也就是此main()函数中的内容,故不赘述。用户身份认证代码Java代码package.1;/***用于身份认证*@author(Kevin)<br>*mail:chenfengcn@<br>*qq:3*/classSmtpAuthextends.Authenticator{privateStringuser,password;/****@paramgetuser*@paramgetpassword*/publicvoidsetUserinfo(Stringgetuser,Stringgetpassword){user=getuser;password=getpassword;}protected.PasswordAuthenticationgetPasswordAuthentication(){returnnew.PasswordAuthentication(user,password);}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){=password;}publicStringgetUser(){returnuser;}publicvoidsetUser(Stringuser){=user;}}发送邮件代码Java代码package.1;import.Properties;import.DataHandler;import.DataSource;import.FileDataSource;import.Message;import.MessagingException;import.Session;import.Transport;import.URLName;import.;import.;import.;import.;import.;/***使用Javamail实现邮件发送功能*@author(Kevin)<br>*mail:chenfengcn@<br>*qq:3**/publicclassSendMail{publicSendMail(){//TODOAuto-generatedconstructorstub}publicstaticvoidmain(String[]args){//初始化信息Stringsender=“chenfengcn”;Stringpassword=“881213”;StringsmtpServer=“localhost”;Stringrecipient=“”;Stringsubject=“测试邮件主题”;StringfileAttachment=“”;//附件Stringcontent=“测试邮件内容”;//配置服务器属性Propertiesproper=newProperties();(“.host”,smtpServer);//smtp服务器(“.auth”,“true”);//是否smtp认证(“.port”,“25”);//设置smtp端口(“.protocol”,“smtp”);//发邮件协议(“.protocol”,“pop3”);//收邮件协议//配置邮件接收地址InternetAddress[]receiveAddress=newInternetAddress[1];try{receiveAddress[0]=newInternetAddress(recipient);}catch(AddressExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}//smtp认证,获取SessionSmtpAuthsa=newSmtpAuth();(sender,password);Sessionsession=(proper,sa);(newURLName(smtpServer),sa.getPasswordAuthentication());//构建邮件体MimeMessagesendMess=newMimeMessage(session);MimeBodyPartmbp=newMimeBodyPart();MimeMultipartmmp=newMimeMultipart();try{//邮件文本内容(content,“text/plain;charset=GBK”);(mbp);//附件处理if(fileAttachment!=null&&fileAttachment!=””){DataSourcesource=newFileDataSource(fileAttachment);Stringname=();mbp=newMimeBodyPart();(newDataHandler(source));(name);(mbp);}//邮件整体(subject);(mmp);//发送邮件(newInternetAddress(sender));(.TO,receiveAddress);(sendMess);.println(“发送成功”);}catch(MessagingExceptionex){();}}}值得一提的是,本程序已经实现了带附件邮件的发送功能,如果要发送fileAttachment变量中就可以了。“发送成功”送功能。那么,我们应该如何检验服务器是否确实收到我们发送的测试邮件呢?Javamail可以发送邮件,当然也能接收邮件啦,下面让我们一起使用Javamail编写邮件接收功能来检验吧。3.2使用Javamail接收邮件3.2.1业务描述James的chenfengcn用户发送了一封测试邮件,我们应该如何使用Javamail来收取这封邮件呢?为读取邮件,必须首先设置服务器属性(Properties),获取一个会话(Session),然后获取并连接邮箱所在的存储器(Store对象),打开该用户的邮箱(Folder),获取所希望阅读的消息,最后关闭目录和连接。下面的程序实现了接收邮箱中所有邮件,并将发送人和主题打印出来。3.2.2编码实现Java代码package.1;import.Properties;import.Folder;import.Message;import.MessagingException;import.NoSuchProviderException;import.Session;import.Store;/***使用Javamail实现邮件接收功能*@author(Kevin)<br>*mail:chenfengcn@<br>*qq:3**/publicclassReceiveMail{publicReceiveMail(){}publicstaticvoidmain(String[]args){//初始化主机Stringhost=“localhost”;Stringusername=“chenfengcn”;Stringpassword=“881213”;//配置服务器属性Propertiesprops=newProperties();(“.host”,“localhost”);//smtp服务器(“.auth”,“true”);//是否smtp认证(“.port”,“25”);//设置smtp端口(“.protocol”,“smtp”);//发邮件协议(“.protocol”,“pop3”);//收邮件协议//获取会话Sessionsession=(props,null);//获取Store对象,使用POP3协议,也可能使用IMAP协议try{Storestore=(“pop3”);//连接到邮件服务器(host,username,password);//获取该用户Folder对象,并以只读方式打开Folderfolder=(“inbox”);(_ONLY);//检索所有邮件,按需填充Messagemessage[]=();for(inti=0;i<;i++){//打印出每个邮件的发件人和主题.println(i+“:”+message[i].getFrom()[0]+“\t”+message[i].getSubject());}(false);();}catch(NoSuchProviderExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(MessagingExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}程序运行成功后,将会把chenfengcn用户的邮件从James服务器中取出,并将此邮箱中所有邮件的发件人、主题打印在后台。若要打印该邮件的内容等信息,则只要将message[i]对象中的邮件内容等信息读取出来就可以了。注:鉴于邮件的存储结构(将在第五章介绍),读取邮件附件是一个比BodyPart对象中BodyPart对于附件的操作本人将在今后的改进版本中加以介绍。James+Javamail构建邮件服务(三)电子邮件开发2009-11-3010:17:09阅读30评论0字号:大中小4Mailet快速入门MailetAPI是一个用来创建邮件处理程序的简单的API,它被配置在邮件服务器端执行,分匹配器Matcher和Mailet的接口两种,匹配器根据特定的条件匹配邮件消息,并触发相应的Mailet.Mailet这个词是跟Servlet相似,功能也相似,他们的共同之处都是在服务器端触发并执行,只是Servlet的Matcher通常是url的pattern,跟Servlet的接口一样,Mailet也有init()方法,service()方法和destroy()方法.即他们都有类似的生命周期.Mailet的简单可编程接口可以用来做一些邮件处理,比如反垃圾邮件,检查邮件病毒以及邮件博客等等,利用移动设备可发送email的功能,可以做到手机通过mail发送信息到邮件服务器交给Mailet处理,形成移动博客的模型.Mailet的运行需要mailet-2.3.jar和mailet-api-2.3.jar两个包的支持,James本身就有这两个包,可不作修改,但在开发的时候还是需要开发者自己将这两个包导入到工程的Buildpath中或配置到系统环境变量中。4.1用Mailet做一个Hello的例子4.1.1业务描述我们要实现当外部发送给James服务器中名字含hello的邮箱时,服务器在这封邮件的主题前加入“Hello”,并在服务器后台输出“ReceivedapieceofEmail”。如前所述,Mailet包括匹配器Matcher和Mailet两种接口,现在就让我们用MailetAPI实现这两个接口吧。4.1.2编码实现匹配器Java代码package..sample1;import.;import.;/***Mailet匹配器*@author(Kevin)<br>*mail:chenfengcn@<br>*qq:3**/publicclassBizMatcherextendsGenericRecipientMatcher{publicbooleanmatchRecipient(MailAddressrecipient){//邮件地址必须包含hello的if(().indexOf("hello")!=-1){returntrue;}returnfalse;}}Java代码package..sample1;import.IOException;import.MessagingException;import.;import.;import.;/***Mailet处理程序*@author(Kevin)<br>*mail:chenfengcn@<br>*qq:3**/publicclassBizMailletextendsGenericMailet{publicvoidinit()throwsMessagingException{}publicvoidservice(Mailmail)throwsMessagingException{MimeMessagemmp;mmp=(MimeMessage)();("Hello"+());.println("ReceivedapieceofEmail");}}4.1.3配置部署Mailet跟Servlet一样,是服务器端程序,是不能直接在客户端运行的,必须要部署到服务器端方可生效。部署具体步骤如下:1、将我们编写的Matcher和Mailet打包成jar文件;2、在\james-2.3.1\apps\james\SAR-INF目录下新建一个lib文件夹;3、将打包好的jar文件复制到刚刚新建的lib文件夹下;4、打开配置文件,找到以下这段代码:Xml代码<mailetpackages><mailetpackage>..mailets</mailetpackage><mailetpackage>..</mailetpackage></mailetpackages><matcherpackages><matcherpackage>..matchers</matcherpackage><matcherpackage>..</matcherpackage></matcherpackages>前半部分是用于配置Mailet包所在位置,后半部分是用于配置MatcherMailet和Matcher所在位置配置进去就可以了。配置后的结果如下:Xml代码<mailetpackages><mailetpackage>..sample1</mailetpackage><mailetpackage>..mailets</mailetpackage><mailetpackage>..</mailetpackage></mailetpackages><matcherpackages><matcherpackage>..sample1</matcherpackage><matcherpackage>..matchers</matcherpackage><matcherpackage>..</matcherpackage></matcherpackages>这样就完成了包的配置。我们都知道,Mailet的工作过程是:首先由Matcher来匹配所接收到的邮件,然后提交给相应的Mailet处理,但是哪个匹配器对应哪个Mailet呢?我们还需要配置Mailet的对应关系同样在中找到下面的代码:Xml代码<mailetmatch="All"class="PostmasterAlias"/>在这段代码下面加入我们自己的Mailet:Xml代码<mailetmatch="All"class="PostmasterAlias"/>Xml代码<mailetmatch="BizMatcher"class="BizMaillet"/>这样就完成了我们自定义的Mailet的配置部署工作了重启James服务器,则此Mailet即可生效。4.1.4测试Mailet前面我们已经完成了Mailet的编码和部署工作,现在就让我们来测试一下我们的Mailet是否生效吧。首先,需要在James服务器上新建一个名称含Hello的用户。前面已介绍过新建用户的方法了,在此就不重复叙述了。使用adduserhelloworld881213命令新建一个helloworld用户。使用第三章所谈及的“使用Javamail向James的邮箱帐户发送邮件”来向发送一封邮件(当然,你同样可以使用Foxmail或Outlook向此地址发送邮件),邮件发送成功后,James服务器后台将输出“Receiveapieceofemail”。运行效果如下图所示:这就说明我们的Mailet已经部署成功了.James+Javamail构建邮件服务(四)电子邮件开发2009-11-3010:17:55阅读53评论0字号:大中小关键字:jamesjavamailmailetjava邮件5Javamail邮件存储逻辑简介5.1Message存储结构示意图Message是邮件发送的最终对象,我们一般使用他的子类对象MimeMessage,其子类对象里包含有邮件的MessageID、Subject、Flag、FromSenderContentContentMultipart对象(或其子类对象MimeMultipart),所有的邮件内容都存在于Multipart中的。一个Multipart包含有一个或多个BodyPart对象(或其子类对象MimeBodyPartBodyPart对象用于存储邮件的内容,可以是文本形式,也可以是附件形式。6常用JavamailAPI简介核心JavaMailAPI可以分为两部分,一部分由七个类组成:Session、MessageAddressAuthenticatorTransportStore及Folder自JavamailAPI顶级包(但开发者需要使用的具体子类可能在.internet包内)。可以用这些类完成大量常见的电子邮件任务,包括发送消息、检索消息删除消息认证回复消息转发消息管理附件处理基于HTML文MTA范畴下图描绘了Javamail邮件收发过程。Javamail框架有一个大体了解:6.1.SessionSessionJavamailAPI最高层入口类,所有其它类都必须经由Session对象才得以生效。Session对象管理配置选.Properties对象获取信息,如邮件服务器、用户名、密码及整个应用程序中共享的其它信息。Session类的构造器是私有的,它不能被继承,也不能使用new语句来getInstance和getDefaultInstance来获取Session实例,前者创建一个独立的会话,否则获取缺省的共享会话。API明细:/javamail-1.4.1javadocsmail/6.2.Message获得Session对象后,可以开始继续创建要发送的邮件消息,这由Message类来完成,Message实现了Part接口,它表示一个邮件消息,包含一系列属性(attribute)和一个消息内容(content)消息属性标识了消息地址DataHandler对象包装实际数据。当邮件消息位于目录(folder)中时,系统还使用一个标志位集合来描述它的状态。Message格式。比如说,JavamailAPI提供了MimeMessage(位于.包)类,该类扩展自Message,实现了RFC822和MIME标准。Message的子类通常通过字节流构建其实例,相应的,它们也可以生成字节流来传输自身。API明细:/javamail-1.4.1javadocsmail/6.3.AddressAddress类表示电子邮件地址,它是一个抽象类。其子类(最经常使用的子类是.)提供具体实现,且通常可串行化。在创建了Session和MessageAddress确定邮件消息的发送者和接收者地址。API明细:/javamail-1.4.1javadocsmail/6.4.AuthenticatorAuthenticator代表一个可以为网络连接获取认证信息的对象,它通常通过提示用户输入用户名和密码来收集认证信息,使连接可以访问受保护的资源。对于JavamailAPI来说,这些资源就是邮件服务器。JavamailAuthenticator在包中,它和中同名的类Authenticator不同。要使用Authenticator,必须先创建一个它的子类实例,并且在会话对象创建时为会话注册该Authenticator对象。在需要认证的时候,就会通知Authenticator。程序可以弹出窗口,也可以从配置文件中(虽然没有加密是不安全的)读取用户名和密码,并使用它们作为构造函数参数创建一个PasswordAuthentication对象返回给调用程序。API明细:/javamail-1.4.1javadocsmail/6.5.Transport消息发送的最后步骤是使用Transport类。该类使用指定协议发送消息(通常是SMTP)TransportSession有些类似,可以通过静态方法或实例方法发送消息Transport继承自Service者提供了很多通用方法,如命名传输、连接服务器、监听传输事件等等。API明细:/javamail-1.4.1javadocsmail/6.6.StoreStoreFolder协议,以存储和读取消息,其子类提供具体实现。Store客户程序可以通过获取一个实现了数据库访问协议的Store对象来访问消息存储器,绝大多数存储器要求用户在访问前提供认证信息,connect方法执行了该认证过程。Storestore=("pop3");//指定协议(host,usename,password);//API明细:/javamail-1.4.1javadocsmail/6.7.FolderFolder是一个抽象类,用于分级组织邮件,其子类提供针对具体协议的实现。Folder代表的目录可以容纳消息或子目录,存储在目录内的消息被顺序计数(从1开始到消息总数),该顺序被称为“邮箱顺序”,通常基于邮件消息到达目录的顺序。邮件顺序的变动将改变消息的序列号,这种情况仅发生在客户程序调用Expunge方法擦除目录内设置了.DELETED标志位的消息时。执行擦除操作后,目录内消息将重新编号。客户程序可以通过消息序列号或直接通过相应的Message对象应用目录中的消息,由于消息序列号在会话中很可能改变,因此应尽可能保存Message对象而非序列号来反复引用对象。连接到Store之后,接下来可以获取一个文件夹(Folder)。该文件夹必须先使用open()方法打开,然后才能读取里面的消息:Folderfolder=();//或:Folderfolder=("inbox");(_WRITE);Messagemessage[]=();open()_WRITE)inbox是POP3唯一可以使用的文件夹如果使用IMAP获得MessagegetContent()writeTo()将内容写入输出流。getContent()方法之能得到消息内容,而writeTo()的输出却包含消息头.读完邮件之后要关闭与Folder和Store的连接:(aBoolean);();API明细:/javamail-1.4.1javadocsmail/7常用MailetAPI简介Mailet主要包含两个包:.mailet和.7.1.mailet此包主要用于匹配器和Mailet的编写自定义的Mailet类需要继承.定义的Matcher类需要继承.或.。例子详见第四章Mailet快速入门。API明细:javadocsapachepackage-7.2.此包主要用于邮件中的日期格式的转换。API明细:javadocsapachedates/package-James+Javamail构建邮件服务(五)电子邮件开发2009-11-3010:18:50阅读33评论0字号:大中小关键字:jamesjavamailmailetjava邮件8Javamail的高级应用8.1用Javamail实现对邮件的查找在邮件的高级应用中,当遇到某个帐户中的邮件数非常多的时候,而用户往往只需要对其中的某几封邮件进行处理倘若要把所有的邮件都取出来,再进行对应信息的判断提取,这无疑将大大加重邮件服务器的负担。为了改善这种状况,Javamail.search。这个包将通过对SearchTerm对象进行设置,而后提交给服务器,服务器端有相应的过滤器,根据SearchTerm对象的设置将邮件过滤的结果传回给客户端。以提高工作效率,减轻服务器端负担。下面就让我们一起来做一个例子说明一下我们应该如何使用search这个包吧。8.1.1业务描述编写一个类,实现对邮件中邮件的条件搜索功能。在本例中实现对主题中包含“测试”,发件人是,的邮件的搜索。8.1.2编码实现Java代码package.1;import.ArrayList;import.Properties;import.Folder;import.Message;import.MessagingException;import.NoSuchProviderException;import.Session;import.Store;import.;import.;import.;import.;import.;/***使用Javamail的Search包实现对邮件的搜索功能*@author(Kevin)<br>*mail:chenfengcn@<br>*qq:3**/publicclassSearchMail{privatestaticArrayList<SearchTerm>list=newArrayList();publicstaticvoidmain(String[]args){//用户信息Stringuser="helloworld";Stringpassword="881213";//配置服务器属性Propertiesprops=newProperties();(".host","localhost");//smtp服务器(".auth","true");//是否smtp认证(".port","25");//设置smtp端口(".protocol","smtp");//发邮件协议(".protocol","pop3");//收邮件协议//创建会话Sessionsession=(props,null);Storestore=null;try{//连接Storestore=("pop3");("localhost",user,password);//打开FolderFolderfolder=("inbox");(_ONLY);//构造搜索规则SearchTermsubterm=newSubjectTerm("测试");SearchTermfterm=newFromTerm(newInternetAddress(""));SearchTermst=newAndTerm(subterm,fterm);Message[]message=(st);//输出搜索到的邮件的主题for(inti=0;i<;i++){.println(message[i].getSubject());}}catch(NoSuchProviderExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(MessagingExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}本例只展示如何使用Javamail的Search包实现对邮件的搜索功能,在Search包中还存在许多功能相当完备的API有兴趣可自行参考JavamailAPI。API明细:/javamail-1.4.1javadocsmailpackage-9James邮件服务器的高级应用与配置9.1配置邮箱域名配置文件,文件位于\apps\james\SAR-INF目录下。Java代码<postmaster></postmaster><servernamesautodetect="true"autodetectIP="true"><!--CONFIRM?--><servername>localhost</servername></servernames>这两项内容,把其中的localhost改成你所要配置的域名即可。9.2将用户信息配置为数据库存储方式James服务器提供了相当完善的配置方案,可选择将用户信息保存在文件、数据库或其他介质中。在默认的情况下,服务器将用户信息以加密形式保存于\james-2.3.1\apps\james\var\users目录下的文件中我们可以通过改变其配置信息从而改变用户信息的保存方式。在此仅以MYSQL数据库的配置方式为例说明。第一步:将相应数据库的JDBC驱动包复制到lib目录下即我们需要把mysql-connector-java-3.1.13-的MYSQL数据库驱动包复制到\james-2.3.1\lib目录下第二步:新建数据库,建立一个用于存放James用户信息的数据库(表不用建,由James自动创建),在这里,我们假设新建的数据库为mail第三步:配置文件,文件位于\apps\james\SAR-INF目录下。打开,找到以下内容:Java代码<repositoryname="LocalUsers"class="..UsersFileRepository"><destinationURL="file:/users/"/>•repository>把这部分内容修改为:Java代码<repositoryname="LocalUsers"class="..JamesUsersJdbcRepository"destinationURL="db:/users"><sqlFile>file:/</sqlFile></repository>第四步:找到MySQL配置位置Java代码<!--Example,connectingtoaMySQLdatabasecalled"mail"onlocalhost--><!----><!--ThemaxvalueisthemaximumnumberofconcurrentconnectionsJameswill--><!--opentothisdatabase--><!--Ifyousee"SQLException:Givingup...noconnectionsavailable."inyour--><!--logfilesorbouncedmailyoushouldincreasethisvalue--><!--<data-sourcename="maildb"class=".."><driver>.</driver><dburl>jdbc:mysql:///mail?autoReconnect=true</dburl><user>username</user><password>password</password><max>20</max></data-source>-->首先,去掉data-source标签前后的注释标识(”<!---->”的实际情况配置好相应的数据库信息(包括URL、用户名、密码、最大连接数)。然后保存,重新启动James。James会在数据库中自动创建users表用于存放邮箱的用户信息。这样配置以后,我们除了可以通过telnet操作用户信息外,同样可以通过此users表来操作用户信息。值得注意的是,James的用户密码使用的是SHA单向加密算法,若需SHA的加密问题我们应该如何来解决这个问题呢?查看James的源码中.包中的文件,我们可以发现,James中提供verifyPassword()和setPassword()两个方法,verifyPassword()setPassword()密码转换成密文。通过仔细研究这两个方法,可以很容易地实现将自己的密码进行SHA加密了。9.3通过操作数据库实现用户信息操作在上一节我们讨论了可以将James会存在SHA而真正实现通过操作数据库来操作James服务器的用户信息。9.3.1业务描述本例是基于上一节“将用户信息配置为数据库存储方式”库,即:对数据库的信息进行增、删、查、改等操作。本例只实现用户信息的添加,关键在于使用James源码包中提供的SHA加密算法实现用户密码的加密,其余功能跟一般数据库操作无异,故不赘述。9.3.2编码实现用户添加类:Java代码package..sample1;import.NoSuchAlgorithmException;import.Connection;import.DriverManager;import.SQLException;import..DigestUtil;/***通过操作数据库来添加James用户**@author(Kevin)<br>*mail:chenfengcn@<br>*qq:3*/publicclassAddUserByDB{publicstaticvoidmain(String[]args){//连接数据库StringdriverName=".";StringdbURL="jdbc:mysql:/mail?autoReconnect=true";StringuserName="root";StringuserPwd="881213";Connectionconn=null;try{(driverName);conn=(dbURL,userName,userPwd);}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(SQLExceptione){e.printStackTrace();}//构造并执行SQL("881213","SHA")SHA加密//注:用户信息的后四个属性需要使用('SHA',0,NULL,0,null认值,若用错,则新建用户可能不能使用Stringsql="";try{sql="insertintousersvalues('hello','"+("881213","SHA")+"','SHA',0,NULL,0,null)";().executeUpdate(sql);();.println("用户添加成功");}catch(NoSuchAlgorithmExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}hello我们应该如何测试此用户是否真正创建成功并可使用呢?方法有很多,可以Telnet命令中的listusers使用Foxmail将此用户添加进去,帐户能正常接收到Foxmail发送的邮件即表明此用户可正常使用了。1、用户信息的后四个属性需要使用('SHA',0,NULL,0,null)此四个默认值,若用错,则新建用户可能不能使用;2、在程序运行过程中,需要使用到james-2.3.1.jar包和相应的数据库驱动包,在程序运行前请确保这些包已添加到相关的位置。9.4通过Java调用Telnet实现用户信息操作(未完
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《电工》高级练习题(含参考答案)
- 细节管理提升护理质量
- AI大模型赋能港口设施数字运维一体化智能解决方案
- 重症监护患者夜间睡眠
- 网络服务器配置与管理(微课版) 习题及答案
- 2025年全民科学素质竞赛网络知识竞赛试题库及答案(共150题)
- 销售策划目的试题及答案
- 河北省张家口市普通高中学业水平选择性模拟考试三模 英语试题(含答案)
- 2025年山东省泰安市东平县(五四学制)中考三模历史试题(含答案)
- 2025【合同范本】租赁合同解除协议模板
- DB36_T 420-2019 江西省工业企业主要产品用水定额(高清无水印-可复制)
- 车间精益改善总结报告课件(PPT 19页)
- 中小学教育惩戒规则(试行)全文解读ppt课件
- TCECS 850-2021 住宅厨房空气污染控制通风设计标准
- 《冬病夏治工作指南》
- 布鲁克纳操作手册
- 印度尼西亚煤炭购销合同
- GB∕T 25119-2021 轨道交通 机车车辆电子装置
- 2022年国网输变电工程质量通病防治工作要求及技术措施[1]
- 三年级美术下册16奇石教学设计1浙美版
- 支气管分段亚段及及支气管镜检查
评论
0/150
提交评论