在Spring项目中须要增加监控功能。监控过程中发现异常时。须要邮件报警。最初选择用javamail发送,代码量比較大(相对于spring发送)。终于选择Spring邮件发送~

以下贴一下实现的代码以及注意事项;

代码结构非常easy一个java类和一个xml文件,用到三个jar包,demo下载地址http://download.csdn.net/detail/jeofey/8892859

这里仅仅是简单的发送,假设须要发送附件或者HTML格式的邮件的话,代码在文章末尾

[java] view
plain
copy

  1. package mail;
  2. import javax.mail.MessagingException;
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.support.FileSystemXmlApplicationContext;
  5. import org.springframework.mail.SimpleMailMessage;
  6. import org.springframework.mail.javamail.JavaMailSender;
  7. /**
  8. *  @author Owner
  9. *  springMail发送邮件
  10. *  SendMail.java
  11. */
  12. public class SendMail {
  13. public ApplicationContext ctx = null;
  14. public SendMail() {
  15. ctx = new FileSystemXmlApplicationContext("src/mail/applicationContext-mail.xml");
  16. }
  17. /**
  18. * 主測试方法
  19. *
  20. * @throws MessagingException
  21. */
  22. public static void main(String[] args) {
  23. new SendMail().sendMail();
  24. }
  25. /**
  26. * 发送简单邮件
  27. */
  28. public void sendMail() {
  29. JavaMailSender sender = (JavaMailSender) ctx.getBean("mailSender");// 获取JavaMailSender
  30. SimpleMailMessage mail = new SimpleMailMessage();
  31. try {
  32. mail.setTo("aaaa@qq.com");// 接受者
  33. mail.setFrom("bbbb@163.com");// 发送者
  34. mail.setSubject("s邮件主题");// 主题
  35. mail.setText("springMail 的简单发送測试");// 邮件内容
  36. sender.send(mail);
  37. System.out.println("发送完成");
  38. } catch (Exception e) {
  39. e.printStackTrace();
  40. }
  41. }
  42. }

注意事项:在读取xml配置文件时,用的是FileSystemXmlApplicationContext实现类,在书写路径的时候不能仅仅写文件名称,虽然java文件和xml文件是在同一文件夹下。

假设收件人有多个时,mail.setTo("aaaa@qq.com")。mail.setTo("cccc@qq.com")....

[html] view
plain
copy

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:p="http://www.springframework.org/schema/p"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xmlns:context="http://www.springframework.org/schema/context"
  7. xmlns:jee="http://www.springframework.org/schema/jee"
  8. xmlns:tx="http://www.springframework.org/schema/tx"
  9. xsi:schemaLocation="
  10. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
  11. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  12. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
  13. http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
  14. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
  15. <bean id="mailSender"
  16. class="org.springframework.mail.javamail.JavaMailSenderImpl">
  17. <property name="host">
  18. <value>smtp.163.com</value>
  19. </property>
  20. <property name="javaMailProperties">
  21. <props>
  22. <prop key="mail.smtp.auth">true</prop>
  23. <prop key="mail.smtp.timeout">25000</prop>
  24. <prop key="mail.smtp.socketFactory.fallback">false</prop>
  25. <prop key="mail.smtp.starttls.enable">true</prop>
  26. <!-- 这里是配置ssl 主要是个,Gmail
  27. <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
  28. -->
  29. </props>
  30. </property>
  31. <property name="username">
  32. <value>bbbb@163.com</value> <!-- 邮箱的username。注意要写正确了 -->
  33. </property>
  34. <property name="password">
  35. <value>*****</value> <!-- 邮箱password -->
  36. </property>
  37. <property name="port">
  38. <value>25</value>
  39. </property>
  40. </bean>
  41. </beans>

注意问题:username须要书写正确,必须是发送邮件中设定好的username,假设没设置。默认是邮件地址。当初这里没写正确,验证时出现了异常;

