Java实现通过smtp服务器向指定邮箱发送邮件

阅读:910 2019-03-20 14:09:23 来源:新网

一、java实现发送邮件到指定邮箱

1、需要一个能收发邮件的邮箱帐号,开启smtp服务,一般邮箱的设置里可以找到

2、直接调用下面的类中的sendmail()方法,把参数都设置好。

maven依赖,发送邮件和验证邮箱有效性

javax.mailmail1.5.0-b01

dnsjavadnsjava2.1.6commons-netcommons-net3.6

publicclassmailutil{

publicstaticstringmyemailsmtphost="xxxx";

//一般在邮箱的设置里能看到

/**

*以上是参数设置

**/

/**

*发送邮件

*参数:receivemailaccount:收件人邮箱、title:邮件标题、theme:邮件主题content:邮件内容

**/

2、防止用户乱填一个邮箱,我们可以在发前校验一下这个邮箱的有效性

/**

*校验别人输入的邮箱是否有效

**/

//以下2项自己填写快速的,有效的邮箱,可随意跟换主流邮箱,如163、qq、gmail等

//这里随便什么邮箱都行,我试了下,我的qq邮箱,谷歌邮箱可以,但是企业邮箱不行

}

附:发送邮件的demo,把该要的东西填一填,直接runasjavaapplication就能用了

packagecom.mail.demo;importjava.util.date;importjava.util.properties;importjavax.mail.session;importjavax.mail.transport;importjavax.mail.internet.internetaddress;importjavax.mail.internet.mimemessage;publicclassmain{//发件人的邮箱和密码(替换为自己的邮箱和密码)//ps:某些邮箱服务器为了增加邮箱本身密码的安全性,给smtp客户端设置了独立密码(有的邮箱称为“授权码”),//对于开启了独立密码的邮箱,这里的邮箱密码必需使用这个独立密码(授权码)。publicstaticstringmyemailaccount="xxxx@xx.com";publicstaticstringmyemailpassword="xxx";//发件人邮箱的smtp服务器地址,必须准确,不同邮件服务器地址不同,一般(只是一般,绝非绝对)格式为:smtp.xxx.com//网易163邮箱的smtp服务器地址为:smtp.163.compublicstaticstringmyemailsmtphost="imap.exmail.qq.com";//收件人邮箱(替换为自己知道的有效邮箱)publicstaticstringreceivemailaccount="xxxx@xxxxx.com";publicstaticvoidmain(string[]args)throwsexception{//1.创建参数配置,用于连接邮件服务器的参数配置propertiesprops=newproperties();//参数配置props.setproperty("mail.transport.protocol","smtp");//使用的协议(javamail规范要求)props.setproperty("mail.smtp.host",myemailsmtphost);//发件人的邮箱的smtp服务器地址props.setproperty("mail.smtp.auth","true");//需要请求认证//ps:某些邮箱服务器要求smtp连接需要使用ssl安全认证(为了提高安全性,邮箱支持ssl连接,也可以自己开启),//如果无法连接邮件服务器,仔细查看控制台打印的log,如果有有类似“连接失败,要求ssl安全连接”等错误,//打开下面/*...*/之间的注释代码,开启ssl安全连接。//smtp服务器的端口(非ssl连接的端口一般默认为25,可以不添加,如果开启了ssl连接,//需要改为对应邮箱的smtp服务器的端口,具体可查看对应邮箱服务的帮助,//qq邮箱的smtp(sll)端口为465或587,其他邮箱自行去查看)finalstringsmtpport="465";props.setproperty("mail.smtp.port",smtpport);props.setproperty("mail.smtp.socketfactory.class","javax.net.ssl.sslsocketfactory");props.setproperty("mail.smtp.socketfactory.fallback","false");props.setproperty("mail.smtp.socketfactory.port",smtpport);//2.根据配置创建会话对象,用于和邮件服务器交互sessionsession=session.getinstance(props);session.setdebug(true);//设置为debug模式,可以查看详细的发送log//3.创建一封邮件mimemessagemessage=createmimemessage(session,myemailaccount,receivemailaccount);//4.根据session获取邮件传输对象transporttransport=session.gettransport();//5.使用邮箱账号和密码连接邮件服务器,这里认证的邮箱必须与message中的发件人邮箱一致,否则报错////ps_01:成败的判断关键在此一句,如果连接服务器失败,都会在控制台输出相应失败原因的log,//仔细查看失败原因,有些邮箱服务器会返回错误码或查看错误类型的链接,根据给出的错误//类型到对应邮件服务器的帮助网站上查看具体失败原因。////ps_02:连接失败的原因通常为以下几点,仔细检查代码://(1)邮箱没有开启smtp服务;//(2)邮箱密码错误,例如某些邮箱开启了独立密码;//(3)邮箱服务器要求必须要使用ssl安全连接;//(4)请求过于频繁或其他原因,被邮件服务器拒绝服务;//(5)如果以上几点都确定无误,到邮件服务器网站查找帮助。////ps_03:仔细看log,认真看log,看懂log,错误原因都在log已说明。transport.connect(myemailaccount,myemailpassword);//6.发送邮件,发到所有的收件地址,message.getallrecipients()获取到的是在创建邮件对象时添加的所有收件人,抄送人,密送人transport.sendmessage(message,message.getallrecipients());//7.关闭连接transport.close();}/***创建一封只包含文本的简单邮件**@paramsession和服务器交互的会话*@paramsendmail发件人邮箱*@paramreceivemail收件人邮箱*@return*@throwsexception*/publicstaticmimemessagecreatemimemessage(sessionsession,stringsendmail,stringreceivemail)throwsexception{//1.创建一封邮件mimemessagemessage=newmimemessage(session);//2.from:发件人(昵称有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改昵称)message.setfrom(newinternetaddress(sendmail,"恒为银关","utf-8"));//3.to:收件人(可以增加多个收件人、抄送、密送)message.setrecipient(mimemessage.recipienttype.to,newinternetaddress(receivemail,"xx用户","utf-8"));//4.subject:邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改标题)message.setsubject("test","utf-8");//5.content:邮件正文(可以使用html标签)

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

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服