1.预备知识
smtp与pop3
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议
SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器
POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本
POP3服务器则是遵循POP3协议的接收邮件服务器
即:SMTP是发送邮件协议
POP3是接收邮件协议
2.java实现准备
- java中需要使用javax.mail-1.5.1.jar 这个包来发送邮件
- 帐号准备【注册一个163邮箱,以后公司会有自己的邮件服务器,到时改公司公司的即可】
3.代码实现
工具类:
package com.gyf.bookstore.utils;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* 发送邮件时候: 向运维:维护服务器Linux
* 索要:
* 1.smtp服务器地址,smtp.163.com
* 2.发送邮件的端口号:默认25
* 3.发件人的账号和密码
*
*
*
*/
public class SendJMail {
static final String smtphost = "smtp.163.com";//smtp服务器地址
static final String from = "z2395951674@163.com"; // 邮件发送人的邮件地址
static final String username = "z2395951674@163.com"; // 发件人的邮件帐户
static final String password = "xxxxxxx"; // 发件人的邮件密码,指的是是客户端授权码,找了好久
/**
*
* @param email
* 接收人的邮箱地址
* @param emailMsg
* 邮箱内容
* @return
*/
public static boolean sendMail(String email, String emailMsg) {
String to = email; // 邮件接收人的邮件地址
// 定义Properties对象,设置环境信息
Properties props = System.getProperties();
// 设置邮件服务器的地址
props.setProperty("mail.smtp.host", smtphost); // 指定的smtp服务器
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.transport.protocol", "smtp");// 设置发送邮件使用的协议
// 创建Session对象,session对象表示整个邮件的环境信息
Session session = Session.getInstance(props);
// 设置输出调试信息
session.setDebug(true);
try {
// Message的实例对象表示一封电子邮件
MimeMessage message = new MimeMessage(session);
// 设置发件人的地址
message.setFrom(new InternetAddress(from));
// 设置主题
message.setSubject("用户激活");
// 设置邮件的文本内容
// message.setText("Welcome to JavaMail World!");
message.setContent((emailMsg), "text/html;charset=utf-8");
// 设置附件
// message.setDataHandler(dh);
// 从session的环境中获取发送邮件的对象
Transport transport = session.getTransport();
// 连接邮件服务器
transport.connect(smtphost, 25, username, password);
// 设置收件人地址,并发送消息
transport.sendMessage(message, new Address[] { new InternetAddress(to) });
transport.close();
return true;
} catch (MessagingException e) {
e.printStackTrace();
return false;
}
}
}
service里使用:
/**
* 注册
* @param user
*/
public void register(User user) {
try {
//注册的用户保存到数据库
userDao.add(user);
//发送激活邮箱
String link = "http://localhost:9090/bookstore/active?activeCode=" + user.getActiveCode();//端口号没改9090,导致错误
String html = "<a href=\"" + link + "\">欢迎注册网上书城帐号,请点击激活</a>";
System.out.println("激活:"+html);
SendJMail.sendMail(user.getEmail(), html);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new UserException("注册失败");
}
}
4.细节注意
163邮箱设置
注:这里的授权码即为工具类里写的发件人的邮件密码,我开始以为是登录邮箱的密码,一直成功不了,浪费了很多时间!