[plain] view
plain
copy

  1. 七月 12, 2015 8:02:57 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
  2. 信息: Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@16d835f: display name [org.springframework.context.support.FileSystemXmlApplicationContext@16d835f]; startup date [Sun Jul 12 20:02:57 CST 2015]; root of context hierarchy
  3. 七月 12, 2015 8:02:58 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
  4. 信息: Loading XML bean definitions from file [D:\liu\workspace\myspmain\src\mail\applicationContext-mail.xml]
  5. 七月 12, 2015 8:02:58 下午 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
  6. 信息: Bean factory for application context [org.springframework.context.support.FileSystemXmlApplicationContext@16d835f]: org.springframework.beans.factory.support.DefaultListableBeanFactory@13911fe
  7. 七月 12, 2015 8:02:58 下午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
  8. 信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@13911fe: defining beans [mailSender]; root of factory hierarchy
  9. org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException
  10. at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:416)
  11. at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:308)
  12. at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:297)
  13. at mail.SendMail.sendMail(SendMail.java:41)
  14. at mail.SendMail.main(SendMail.java:28)
  15. Caused by: javax.mail.AuthenticationFailedException
  16. at javax.mail.Service.connect(Service.java:306)
  17. at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:389)
  18. ... 4 more

查看发件箱的username

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" style="border:none; max-width:100%">

发件结果:

demo下载地址

发送html格式和发送附件的代码

[java] view
plain
copy

  1. /**
  2. * 发送带有正文是html的邮件
  3. *
  4. * @throws MessagingException
  5. */
  6. public void sendHTML() throws MessagingException {
  7. JavaMailSender sender = (JavaMailSender) ctx.getBean("mailSender");// 获取JavaMailSender
  8. // bean
  9. MimeMessage mm = sender.createMimeMessage();
  10. MimeMessageHelper helper = new MimeMessageHelper(mm, true, "utf-8");
  11. try {
  12. helper.setTo("aaaa@qq.com");// 接受者
  13. helper.setFrom("bbbb@163.com");// 发送者
  14. helper.setSubject("邮件主题");// 主题
  15. helper.setText("<html><head></head><body><h1>hello!!beckham</h1></body></html>",true);// 第二个參数代表发送的是正文是html
  16. sender.send(mm);
  17. System.out.println("发送完成");
  18. } catch (Exception e) {
  19. e.printStackTrace();
  20. }
  21. }
  22. /**
  23. * 发送带有附件的邮件
  24. *
  25. * @throws MessagingException
  26. */
  27. public void sendFileMail() throws MessagingException {
  28. JavaMailSender sender = (JavaMailSender) ctx.getBean("mailSender");// 获取JavaMailSender
  29. // bean
  30. MimeMessage mm = sender.createMimeMessage();
  31. MimeMessageHelper helper = new MimeMessageHelper(mm, true, "utf-8");
  32. try {
  33. helper.setTo("aaaa@qq.com");// 接受者
  34. helper.setFrom("bbbb@163.com");// 发送者
  35. helper.setSubject("邮件主题");// 主题
  36. helper.setText("邮件内容");// 邮件内容
  37. //多个附件文件
  38. ClassPathResource in = new ClassPathResource("附件.txt");
  39. ClassPathResource in2 = new ClassPathResource("struts.xml");
  40. //MimeUtility.encodeWord()解决附件的文件名称为中文问题
  41. helper.addAttachment(MimeUtility.encodeWord(in.getFilename()), in);
  42. helper.addAttachment(MimeUtility.encodeWord(in2.getFilename()), in2);
  43. sender.send(mm);
  44. System.out.println("发送完成");
  45. } catch (Exception e) {
  46. e.printStackTrace();
  47. }
  48. }

