实例:发送邮件验证码(java,163邮箱)。
项目背景:SpringBoot Maven
思路:采用POP3/SMTP协议 发送邮件。
应用(TestController.java)
package com.xxxxx.xxxxx.admin.ums.control;
import com.xxxxx.xxxxx.admin.ums.util.EmailUtils;
import com.xxxxx.xxxxx.base.constant.ReturnStatus;
import com.xxxxx.xxxxx.base.response.RestResponse;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/admin/ums/test/")
public class TestController {
@RequestMapping(value = "sendEmail",method = RequestMethod.POST)
public RestResponse sendEmail(String emailTo){
System.out.println("=====test=sendEmail=======");
if(StringUtils.isBlank(emailTo)){
emailTo = "收件人邮箱";
}
boolean flg = EmailUtils.sendEmail("标题:测试发邮件", emailTo, "内容:测试发邮件");
if(!flg){
return RestResponse.valid(ReturnStatus.BDP_STATUS_VALID,"发送失败");
}
return RestResponse.success("操作成功");
}
}
配置文件(pom.xml)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
配置文件(projectConfig.properties)
spring.mail.host=smtp.163.com
spring.mail.port=994
spring.mail.username=发件人邮箱,如123456@163.com
#授权码并不是邮箱的登录密码
spring.mail.password=163的授权码
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
工具类(EmailUtils.java)
package com.xxxxx.xxxxx.admin.ums.util;
import com.xxxxx.xxxxx.admin.ums.constant.KeyPrefix;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Component;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import java.util.Date;
@Slf4j
@Component
public class EmailUtils {
private static String from;
private static String pwd;
private static String host;
private static String port;
private static JavaMailSenderImpl mailSender;
@Autowired(required = false)
public void setMailSender(JavaMailSenderImpl mailSender){
EmailUtils.mailSender = mailSender;
}
@Value("${spring.mail.username}")
public void setFrom(String from){
EmailUtils.from = from;
}
@Value("${spring.mail.password}")
public void setPwd(String pwd){
EmailUtils.pwd = pwd;
}
@Value("${spring.mail.host}")
public void setHost(String host){
EmailUtils.host = host;
}
@Value("${spring.mail.port}")
public void setPort(String port){
EmailUtils.port = port;
}
/**
* @Title: sendEmail
* @Description: TODO(发送邮件)
* @param @param subject 要发送标题
* @param @param emailTo 要发送的邮箱
* @param @param text 发送的内容
* @return boolean 返回类型 true:成功,false:失败
*/
public static boolean sendEmail(String subject , String emailTo, String text){
boolean flg = false;
if(StringUtils.isBlank(subject) || StringUtils.isBlank(emailTo) || StringUtils.isBlank(text)){
log.error("=======数据不全,发送失败");
return flg;
}
try {
flg = sendEmailCommon(subject, emailTo, text);
}catch (Exception e){
log.error("=======发邮件异常:目标邮箱:"+emailTo+","+e.getMessage());
e.printStackTrace();
flg = false;
}
return flg;
}
public static boolean sendEmailCommon(String title, String emailTo,String content) {
try {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(emailTo);
message.setSubject(title);
message.setText(content);
message.setSentDate(new Date());
message.setCc(from); // 设置抄送,出现过发不出去,设置后就可以了
mailSender.send(message);
log.info("=======发邮件成功:目标邮箱:"+emailTo+",标题:"+title);
return true;
}catch (Exception e){
log.error("=======发邮件异常:目标邮箱:"+emailTo+","+e.getMessage());
e.printStackTrace();
return false;
}
}
}
如有错漏之处,敬请指正
——东东E