Spring封装的JavaMail配置及异常处理

来源:本网整理

StringmailTo="**@163.com";StringmailTo=&

spring-mail.properties(Spring的属性文件): 

配置的问题,在spring配置文件中,如果是qq邮箱的话,host的值为smtp.qq.com,us

mail.host=smtp.163.com mail.username=email@163.com mail.password=123456 #非SSL端口号 mail.port=25 #SSL端口号 #mail.port=465 mail.encoding=UTF-8 mail.smtp.auth=true mail.smtp.timeout=25000 mail.sendTo=email@163.com;

JavaMailSender sender = (JavaMailSender) getBean..

spring-mail.xml(有关spring mail服务的Spring配置文件):

javax/mail/MessagingException这个包有没有正确引入?

<?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:aop="http://www.springframework.org/schema/aop" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> <!-- 扫描该包下的Bean --> <context:component-scan base-package="com.wenniuwuren.mail.service" /> <!-- 邮件发送 --> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host"> <value>${mail.host}</value> </property> <property name="username"> <value>${mail.username}</value> </property> <property name="password"> <value>${mail.password}</value> </property> <property name="port"> <value>${mail.port}</value> </property> <property name="defaultEncoding"> <value>${mail.encoding}</value> </property> <property name="protocol"> <value>smtp</value> </property> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">${mail.smtp.auth}</prop> <!-- <prop key="mail.smtp.starttls.enable">true</prop> 取决于使用的邮件服务是否支持STARTTLS加密 --> <!-- <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> 取决于是否使用SSL端口发送邮件--> <prop key="mail.smtp.socketFactory.fallback">false</prop> <prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop> <prop key="mail.sendTo">${mail.sendTo}</prop> <!-- <prop key="mail.debug">true</prop> 测试时开启--> </props> </property> </bean> <!-- 异步线程 --> <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <property name="corePoolSize" value="10" /> <property name="maxPoolSize" value="30" /> </bean> </beans> 配置完上面的, 记得在容器能扫描到的配置文件里加上:

spring的mail我没用过,但是Java的mail一直在用,说实在的,不稳定,偶尔情况会卡死在一

<!-- 扫描邮件服务 --> <import resource="classpath:META-INF/spring-mail.xml"/>或者直接把上面的spring-mail.xml直接写在容器能扫描到的配置文件里, 但是会导致单个配置文件太长。

香菜做为评价两极分化最严重的食材之一。不喜欢它的人对它嗤之以鼻,甚至有人表示香菜的味道闻起来像是这个香菜英文名字的词根是“臭虫”可想而知它的味道对于某些人来说有多可怕。不过,根据科学家的研究表示,不爱吃香菜完全是因为基因导致的而全世界大约有15%的人是讨厌香菜的。经科学研究发现,主要是因为这类人群有“OR6A2”这个嗅觉基因,这种基因能够很敏锐地接收到香菜里的醛类物质,也就是香菜特殊味道的来源。这个“OR6A2”离我们生活中肥皂的味道特别接近,所以天生不爱吃香菜的人。就直接感觉香菜有一股肥皂的味道,这让他们觉得香菜闻起来的味道很恶心。甚至世界上还有人成立了“反香菜联盟”如今人数已经超过5

MailService接口:

随着中国足球职业化的迅速进步,目前的中超和中甲都早就实现了电视信号覆盖,而且现场的转播机位也已经达到了国际化标准。另外,目前大部分比赛场地的条件也越来越好,现场的比分显示屏基本都是可以播放视频的。所以说,在技术上实现进球回放是没有问题的。比如说,几年前,有几家中甲俱乐部尝试过现场视频回放,但是效果却并不算好,因为很可能引起现场球迷的情绪,造成不必要的负面事件。但不得不说的是,如果未来录像裁判技术正是引进,那么现场显示屏实现回放就非常自然了。几年前,包括新疆体彩队在内的几家中乙和中甲球队曾经尝试过在现场的大屏幕上播放回放镜头。但是这样做很容易让现场的观众更为反感裁判的一些失误,让现场球迷的情绪受

public interface MailService { /** * 邮件发送统一入口 * @param email * */ public abstract void sendMail(Email email) throws Exception; /** * 异步发送 */ public abstract void sendMailByAsynchronousMode(final Email email) throws Exception; /** * 同步发送 */ public abstract void sendMailBySynchronizationMode(Email email) throws Exception; /** * 邮件发送 * @param subject * @param content */ public void sendMail(String subject, String content) throws Exception; }