Spring发送邮件_javax.mail.AuthenticationFailedException异常已解决的更多相关文章

  1. sqlserver,执行生成脚本时“引发类型为“System.OutOfMemoryException”的异常”(已解决)

    sqlserver,执行生成脚本时“引发类型为“System.OutOfMemoryException”的异常”(已解决) 出现此错误主要是因为.sql的脚本文件过大(一般都超过100M)造成内存无法 ...

  2. No bean named 'xxxxx' is defined异常,已解决,这个坑很难发现,你get了吗

    出现No bean named 'xxxxx' is defined异常 没有定义名为xxx的bean 如果你的代码写的都对,根本问题只有一个地方出错了,那就是你的 basePackage=的包名路径 ...

  3. 使用mail架包发送邮件javax.mail.AuthenticationFailedException: failed to connect at javax.mail.Service.connec

    这个错误是因为连接不上邮箱服务器导致的,可能有以下几个原因(以网易邮箱为例) 1.当使用第三方登录邮箱时需要有邮箱的授权码,且要开启POP3/SMTP/IMAP:服务 2.在代码中要调用网易邮箱的密码 ...

  4. javamail发送邮件及错误解决方法javax.mail.AuthenticationFailedException: failed to connect, no password specified?

    javamail发送邮件及错误解决方法javax.mail.AuthenticationFailedException: failed to connect, no password specifie ...

  5. 关于使用JavaMail发送邮件抛出java.lang.NoSuchMethodError: com.sun.mail.util.TraceInputStream.<init>(Ljava异常的解决方法

    我们在使用JavaMail时有可能会如下异常: Exception in thread "main" java.lang.NoSuchMethodError: com.sun.ma ...

  6. [Android]异常4-javax.mail.AuthenticationFailedException

    javax.mail.AuthenticationFailedException 背景:JavaMail发送电子邮件 异常原因: 可能一>发件人帐号.密码有误 可能二>需要使用SSL安全认 ...

  7. java spring 等启动项目时的异常 或 程序异常的解决思路

    今天搭建ssm项目的时候,因为pagehelper的一个jar包没有导入idea的web项目下的lib目录中,异常报错找不到pagehelper,这个问题在出异常的时候疯狂crash,让人心情十分不舒 ...

  8. No Spring WebApplicationInitializer types detected on classpath异常的解决

    1.问题描述,当配置成 时,通过地址栏访问默认路径的index.jsp报404错误,如果手动在浏览器输入“http://localhost:8080/index.jsp”,则出现源码文件,然后观察ec ...

  9. Spring boot 前后台分离项目 怎么处理spring security 抛出的异常

    最近在开发一个项目 前后台分离的 使用 spring boot + spring security + jwt 实现用户登录权限控制等操作.但是 在用户登录的时候,怎么处理spring  securi ...

随机推荐

  1. Hadoop Hive概念学习系列之hive与依赖环境的交互(二十一)

    hive与环境的交互,算是一个小知识点,但掌握不菲! 如何在hive里,也达到这样呢? 不需要这样啦,因为,hive是建立在hadoop之上,启动hive,相当于,就是,hadoop jar ** h ...

  2. Objective-C——Runtime理解

    动态语言 OC是一门不折不扣的动态语言,所以它的很多机制都是动态运行时决定的.这点和C语言不一样,C语言是静态绑定,也就是编译后所有的一切都已经决定了.这一点和C语言的函数指针有些类似,很多时候函数指 ...

  3. 【Java设计模式】工厂模式

    简单工厂模式 简单工厂模式不是23种里的一种,简而言之,就是有一个专门生产某个产品的类.比如下图中的鼠标工厂,专业生产鼠标,给参数0,生产戴尔鼠标,给参数1,生产惠普鼠标. 示例代码: //一个产品接 ...

  4. CSS知识点整理(2):框模型,定位

    1. 框模型:Box Model 规定了元素处理元素框处理元素内容.外边距.边框.内边距的方式. 2. 当边距给定的值 可以小于4个.CSS定义了一些规则.处理这中情况: 如果缺少左外边距的值,则使用 ...

  5. php中的抽象方法和抽象类

    1.什么是抽象方法?    我们在类里面定义的没有方法提的方法就是抽象方法.所谓的没有方法体指的是,在声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时方 ...

  6. 设计模式——“signleton”

    那天别人问了我一个问题,关于单例模式的,由于之前了解的都是蜻蜓点水,所以重新复习了一次重新总结. 单例模式的写法总的来说有5种:懒汉,恶汉,枚举,双重校验锁,静态内部类 懒汉 public class ...

  7. c指针之内存释放

    // 1.正常使用包含指针的结构体 // 2.正常使用元素类型为指针的vector #include<string.h> #include<stdio.h> #include& ...

  8. (转)Arcgis for javascript实现百度地图ABCD marker的效果

    概述: 在我的博客中,有一篇相关的文章,这段时间,有很多人问我求源码,只是时间过去已长,源代码已找不到,乘着这个9.3放假,又重新实现了下,并相关代码做了优化,在此贴出来,方便大家使用. 相关文章地址 ...

  9. CAD动态绘制多段线(com接口)

    主要用到函数说明: _DMxDrawX::DrawLine 绘制一个直线.详细说明如下: 参数 说明 DOUBLE dX1 直线的开始点x坐标 DOUBLE dY1 直线的开始点y坐标 DOUBLE ...

  10. @Order

    1.Spring 4.2 利用@Order控制配置类的加载顺序, 2.Spring在加载Bean的时候,有用到order注解. 3.通过@Order指定执行顺序,值越小,越先执行 4.@Order注解 ...