Java 发送验证码到邮箱

1.涉及的jar包

<!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>javax.mail-api</artifactId>
    <version>1.6.0</version>
</dependency>

2.email

/***
 * 
 * @author Administrator
 * sender 发送方地址
 * userName 用户名 @之前的账号
 * password 邮箱客户端授权码
 * @2018年6月21日
 */
public class Email {
	
	private String sender;
	private String userName;
	private String password;

	public String getSender() {
		return sender;
	}

	public void setSender(String sender) {
		this.sender = sender;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
}

3.发送验证码方法

public static void sendCodeToMail(String recipients, String sender, String mailName, String mailPassWord,
        String mailHostKey, String mailHostValue, String mailProtocolKey, String mailProtocolValue,
        String mailPortKey, String mailPortValue, String mailAuthKey, String mailAuthValue,
        String mailDebugKey, String mailDebugValue, String Content, String subject, String mailCode) {

    Email mail = new Email();
    // 发件人的邮箱地址(要完整),会显示在收件人的邮件中
    mail.setSender(sender);
    // 发件人登录邮箱的账号(@符合前面的部分)
    mail.setUserName(mailName);
    // 下面填的是邮箱客户端授权码,切忌:邮箱务必要开启(POP3/SMTP服务)
    mail.setPassword(mailPassWord);
    try {
        // 创建邮件对象
        Session session = null;
        Properties props = new Properties();
        // 此处为发送方邮件服务器地址,要根据邮箱的不同需要自行设置
        props.put(mailHostKey, mailHostValue);
        props.setProperty(mailProtocolKey, mailProtocolValue);
        // SMTP端口号
        props.put(mailPortKey, mailPortValue);
        // 设置成需要邮件服务器认证
        props.put(mailAuthKey, mailAuthValue);
        props.put(mailDebugKey, mailDebugValue);
        session = Session.getInstance(props);
        session.setDebug(true);
        Message message = new MimeMessage(session);
        // 设置发件人
        message.setFrom(new InternetAddress(mail.getSender()));
        // 设置收件人
        message.addRecipient(RecipientType.TO, new InternetAddress(recipients));
        // 设置标题
        message.setSubject(subject);
        // 邮件内容,根据自己需要自行制作模板
        message.setContent("<p>尊敬的******用户:</p><p>您好!</p><p style='color:red; font:20px;' >您正在尝试重置密码!" + "您的验证码是:" + mailCode + "。</p><p>请妥善保管您的账号和密码。</p>"
                + "<p>******</p>", "text/html;charset=utf-8");
        //message.setText(Content);
        // 发送邮件
        Transport transport = session.getTransport("smtp");
        transport.connect(mailHostValue, mail.getUserName(), mail.getPassword());// 以smtp方式登录邮箱
        // 发送邮件,其中第二个参数是所有已设好的收件人地址
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

4.发送验证码

// 发送邮箱地址
@Value("${SENDER}")
private String SENDER;
// 发件人邮箱账号
@Value("${MAIL_NAME}")
private String MAIL_NAME;
// 邮箱客户端授权码,邮箱务必开启POP3/SMTP
@Value("${MAIL_PASSWORD}")
private String MAIL_PASSWORD;
// 发送方邮件服务器地址
@Value("${MAIL_HOST_KEY}")
private String MAIL_HOST_KEY;
@Value("${MAIL_HOST_VALUE}")
private String MAIL_HOST_VALUE;
// 发送邮件协议
@Value("${MAIL_PROTOCOL_KEY}")
private String MAIL_PROTOCOL_KEY;
@Value("${MAIL_PROTOCOL_VALUE}")
private String MAIL_PROTOCOL_VALUE;
// SMTP端口号
@Value("${SMTP_PORT_KEY}")
private String SMTP_PORT_KEY;
@Value("${SMTP_PORT_VALUE}")
private String SMTP_PORT_VALUE;
// 邮件服务器认证
@Value("${MAIL_AUTH_KEY}")
private String MAIL_AUTH_KEY;
@Value("${MAIL_AUTH_VALUE}")
private String MAIL_AUTH_VALUE;
@Value("${MAIL_DEBUG_KEY}")
private String MAIL_DEBUG_KEY;
@Value("${MAIL_DEBUG_VALUE}")
private String MAIL_DEBUG_VALUE;

@SuppressWarnings("static-access")
@RequestMapping(value = "/sendmail")
@ResponseBody
public JSONObject SendMail(HttpServletRequest request) {
	JSONObject backJson = new JSONObject();
	String mailCode = String.valueOf(Math.random() * 1000000).substring(0, 6); // 6位随机验证码
	HttpSession session = request.getSession();
	session.setAttribute("MAIL_CODE", mailCode);
	log.info("SESSION MAIL CODE :" + mailCode);
	String subject = "密码找回";
	//收件人的邮箱地址
	String recipients = "*************@163.com";
	SendMail s = new SendMail();
	s.sendCodeToMail(recipients, SENDER, MAIL_NAME, MAIL_PASSWORD, MAIL_HOST_KEY, MAIL_HOST_VALUE,
			MAIL_PROTOCOL_KEY, MAIL_PROTOCOL_VALUE, SMTP_PORT_KEY, SMTP_PORT_VALUE, MAIL_AUTH_KEY, MAIL_AUTH_VALUE,
			MAIL_DEBUG_KEY, MAIL_DEBUG_VALUE, null, subject, mailCode);
	backJson.put("STATUS", "0");
	backJson.put("MSG", "发送成功");
	return backJson;
}

5.配置文件sys.properties

#发送邮箱地址
SENDER=***********@163.com
#发件人邮箱账号
MAIL_NAME=***********
#邮箱客户端授权码,邮箱务必开启POP3/SMTP
MAIL_PASSWORD=******
#发送方邮件服务器地址
MAIL_HOST_KEY=mail.smtp.host
MAIL_HOST_VALUE=smtp.163.com
#发送邮件协议
MAIL_PROTOCOL_KEY=mail.transport.protocol
MAIL_PROTOCOL_VALUE=smtp
#SMTP端口号
SMTP_PORT_KEY=mail.smtp.port
SMTP_PORT_VALUE=25
#邮件服务器认证
MAIL_AUTH_KEY=mail.smtp.auth
MAIL_AUTH_VALUE=true
MAIL_DEBUG_KEY=mail.debug
MAIL_DEBUG_VALUE=true

猜你喜欢

转载自blog.csdn.net/shy415502155/article/details/80759111