本文参考使用技术Java+JSP+Servlet
本次源代码可在本人网盘下载:http://pan.baidu.com/s/1jIdV7r4
循序渐进介绍如何使用Java发送电子邮件
一、J2EE+前台Bootstrap实现发送邮件
二、Java代码发送邮件
三、SpringMVC架构+前台layUI改造邮件发送项目
J2EE+前台Bootstrap实现发送邮件
(1)需求场景描述
1、在网站注册成功后,会发送邮件到注册者邮箱,提示使用邮箱激活账号。
2、访问某网站用户账号锁定时,会发送一个连接到邮箱来解锁账号,或者找回密码等。
(2)运行截图
(3)代码实现
1.新建Dynamic Web Project工程
2.引入mail.jar和activation.jar
3.项目目录结构如图
4.配置发件人163邮箱的SMTP服务器、账户以及密码等参数
配置mail.properties文件之后即可运行,若运行报错,检测Jre和Tomcat环境(替换成本机的),本次用的是JDK1.8和Tomcat8如下图所示
Java代码发送邮件
为了更清晰的理解代码,现用Java工程描述
Java Project忽略界面层,web服务器,用控制台打印的形式,是架构师构建测试项目的首选,本例使用大家都能懂的main主方法,正规来说应该使用JUnit单元测试。
下载并加载JavaMail API
JavaMail API目前的版本为JavaMail API 1.4.3。可以从如下地址下载:
http://java.sun.com/products/javamail/downloads/index.html
下载后,建立jarFile文件夹,贴入mail.jar和activation.jar文件并且Add to Build Path
编写邮件身份验证类
用来验证SMTP服务器身份。程序继承了Authenticator类,它主要用来实现登录邮件服务器时的认证。它包含两个属性:username和password,分别用来存储认证时所需的用户名和密码信息。程序重写了Authenticator类的getPasswordAuthentication()方法,该方法返回PasswordAuthentication对象,此对象包含通过STMP服务器身份验证所需的用户名和密码,供认证时session调用。
Auth类,它继承了Authenticator类
package com.zhi.mail;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
public class Auth extends Authenticator {
private String username = "";
private String password = "";
public Auth(String username, String password) {
this.username = username;
this.password = password;
}
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
}
编写发送邮件类
代码说明:该程序为一个邮件发送通用类的程序,SendMail构造方法实现对发送邮件身份的认证,获得Session对象。该方法中SMTPHost、Port、MailUsername、MailPassword分别表示所使用的SMTP服务器、服务器的smtp端口、用户名和密码。sendingMimeMail()方法为发送邮件的方法,在该方法需要传入的参数中,MailFrom为发件人电子信箱,MailTo为收件人电子信箱,MailCopyTo为抄送人电子信箱,MailBCopyTo为暗送人电子信箱,MailSubject为发送邮件主题,MailBody为发送邮件正文。sendingMimeMail()返回boolean类型,表示是否发送成功。发送邮件时先调用构造方法SendMail()创建邮件发送对象,然后调用sendingMimeMail()方法发送。
SendMail类
package com.zhi.mail;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendMail {
private Properties props; //系统属性
private Session mailSession; //邮件会话对象
private MimeMessage mimeMsg; //MIME邮件对象
public SendMail(String SMTPHost, String Port, String MailUsername, String MailPassword) {
Auth au = new Auth(MailUsername, MailPassword);
//设置系统属性
props=java.lang.System.getProperties(); //获得系统属性对象
props.put("mail.smtp.host", SMTPHost); //设置SMTP主机
props.put("mail.smtp.port", Port); //设置服务端口号
props.put("mail.smtp.auth", "true"); //同时通过验证
//获得邮件会话对象
mailSession = Session.getInstance(props, au);
}
public boolean sendingMimeMail(String MailFrom, String MailTo,
String MailCopyTo, String MailBCopyTo, String MailSubject,
String MailBody) {
try {
//创建MIME邮件对象
mimeMsg=new MimeMessage(mailSession);
//设置发信人
mimeMsg.setFrom(new InternetAddress(MailFrom));
//设置收信人
if(MailTo!=null){
mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(MailTo));
}
//设置抄送人
if(MailCopyTo!=null){
mimeMsg.setRecipients(javax.mail.Message.RecipientType.CC,InternetAddress.parse(MailCopyTo));
}
//设置暗送人
if(MailBCopyTo!=null){
mimeMsg.setRecipients(javax.mail.Message.RecipientType.BCC,InternetAddress.parse(MailBCopyTo));
}
//设置邮件主题
mimeMsg.setSubject(MailSubject,"utf-8");
//设置邮件内容,将邮件body部分转化为HTML格式
mimeMsg.setContent(MailBody,"text/html;charset=utf-8");
//发送邮件
Transport.send(mimeMsg);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
编写SendDemo类进行测试
package com.zhi.demo;
import com.zhi.mail.SendMail;
public class SendDemo {
/**
* 若频繁发送,腾讯服务器会将邮件自动识别为垃圾邮件并且屏蔽
* @param args
*/
public static void main(String[] args) {
String SMTPHost="";
String Port="";
String MailUsername="[email protected]"; //直接用我的邮件进行发送测试
String MailPassword=""; //密码请勿修改
SendMail sendMail=new SendMail(SMTPHost,Port,MailUsername,MailPassword);
String MailFrom=null; //发件人
String MailTo=null; //收件人
String MailCopyTo=null; //抄送人
String MailBCopyTo=null; //暗送人
String MailSubject="JavaSE发送邮件测试"; //邮件主题
String MailBody="引用mail.jar和activation.jar实现邮件发送!"; //邮件内容
//发送邮件
boolean isSend=sendMail.sendingMimeMail(MailFrom, MailTo, MailCopyTo, MailBCopyTo, MailSubject, MailBody);
if(isSend){
System.out.println("邮件发送成功");
}else{
System.out.println("邮件发送失败");
}
}
}
运行main主方法发送邮件
SpringMVC架构+前台layUI改造邮件发送项目
待续...
其他
SMTP
SMTP (Simple Mail Transfer Protocol,简单邮件传输协议)由RFC 821定义。它定义了发送电子邮件的机制。
POP
POP(Post Office Protocol)代表邮局协议
IMAP
IMAP是更高级的用于接收消息的协议。在RFC 2060中被定义,IMAP代表Internet消息访问协议(Internet Message Access Protocol),目前使用的是版本4,因此也称IMAP4。
MIME
MIME代表多用途Internet邮件扩展标准(Multipurpose Internet Mail Extensions)。它不是邮件传输协议,但对传输内容的消息、附件及其他内容定义了格式。