Mail工具类:(案例为 网易 163邮箱)
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
public class MailUtils {
public static void sendMail(String email, String emailMsg)
throws AddressException, MessagingException {
// 1.创建一个程序与邮件服务器会话对象 Session
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "SMTP");
props.setProperty("mail.host", "smtp.163.com"); //邮箱不同,格式不同
props.setProperty("mail.smtp.auth", "true");// 指定验证为true
// 创建验证器
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("leis17", "a123456");//账号 授权码(授权码要在网易邮箱自己设置)
}
};
Session session = Session.getInstance(props, auth);
// 2.创建一个Message,它相当于是邮件内容
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]")); // 设置发送者
message.setRecipient(RecipientType.TO, new InternetAddress(email)); // 设置发送方式与接收者
message.setSubject("用户激活");
// message.setText("这是一封激活邮件,请<a href='#'>点击</a>");
message.setContent(emailMsg, "text/html;charset=utf-8");
// 3.创建 Transport用于将邮件发送
Transport.send(message);
}
}
jsp页面
<form class="form-horizontal" style="margin-top: 5px;" method="post" action="/17Store/register1">
<div class="form-group">
<label for="telephone" class="col-sm-2 control-label">邮箱</label>
<div class="col-sm-4">
<input type="text" class="form-control" id="email"
placeholder="请输入163邮箱" name="email">
</div>
</div>
</form>
Servlet
public class register1Servlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
String remail = request.getParameter("email"); //得到输入的邮箱地址
session.setAttribute("email", remail);
// System.out.println("phone:"+request.getParameter("telephone"));
String emailCode = null;// 6位验证码
emailCode = "122222";
RequestDispatcher dispatcher = request.getRequestDispatcher("/getCode.jsp");// 因为在同一个web应用下,所以不需要写/WEB_request/servlet2
// 执行转发的方法
try {
MailUtils.sendMail(remail, emailCode);//将信息发送到指定邮箱
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
dispatcher.forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
报错情况及其解决:
163邮箱开启pop3/smtp等协议,然后用授权码代替密码来模拟登陆就可以发送成功了!