近期启动一个maven项目后,需要做一个发送邮件的功能;采用的是spring框架自带的发送邮件方法,用main方法调试,都是OK的,但是使用tomcat启动项目后,再次发送,总是失败,报错信息 如下:
Failed messages: javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
com.sun.mail.smtp.SMTPAddressFailedException: 553 5.7.1 <xxx@xxxx.com>: Sender address rejected: not logged in
百思不得其解,最后发现是spring的jar包少了,在pom.xml里添加:
spring 版本:
<spring.version>3.2.2.RELEASE</spring.version>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
完整的spring的jar包引用如下:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
发送源码如下:
spring.xml 添加:
<import resource="classpath:spring/config/test-email.xml" />
test-eamil.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
default-autowire="byName">
<!-- 邮件发送服务配置 -->
<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="xxx" />
<property name="username" value="xxx@xxx.com" />
<property name="password" value="xxx" />
<property name="javaMailProperties">
<props><prop key="mail.smtp.auth">true</prop></props>
</property>
<property name="defaultEncoding" value="utf-8" />
</bean>
<!-- 发件人 -->
<bean id="email_from" class="java.lang.String">
<constructor-arg value="xxx@xxx.com" />
</bean>
<!-- 主题 -->
<bean id="email_subject" class="java.lang.String">
<constructor-arg value="欢迎使用xxx" />
</bean>
</beans>
controll调用方法:
@Autowired
private EmailService emailService;
/**
* 新增初始化
* @param request
* @param response
* @return ModelAndView
* @throws Exception
*
*/
@RequestMapping(params = "action=sendEmail")
public void sendEmail(HttpServletRequest request, HttpServletResponse response) throws Exception {
//获取参数
String email = CommUtil.getFilterParameter(request,"email");
String content = CommUtil.getFilterParameter(request,"content");
if(StringUtils.isNotBlank(email) && StringUtils.isNotBlank(content)) {
boolean falg = emailService.sendEmail(email, content);
if(falg){
System.out.println("邮箱验证码发送成功!");
}else{
System.out.println("邮箱验证码发送失败!");
}
}
}
service类:
public interface EmailService {
/**
* 发送邮件
*
* @param email 邮件地址
* @param content 邮件内容
*
* @exception SysException
* */
public boolean sendEmail(String email, String content);
}
service实现类:
@Service("emailService")
public class EmailServiceImpl implements EmailService{
@Autowired
private JavaMailSender javaMailSender;
@Autowired
private String email_from;
@Autowired
private String email_subject;
@Override
public boolean sendEmail(String email, String content){
if(StringUtils.isBlank(email)){
System.out.println("接收邮件地址为空");
return false;
}
try {
this.send(email,content);
} catch (Exception e) {
System.out.println("Email发送异常"+e.getMessage());
return false;
}
return true;
}
/**
* 发送邮件
* @param email
* @param content
* @throws Exception
*/
private void send(String email, String content) throws Exception{
System.out.println("[发送邮件](" + email_from + ")(" + email + ")("+ email_subject + ")");
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message);
try {
helper.setSubject(email_subject);
helper.setFrom(email_from);
helper.setTo(email);
helper.setText(content, true);
javaMailSender.send(message);
} catch (Exception e) {
throw new Exception(mailExceptionHandler(e.getMessage()));
}
}
/**
* 明确错误异常
* */
private String mailExceptionHandler(String errorMessage){
if(StringUtils.isEmpty(errorMessage)){
return errorMessage;
}
if(errorMessage.contains("Invalid Addresses")){
return "邮箱地址无效,邮件服务器未找到该邮件地址,请核实!";
}
return errorMessage;
}
}
测试url:
http://运用名称/xxx.do?action=sendEmail&email=xxx@qq.com&content=发送邮件测试