{{ v.name }}
{{ v.cls }}类
{{ v.price }} ¥{{ v.price }}
上一篇章简单讲解了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="点击进入»
本章小结: