javamail模拟邮箱功能发送电子邮件-中级实战篇

阅读:975 2019-03-20 14:09:39 来源:新网

上一篇章简单讲解了javamail发送邮件的基本基础和用到的几个类,并且所有初始化和发送方法都封装在一个类里面(为了代码方便演示),本章节将对各个模块进行拆分和优化,并且引入附件发送的方法

要想邮件发送附件,就要引入两个新类multipart和bodypart两类

multipart(报文部件容器)实则为一个报文容器,而邮件消息msage是由各个子报文bdypart(报文单元部件)类组成

由此可见所有邮件消息都可由这两类来实现,接下来的演示发送html(兼并了普通text格式)内容方法是所谓的简单的模式,因为他只有正文部分,无需多个部件来组合,而附件采纳了这两类,我们可以把包涵附件的邮件拆分为两个部件来理解,即:正文(邮件内容)部件、附件(邮件附加文件)两个部件。

示例结构:

本篇示例代码分了3类(其实可以说是2类,因为测试test类只有一个main方法来调用邮件发送方法)

emailentity类邮件基础父类,两个私有属性(发件地址,发件密码),继承了authenticator自动校验类(方便自动校验)emailserviceenity类邮件服务支持类,继承邮件基础父类,并声明其他必要的私有属性,封装邮件发送方法testemailfunction类邮件测试发送类,简单的main方法里面初始化一个服务支持类,并调用两个发送方法

实例代码演示:

****复制此三个类可直接跑测试****注释部分我尽可能详细讲解每个方法的作用****

emailentity类

packagecom.cplatform.movie.back.javamail;importjavax.mail.authenticator;importjavax.mail.passwordauthentication;/***邮件基础实体类*/publicclassemailentityextendsauthenticator{/***用户名(登录邮箱)*/protectedstaticstringusername;/***密码*/protectedstaticstringpassword;/***初始化邮箱地址和密码*@paramusername邮箱*@parampassword密码*/publicemailentity(stringusername,stringpassword){emailentity.username="这里填写发件箱地址";emailentity.password="这里填写发件箱密码";}/***重写自我检验方法*/@overrideprotectedpasswordauthenticationgetpasswordauthentication(){returnnewpasswordauthentication(username,password);}stringgetpassword(){returnpassword;}stringgetusername(){returnusername;}publicvoidsetpassword(stringpassword){emailentity.password=password;}publicvoidsetusername(stringusername){emailentity.username=username;}}

emailserviceenity类

packagecom.cplatform.movie.back.javamail;importjava.io.file;importjava.io.unsupportedencodingexception;importjava.util.properties;importjavax.activation.datahandler;importjavax.activation.filedatasource;importjavax.mail.bodypart;importjavax.mail.message;importjavax.mail.messagingexception;importjavax.mail.multipart;importjavax.mail.nosuchproviderexception;importjavax.mail.session;importjavax.mail.transport;importjavax.mail.internet.internetaddress;importjavax.mail.internet.mimebodypart;importjavax.mail.internet.mimemessage;importjavax.mail.internet.mimemultipart;importcom.cplatform.movie.back.javamail.simpleemailfunction.myauthenricator;importcom.sun.xml.internal.messaging.saaj.packaging.mime.internet.mimeutility;/***邮件服务支持类*/publicclassemailserviceenityextendsemailentity{//java.util.propertis类privatetransientpropertiesprops;//一个邮件会话privatetransientsessionsession;//邮件消息privatetransientmimemessagemessage;//邮件内容格式privatefinalstringcontent_type_html="text/html;charset=utf-8";//端口号privatefinalstaticintmail_port=25;//邮箱服务器列表privatestringstmphostport;//邮件传输对象privatetransporttransport;//邮件发送内容privatestringcontent;/***实参构造*@parammailtoaddress收件人地址,多个以逗号隔开*@paramcontent邮件内容*@throwsmessagingexception*@throwsunsupportedencodingexception*/publicemailserviceenity(stringmailtoaddress,stringcontent)throwsunsupportedencodingexception,messagingexception{super(username,password);this.content=content;this.session=this.initsession();this.message=this.initmessage(this.getsession(),mailtoaddress);this.transport=this.inittransport(this.getsession());}/***根据发件人地址获取邮件服务器主机地址*@paramusername发件人邮件地址*@return*/publicstringgetstmphostp(stringusername){return"smtp."+username.split("@")[1];}/***初始化perps文件*@return*/publicpropertiesinitprope(){//初始化props文件props=newproperties();props.setproperty("mail.transport.protocol","smtp");//发送邮件协议props.put("mail.smtp.auth","true");//需要验证props.put("mail.smtp.host",this.getstmphostp(username));//服务器地址returnprops;}/***初始化session会话*@return*/publicsessioninitsession(){session=session.getinstance(this.initprope(),newmyauthenricator(username,password));session.setdebug(true);returnsession;}/***初始化message消息*@paramsession*@return*@throwsmessagingexception*@throwsunsupportedencodingexception*/publicmimemessageinitmessage(sessionsession,stringmailtoaddress)throwsmessagingexception,unsupportedencodingexception{message=newmimemessage(session);//设置发件人地址message.setfrom(newinternetaddress(username,"要显示的发件人名称"));//设置邮件主题message.setsubject("主题:默认主题");//设置邮件发送内容和内容的content-typemessage.setcontent(content.tostring(),this.content_type_html);//设置邮件接收人地址string[]address=mailtoaddress.split(",");for(inti=0;i

testemailfunction类

packagecom.cplatform.movie.back.javamail;importjava.io.file;importjava.io.unsupportedencodingexception;importjavax.mail.messagingexception;publicclasstestemailfunction{publicstaticvoidmain(string[]args){emailserviceenitye;//多个收件人中间以逗号间隔stringmailtoaddress="418874847@qq.com,12450374@qq.com";//正文(内容)部分stringcontent="点击进入»刘一天的博客";try{e=newemailserviceenity(mailtoaddress,content);e.sendhtmlortext();//测试html文本/***切勿使用同一个emailserviceenity实例来发送不同内容,如有需要就再初始化一个新实例(否则附件发送失败且乱码)*因为每个实例在发送完邮件后就会关闭transport*/e=newemailserviceenity(mailtoaddress,content);//传入一个绝对位置的文件路径filefile=newfile("d:/data/adimg/20141022/09/ad_20141022094708943.jpg");e.sendfile(file,"测试复件.jpg");//测试复件发送}catch(unsupportedencodingexceptione1){e1.printstacktrace();}catch(messagingexceptione1){e1.printstacktrace();}}}

本章小结:

相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服