JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。
在开发Java Web应用时经常用到它,注册帐号时的邮箱验证、通过邮箱找回密码、以及一些需要重新认证用户身份的操作都要通过发送邮件到用户邮箱中。虽然JavaMail是Sun的API之一,但它目前还没有被加在标准的java开发工具包中,这就意味着你在使用前必须另外下载JavaMail文件。这里提供一个我的java文件供大家下载。
源码地址:https://github.com/BoZiTong/RoomReserveManagementSystem/blob/master/src/Mail/javamail.java
里面有清楚的注释,按照注释修改相应代码即可。
这里我使用的发送邮箱是163邮箱
它的服务器地址:
POP3服务器: pop.163.com
SMTP服务器: smtp.163.com
IMAP服务器: imap.163.com
登录邮箱,在上方标签中找到并点击设置,选择POP3/SMTP/IMAP。
在设置POP3/SMTP/IMAP下 勾选IMAP/SMTP服务
点击保存即可。
某些邮箱服务器为了增加邮箱本身密码的安全性,给 SMTP 客户端设置了独立密码(有的邮箱称为“授权码”),建议使用授权码提高邮箱的安全性,授权码必须与原始密码不同
完成设置后邮箱密码必需使用这个独立密码(授权码)。
有些邮箱会过滤掉一些邮件,原因可能是邮件的主题或内容中含有敏感词语,接收方将其视为垃圾邮件。
在设置邮件的主题和内容时一定要注意,尽量避免一些敏感词语,比如:促销、让利等。
如果设置正确且能在发送邮件的邮箱中找到已发送的邮件,但接受方未收到,尝试在垃圾站中寻找。
非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助 ,QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看
各大型邮箱smtp服务器及端口收集:
新浪邮箱smtp服务器
外发服务器:smtp.vip.sina.com
收件服务器:pop3.vip.sina.com
新浪免费邮件
外发服务器:smtp.sina.com.cn
收件服务器:pop3.sina.com.cn163邮箱smtp服务器
pop: pop.163.com
smtp: smtp.163.comQQ邮箱smtp服务器及端口
接收邮件服务器:imap.qq.com,使用SSL,端口号993
发送邮件服务器:smtp.qq.com,使用SSL,端口号465或587yahoo邮箱smtp服务器
接:pop.mail.yahoo.com.cn
发:smtp.mail.yahoo.com126邮箱smtp服务器
pop: pop.126.com
smtp: smtp.126.com
新浪免费邮箱
POP3:pop.sina.com
SMTP:smtp.sina.com
SMTP端口号:25
新浪VIP邮箱
POP3:pop3.vip.sina.com
SMTP:smtp.vip.sina.com
SMTP端口号:25
新浪企业邮箱
POP3:pop.sina.com
SMTP:smtp.sina.com
SMTP端口号:25
雅虎邮箱
POP3:pop.mail.yahoo.cn
SMTP:smtp.mail.yahoo.cn
SMTP端口号:25
搜狐邮箱
POP3:pop3.sohu.com
SMTP:smtp.sohu.com
SMTP端口号:25
TOM邮箱
POP3:pop.tom.com
SMTP:smtp.tom.com
SMTP端口号:25
Gmail邮箱
POP3:pop.gmail.com
SMTP:smtp.gmail.com
SMTP端口号:587 或 25
QQ邮箱
POP3:pop.qq.com
SMTP:smtp.qq.com
SMTP端口号:25
263邮箱
域名:263.net
POP3:263.net
SMTP:smtp.263.net
SMTP端口号:25
域名:x263.net
POP3:pop.x263.net
SMTP:smtp.x263.net
SMTP端口号:25
域名:263.net.cn
POP3:263.net.cn
SMTP:263.net.cn
SMTP端口号:25
域名:炫我型
POP3:pop.263xmail.com
SMTP:smtp.263xmail.com
SMTP端口号:25
21CN 免费邮箱
POP3:pop.21cn.com
SMTP:smtp.21cn.com
IMAP:imap.21cn.com
SMTP端口号:25
21CN 经济邮邮箱
POP3:pop.21cn.com
SMTP:smtp.21cn.com
SMTP端口号:25
21CN 商务邮邮箱
POP3:pop.21cn.net
SMTP:smtp.21cn.net
SMTP端口号:25
21CN 快感邮箱
POP3:vip.21cn.com
SMTP:vip.21cn.com
SMTP端口号:25
21CN Y邮箱
POP3:pop.y.vip.21cn.com
SMTP:smtp.y.vip.21cn.com
SMTP端口号:25
中华网任我邮邮箱
POP3:rwpop.china.com
SMTP:rwsmtp.china.com
SMTP端口号:25
找回密码是一个简单实用的功能,几乎所有涉及用户的web应用都有该功能。
实现起来也十分简单。以JSP为例,页面将用户填写的邮箱等信息发给Servlet处理,Servlet调用JavaMail类的send方法,将找回密码页面的链接发到用户邮箱中,用户登录邮箱后点击链接即可。
public class forgetServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public forgetServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
if(request.getParameter("userId") == null){
String contact = request.getParameter("mail");
try {
Vector mail = userDB.getMail();
for(int i = 0; i < mail.size(); i++){
if(mail.get(i).equals(contact)){
String content = "亲爱的用户"+request.getParameter("nickName")+",您正在使用找回密码功能,请点击如下链接修改您的密码
http://localhost/WebStore/modifypassword.jsp?userId="+userDB.getUser(contact)+"";
Mail.send(content, contact, "找回密码");
response.setContentType("text/html; charset=utf-8");
response.getWriter().println("");
}
}
response.setContentType("text/html; charset=utf-8");
response.getWriter().println("");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}