先了解一下基本的配置元素的概念:
什么是pop3、smtp?
1、什么是pop3:
pop3是post office protocol3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,pop3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而pop3服务器则是遵循 pop3协议的接收邮件服务器,用来接收电子邮件的。
2、什么是smtp:
smtp 的全称是“simple mailtransfer protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。smtp 协议属于 tcp/ip 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。smtp 服务器就是遵循 smtp 协议的发送邮件服务器。
(smtp 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 smtp 服务器,这就使得那些垃圾邮件的散播者无可乘之机。增加 smtp 认证的目的是为了使用户避免受到垃圾邮件的侵扰。)
代码实现流程:
1,引入的包:
<dependency> <groupid>javax.mail</groupid> <artifactid>mail</artifactid> <version>1.4.7</version> </dependency>
2,邮箱信息在properties中的相关配置:
smtpserver=smtp.aliyun.com port=465 fromusername=你的阿里邮箱账号 fromuserpassword=你的邮箱密码
这里注意了,很容易出错,网上一搜基本的教程都是这样的:smtpserver=smtp.aliyun.com
也就是properties.put(“mail.smtp.host”, smtp.aliyun.com);
但如果你使用的是阿里的企业邮箱,这样把邮箱的配置服务器地址照搬过来的做法是有问题的。
这里应该使用自己企业的域名地址,比如我的域名是amuxia.com(当然这个也是假的,举个例子,哈哈),这里就应该配置smtp.amuxia.com。否则报错:
javax.mail.authenticationfailedexception:526authentication failure[0]
这里应该注意一下。
3,邮箱实体类(设置邮箱、邮件的相关信息)
public class emailinfo { private final string ssl_factory = “javax.net.ssl.sslsocketfactory”; private string smtpserver; // smtp服务器地址 private string port; // 端口 private string fromusername; // 登录smtp服务器的用户名,发送人邮箱地址 private string fromuserpassword; // 登录smtp服务器的密码 private string touser; // 收件人 private string subject; // 邮件主题 private string content; // 邮件正文 public emailinfo() { } public emailinfo(string touser, string subject, string content) { this.touser = touser; this.subject = subject; this.content = content; this.smtpserver = global.getconfig(“smtpserver”); this.port = global.getconfig(“port”); this.fromusername = global.getconfig(“fromusername”); this.fromuserpassword = global.getconfig(“fromuserpassword”); } //get、set方法略 }
4,发送邮件的实现类(工具类):
public class emailutil { / * 进行base64加密,防止中文乱码 */ private static string changeencode(string str) { try { str = mimeutility.encodetext(new string(str.getbytes(), “utf-8”), “utf-8”, “b”); // “b”代表base64 } catch (unsupportedencodingexception e) { e.printstacktrace(); } return str; } public static boolean sendhtmlmail(emailinfo emailinfo) { properties properties = new properties(); properties.put(“mail.smtp.host”, emailinfo.getsmtpserver()); properties.put(“mail.transport.protocol”, “smtp”); properties.put(“mail.smtp.auth”, “true”); properties.put(“mail.smtp.socketfactory.class”, “javax.net.ssl.sslsocketfactory”); // 使用jsse的ssl properties.put(“mail.smtp.socketfactory.fallback”, “false”); // 只处理ssl的连接,对于非ssl的连接不做处理 properties.put(“mail.smtp.port”, emailinfo.getport()); properties.put(“mail.smtp.socketfactory.port”,emailinfo.getport()); session session = session.getinstance(properties); session.setdebug(true); mimemessage message = new mimemessage(session); try { // 发件人 address address = new internetaddress(emailinfo.getfromusername()); message.setfrom(address); // 收件人 address toaddress = new internetaddress(emailinfo.gettouser()); message.setrecipient(mimemessage.recipienttype.to, toaddress); // 设置收件人,并设置其接收类型为to // 主题message.setsubject(changeencode(emailinfo.getsubject())); message.setsubject(emailinfo.getsubject()); // 时间 message.setsentdate(new date()); multipart multipart = new mimemultipart(); // 创建一个包含html内容的mimebodypart bodypart html = new mimebodypart(); // 设置html内容 html.setcontent(emailinfo.getcontent(), “text/html; charset=utf-8”); multipart.addbodypart(html); // 将minimultipart对象设置为邮件内容 message.setcontent(multipart); message.savechanges(); } catch (exception e) { e.printstacktrace(); return false; } try { transport transport = session.gettransport(“smtp”); transport.connect(emailinfo.getsmtpserver(), emailinfo.getfromusername(), emailinfo.getfromuserpassword()); transport.sendmessage(message, message.getallrecipients()); transport.close(); } catch (exception e) { e.printstacktrace(); return false; } return true; } }
5,测试一下:
public static void main(string[] args) { emailutil util = new emailutil(); string content =global.getconfig(“email_user_add_content”); content = content.format(content, “111”,”222″); system.out.println(content); emailinfo info = new emailinfo(“amuxia@163.com”, global.getconfig(“email_user_add_subject”), “<p>这是一个测试邮件</p>”); util.sendhtmlmail(info); }
这下就妥妥的了,这些代码运行没有问题,但是用到了其他的一些辅助类,如global.getconfig()获取配置文件中的信息,用时替换掉就行。
应用中配置使用邮箱接收发送邮件,经常会因为各个邮箱配置的细微差异出现错误,多半是认证不通过,而认证不通过的原因无非是:
1、服务器错误
2、用户名错误
3、用户名密码不匹配。
遇到错误从这几方面下手就可以了,在代码中使用邮箱发送邮件时要先在客户端试一次,确保邮箱在客户端是可接可收的。
这里顺便说一下怎么在outlook客户端添加阿里云邮箱。
1,点击文件——》添加账户
2,选择配置方式
3,填写账户信息:
4,点击“其他设置”
最后就完成了配置,发送一封邮件测试一下就妥妥的了。
如果,你对上面的内容还有疑问,推荐选择西部数码企业云邮箱!有专人协助您解答邮箱疑问。
西部数码优质企业邮箱服务商,提供安全稳定,简单易用,高性价比的企业邮箱。按需自由定制,不限空间,极速收发,能够满足用户对企业邮箱的不同需求。多种反垃圾邮件算法,99.9%精准度,智能过滤,减少垃圾邮件干扰。支持小程序收发邮件,随时随地移动办公。而且价格实惠,还可以免费试用,7×24小时专业团队服务支持!
高性价比企业邮箱开通链接:https://www.west.cn/services/mail/
白沙云服务器租用购买电脑资源不足怎么解决?老司机告诉你电脑资源不足的解决方法如新增域名备案的话是否可以绑定在在原有的服务器客户那边打开是这样的我访问正常云快照数据回滚-云服务器问题百度云用的什么服务器域名到期可以续费吗?域名过期多少天可以续费?蓝牙怎么共享wif 手机蓝牙共享wifi的方法