羽绒棉和羽绒的区别⑴、羽绒属于天然纤维、羽绒棉(中空棉)属于化学纤维。天然的东西还是必要有利于健康的;⑵、羽绒的档次更高,品质更好,在价格方面一件真正羽绒服的价格会高出羽绒棉衣好几倍;⑶、羽绒服的保暖性能比羽绒棉更好,但羽绒服(次品会有异味及出毛现象),而羽绒棉是类似羽毛的棉纤维制品(不会出现洗后不保暖,异味,出毛现象)。羽绒与羽绒棉的辨别绒是禽类的羽毛,而羽绒棉是类似羽毛的棉纤维制品.。羽绒是长在鹅、鸭的腹部,成芦花朵状的绒毛,成片状的叫羽毛。由于羽绒是一种动物性蛋白质纤维,比棉花(植物性纤维素)保温性高,且羽绒球状纤维上密布千万个三角形的细小气孔,能随气温变化而收缩膨胀,产生调温功能,可吸

MailService接口实现类: MailServiceImpl

座位与成绩还是有一点关系的。拿我家孩子举例来说,八年级的时候,和一个学习成绩比较好的同学同桌,座位比较考前。成绩明显比七年级的时候有所提高。和孩子沟通,我觉得座位和同学帮了她。首先来说孩子同桌,这位同学记忆力特别好,相对背诵的科目都考的特别好。孩子回来跟我说,背历史题,我家妞需要20分钟背会的题,这名同学只需要10分钟。我家孩子不喜欢背诵,但孩子们都有争强好胜的心理,我家孩子无形中也受到影响,背诵的积极性也提高了,成绩自然也得到了提高。在孩子小学的时候,座位经常变动,我觉得坐在哪里都没关系。到了初中,孩子因为个子高,还有别的原因,座位一直比较偏后。有一次孩子放学回来给我说,后面纪律差的很,同学

import java.util.Properties; import javax.annotation.Resource; import javax.mail.internet.MimeMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.task.TaskExecutor; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; @Service("mailService") public class MailServiceImpl implements MailService{ @Resource JavaMailSender mailSender;// 注入 @Resource TaskExecutor taskExecutor; Logger logger = LoggerFactory.getLogger(MailServiceImpl.class); // 判断同步或者异步发送 @Override public void sendMail(Email email) throws Exception { JavaMailSenderImpl senderImpl = (JavaMailSenderImpl)mailSender; Properties mailProperties = senderImpl.getJavaMailProperties(); //获取接收人信息 String sendTo = mailProperties.getProperty("mail.sendTo"); email.setAddress(sendTo); if (email.getAddress() == null || email.getAddressArray().length == 0) { throw new ServiceException("缺少收件人地址"); } if (email.getAddressArray().length > 5) {// 收件地址大于5时,异步发送 sendMailByAsynchronousMode(email); } else { try { sendMailBySynchronizationMode(email); } catch (Exception e) { throw new Exception(e); } } } // 实现异步只需把同步发送放到Concurrent里面执行 @Override public void sendMailByAsynchronousMode(final Email email) throws Exception { taskExecutor.execute(new Runnable() { public void run() { try { sendMailBySynchronizationMode(email); } catch (Exception e) { throw new Exception(e); } } }); } // 同步发送邮件 @Override public void sendMailBySynchronizationMode(Email email) throws Exception { try{ JavaMailSenderImpl senderImpl = (JavaMailSenderImpl)mailSender; MimeMessage mime = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mime, false, "utf-8"); helper.setFrom(senderImpl.getUsername());// 发件人 helper.setTo(email.getAddressArray());// 收件人 if (email.getCc() != null && email.getCc().trim().length() > 0) { String cc[] = email.getCc().split(";"); helper.setCc(cc);// 抄送 } helper.setSubject(email.getSubject());// 邮件主题 helper.setText(email.getContent(), true);// true表示设定html格式 mailSender.send(mime); }catch(Exception e){ throw new Exception(e); } } // 发送邮件 入口方法 public void sendMail(String subject, String content) throws Exception { try { Email mail = new Email(); mail.setSubject(subject); mail.setContent(content); sendMail(mail); } catch (Exception e) { throw new Exception(e); } } }

Model层的JavaBean: Email

import java.io.Serializable; public class Email implements Serializable{ private static final long serialVersionUID = -1; /** 收件人 **/ private String address; /** 抄送给 **/ private String cc; /** 邮件主题 **/ private String subject; /** 邮件内容 **/ private String content; // ////////////////////////解析邮件地址////////////////////////////// public String[] getAddressArray() { if (this.address == null || this.address.trim().length()==0) { return null; } address = address.trim(); address.replaceAll(";", ";"); address.replaceAll(" ", ";"); address.replaceAll(",", ";"); address.replaceAll(",", ";"); address.replaceAll("|", ";"); return address.split(";"); } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getCc() { return cc; } public void setCc(String cc) { this.cc = cc; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }

剩下最后一步就是调用了, 看各自业务的需求, 以下代码是在程序发生异常时发邮件通知负责人:

@Resource private MailService mailService; // 注入 try{ // 业务逻辑 }catch(Exception e){ //发送邮件 mailService.sendMail("邮件主题", "邮件内容"); }

编码过程遇到的问题:

1. 错误:javax.mail.AuthenticationFailedException: 错误码(400 ~ 599) 

   这是最经常看到的, 原因可能有:

      -- 用户名密码错误

      -- 防火墙或杀毒软件屏蔽SMTP协议

      -- 邮箱本身没有开启SMTP/POP协议支持(默认都是关闭的)

2. 错误:Could not send email: Could not convert socket to TLS

 原因: 所使用的邮件服务器不支持通过STARTTLS keyword 的TLS加密 

  解决办法: 注释掉这个配置<prop key="mail.smtp.starttls.enable">true</prop>, 参照上文

3. 错误: javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 465, response: -1

       原因:使用了SSL端口465但是却配置却没使用SSL的配置       

      解决办法: 配置<prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>

                    参照上文, 把注释去掉就行了。

4. 其他服务器可以发送, 但是个别邮件服务器就算开启了SMTP协议支持也不行(如现在的QQ邮箱)

    解决办法: 暂无(不知道广大博友怎么搞定)... 友情提示:先别试QQ邮箱, 试网易的136会省掉很多找bug的时间。  

本文参考资料:

                          博客: 利用Spring框架封装的JavaMail实现同步或异步邮件发送

                          Wikipedia: STARTTLS                           SVNForum:Thread: Could not send email: Could not convert socket to TLS

本文转载自wenniuwuren博客,版权归wenniuwuren所有

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

用spring和javamail实现代理服务器发邮件时,报异常MailSendException: Mail server connection failed

网易163好像默认不开启smtp协议,你得登录邮箱修改。新浪 腾讯等邮箱已经开启了,你不如换个邮箱试试。追问你帮我看哈我的配置参数有没有问题? 谢谢。本回答被提问者采纳

spring集成的javamail出现错误

<props>

<prop key="mail.smtp.auth">true</prop>

<prop key="mail.smtp.host">host</prop>

<prop key="mail.smtp.timeout">25000</prop>

</props>

加个这个试试,没在spring里面部署过javamail,我直接调用的java email组件,然后自己写的实现接口。

我这样写的

Properties props = new Properties(); // 获取系统环境

Authenticator auth = new Email_Autherticator(); // 进行邮件服务器用户认证

props.put("mail.smtp.host", host);

props.put("mail.smtp.auth", "true");追问直接使用javamail我也会。就是想用spring里面集成的javamail。封装的比较好。因为开发用到了ssh2框架。刚刚你说的方法试了没有用哈。希望高手帮忙解决。感激。感激。

Spring java发送邮件出错怎么解决

邮箱

POP3服务器(端口995)

qq.com pop.qq.com

SMTP服务器(端口465或587)

smtp.qq.com

端口?

关于java Spring Mail中host参数设置问题

是smtp服务器的地址,去相应的邮件服务商的网页,找outlook设定的内容,其中就有smtp服务器地址的记载。

例如,使用gmail的话是smtp.gmail.com本回答被提问者采纳

  • 本文相关:
  • 图像检测的几篇经典论文——from师兄
  • 摄像机模型与标定
  • [翻译]魅族的M1 Note是十分便宜(dirt-cheap)的ihone5C增强版
  • 大数据处理之道(预处理方法)
  • UVa 568 - Just the Facts
  • 浅谈程序开发心理学
  • 想成功,每天做一点折磨你的事——读书笔记(三)
  • eclipse中新建Java工程的三个JRE选项区别
  • Quartz源码解析----触发起源
  • 机器学习之&&Andrew Ng课程复习--- 聚类——Clustering
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved