今天测试了下spring的发邮件的功能 下上代码 在说遇到的问题

首先在applicationContext.xml配置邮件信息

  <bean id="mailSender"  class="org.springframework.mail.javamail.JavaMailSenderImpl">  <property name="host">  <value>"smtp.163.com"</value>  </property>  <property name="javaMailProperties">  <props>  <prop key="mail.smtp.auth">true</prop>  <prop key="mail.smtp.starttls.enable">true</prop> <prop key="mail.smtp.timeout">25000</prop>  </props>  </property>  <property name="username">  <value>xxxx@163.com</value>  </property>  <property name="password">  <value>xxxxxx</value>  </property>  </bean>  <!-- mailbox.dxsport.com.cn, port: 25 --><!-- 文本邮件服务类 --><bean id="mailManager" class="com.wfy.email.MailManager"><property name="mailSender" ref="mailSender" /><property name="textTemplate"><value><![CDATA[用戶%1$s在%2$tF被修改.System Administrator.]]></value></property></bean>

mailManager类

package com.wfy.email;import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;public class MailManager {private JavaMailSender mailSender;private  String textTemplate;//要发送的文本信息private static final String  EMAIL_FROM = "xxxx@163.com";public void setMailSender(JavaMailSender mailSender) {this.mailSender = mailSender;}public void setTextTemplate(String textTemplate) {this.textTemplate = textTemplate;}/*** 发送纯文本的用户修改通知邮件.*/public void sendNotificationMail(String subject , String  content , String  toEmail) {SimpleMailMessage msg = new SimpleMailMessage();//SimpleMailMessage只能用来发送text文本msg.setFrom(EMAIL_FROM);//此处用QQ测试必须和xml中发送端保持的一致否则报错(但是网上说发送者,这里还可以另起Email别名,不用和xml里的username一致??) msg.setTo(toEmail);//接受者msg.setSubject(subject);//主题msg.setText(content);//正文内容try {mailSender.send(msg);//发送邮件} catch (Exception e) {e.printStackTrace();}}}

测试代码:

/*** @param args*/public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");   MailManager mailManager=(MailManager) ctx.getBean("mailManager");mailManager.sendNotificationMail("test", "测试spring发邮件功能!!!!", "11111111@qq.com");System.out.println("已发送!!!");}

遇到问题: 1报了java.lang.NoClassDefFoundError: javax/mail/MessagingException的错误

网上解决方法:

把j2ee1.4中的activation.jar和mail.jar包拷贝到项目中,重新部署,问题解决。

Spring发送邮件实际上使用的是Java Mail 类库,这是JavaEE标准类库中德一部分,Spring只对Java Mail做了封装。不过JDK5以上的环境中,java EE5自带的Java Mail类库是有问题的,因此要使用J2EE1.4中的java Mail.于是添加J2EE1.4中邮件相关的包,即:activation.jar、mail.jar.

2。Could not connect to SMTP host: "smtp.163.com ", port: 25;

暂时不知道怎么回事,ping smtp.163.com 是可以ping通的。网上一查有说关杀毒软件的,关防火墙的,邮箱问题的 我都试了都没管用。我用qq  163 试了下都不行最后用我们公司的邮箱发送成功了 。据说是邮箱为了防止垃圾邮件据说2006年之后申请的163邮箱,都不开通STMP的服务,即无法通过客户端来发送邮件。不知道真假

还有说把McAfee关掉就可以了 ,McAfee不知什么东东没有测试。

3.java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream错误

网上解决办法:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
当出现以上错误时,恭喜您已经离接收邮件不远了,否则请您解决好所有的异常后再来看这个帖子。

javax.mail和javax.activation这两个包已经在javaEE5当中属于基础包了,就是JDK中自带了已经,但是里面的方法与现在外面的mail.jar和activation.jar有一些出入,所以初学者在直接copy别人代码的时候往往会出现上面的错误。
废话不多说下面是解决方法
进到

X:\Program Files\MyEclipse 6.5\myeclipse\eclipse\plugins\com.genuitec.eclipse.j2eedt.core_6.5.0.zmyeclipse650200806\data\libraryset\EE_5

这个路径里,可以看到javaee.jar,用rar把这个文件打开,然后进到javax文件夹里,删除mail.jar和activation.jar(我的javaee.jar里,这两个东西是文件夹,总之删掉就OK,不过要注意备份一下)    此问题说按照上面说的没有解决 (我用的MyEclipse 8.5路径不太一样可能删错了吧!)后来 改为J2EE1.4问题解决

   COPY 别人的一些资料

163邮箱 
  POP3服务器:pop3.163.com 
  SMTP服务器:smtp.163.com 
Yahoo邮箱 
   POP3服务器:pop.mail.yahoo.com.cn 
   SMTP服务器:smtp.mail.yahoo.com 
搜狐邮箱 
  POP3服务器:pop3.sohu.com  
  SMTP服务器:smtp.sohu.com 
新浪邮箱 
  POP3服务器:pop.sina.com.cn 或pop3.sina.com.cn  
  SMTP服务器:smtp.sina.com.cn 
     请选择smtp服务器要求身份验证选项 
139邮箱 
  POP3服务器:pop3.139.com  
  SMTP服务器:smtp.139.com 
Gmail邮箱 
    POP3服务器:pop.gmail.com  端口:995  开启ssl 
    SMTP服务器:smtp.gmail.com  端口:465 或者587  开启ssl 
    帐号即用户名,密码相同,邮件地址为username@gmail.com 
QQ邮箱 
  POP3服务器:pop.qq.com  
  SMTP服务器:smtp.qq.com 
   SMTP服务器需要身份验证

java.lang.ClassNotFoundException: javax.mail.MessagingException
tomcat没有识别到JavaMail的API类的原因,现在不庆幸当时自带的方便了。本来以为所有的API都可以在javaee.jar中找到所以把这个jar包拷贝到WEB-INF下的lib目录下,结果不行。拷贝到tomcat的lib目录中,报错如下
java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath ()Ljava/lang/String;
其实是jar冲突问题,所以把tomcat目录下的lib目录中刚拷贝的javaee.jar删除,可以启动服务器。但是还是没有解决tomcat无法找到JavaMail API的问题,只有去下载了一个mail.jar放到WEB-INF下的lib目录中,结果就可以了

追加 又查了一下用QQ的邮箱设置下可以发送了     设置步骤如下  :

    1.进入邮箱 -->设置-->账户-->pop3/SMTP服务 勾选上(还有个IMAP/SMTP服务不知道选哪个具体没测试我都选上了)然后保存OK;

   2.application.xml中 的host属性设置为smtp.qq.com      另外注意

msg.setFrom(EMAIL_FROM);//要和xml文件中指定到qq邮箱一样 否则发不出去汇报如下错
//javax.mail.MessagingException: 501 mail from address must be same as authorization user

经过如上修改决定可以发送邮件(目前只是文本 也可以发送附件和图片)不过貌似发送的邮件数量有限制。

源码下载地址:download.csdn.net/detail/nn955/4655282

发送html格式并带有附件的邮件:

public class SendMail {public ApplicationContext ctx = null;public SendMail() {//获取上下文ctx = new ClassPathXmlApplicationContext("applicationContext.xml");}public void send() {//获取JavaMailSender beanJavaMailSender sender = (JavaMailSender) ctx.getBean("mailSender");JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();MimeMessage mailMessage = senderImpl.createMimeMessage();//设置utf-8或GBK编码,否则邮件会有乱码MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true,"utf-8");try {messageHelper.setTo(email.getEmail());//接受者   messageHelper.setFrom("xxx@163.com");//发送者messageHelper.setSubject("测试邮件");//主题//邮件内容,注意加参数truemessageHelper.setText("<html><head></head><body><h1>hello!!chao.wang</h1></body></html>",true);//附件内容messageHelper.addInline("a", new File("E:/xiezi.jpg"));messageHelper.addInline("b", new File("E:/logo.png")); File file=new File("E:/测试中文文件.rar");  // 这里的方法调用和插入图片是不同的,使用MimeUtility.encodeWord()来解决附件名称的中文问题messageHelper.addAttachment(MimeUtility.encodeWord(file.getName()), file); sender.send(mailMessage);} catch (Exception e) {e.printStackTrace();}}

参考原文:http://www.iteye.com/topic/348564

Spring Java Mail发邮件相关推荐

  1. 关于java mail 发邮件的问题总结(转)

    今天项目中有需要用到java mail发送邮件的功能,在网上找到相关代码,代码如下: import java.io.IOException; import java.util.Properties; ...

  2. Java Mail(发邮件)

    邮箱相关协议介绍: 参考博客:https://blog.csdn.net/suhuaiqiang_janlay/article/details/78765613 简单邮件发送案例: import or ...

  3. 关于使用Java Mail 发邮件,连接超时问题

    异常信息 send mail err:Mail server connection failed; nested exception is com.sun.mail.util.MailConnectE ...

  4. java mail 收发邮件

    java mail 收发邮件 1.发件 2.收件 1.发件 package base.util; /* Some SMTP servers require a username and passwor ...

  5. 如何用java实现发邮件功能

    如何用java实现发邮件功能 前言 前置条件 邮件服务器 电子邮件协议 JavaMail 实现 参考 前言 今天突然心学来潮,想用Java来实现发邮件的功能,想想这个在实际中还是蛮有用的,比如我举几个 ...

  6. Java实现发邮件功能---网易邮箱

    目录 Java实现发邮件功能 前言 开发环境 代码 效果 结束语 Java实现发邮件功能 前言 电子邮件的应用场景非常广泛,例如新用户加入,即时发送优惠清单.通过邮件找回密码.监听后台程序,出现异常自 ...

  7. java velocity 邮件_邮件集成java mail + 读取邮件模板

    项目做异地登录提醒功能,通过java mail发送邮件.读取邮件模板sendMail.vm文件. 1.邮件发送 import java.io.StringWriter; import java.uti ...

  8. 邮件集成java mail + 读取邮件模板

    项目做异地登录提醒功能,通过java mail发送邮件.读取邮件模板sendMail.vm文件. 1.邮件发送 import java.io.StringWriter; import java.uti ...

  9. java 多线程 发邮件_Spring多线程批量发送邮件(ThreadPoolTaskExecutor)

    1,需求:使用多线程批量发送邮件 需要批量发送邮件大概400封左右,但是因为发送邮件受网络限制,所以经常导致等待超时.所以就想到了使用多线程来发邮件,因为是异步的所以返回结果不受发邮件影响. 2,思路 ...

最新文章

  1. 杂谈---改变个人习惯
  2. oracle 一致性读数量,ORACLE 一致性读原理记录
  3. CountDownLatch 的使用小例
  4. mysql mydumper_采用mydumper对MySQL部分数据库进行热备
  5. leetcode算法题--二叉树中的最长交错路径★
  6. Java-Runoob-高级教程-实例-字符串:13. Java 实例 - 字符串格式化
  7. 1.9 多态性:什么是多态?
  8. 服务器响应回调函数,解决有关flask-socketio中服务端和客户端回调函数callback参数的问题(全网最全)...
  9. 如何用文本档编辑c语言,c语言读写word文档
  10. 3.21日 爬虫小计
  11. ENode 2.8 最新架构图简介
  12. 在java中实现日期类型和字符串类型的转换大全(Date String Timestamp Datetime)
  13. 一切问题的解决都离不开人
  14. Vue笔记:使用 axios 中 this 指向问题
  15. linux 学习笔记(基础)
  16. 宜宾学院教务系统(金智教务系统)成绩爬虫
  17. via浏览器下载路径_via浏览器
  18. C语言 习题3-1 比较大小 (简单解法)
  19. 全球最昂贵的10大科技产品
  20. 通达信精确逃顶主图指标

热门文章

  1. 《Federated_Machine_Learning:Concept_and_Applications》精读
  2. MTK Android Driver:PMIC
  3. 12.静态路由、静态缺省路由
  4. 【问题】Ucinet密度分析结果一直是1.000
  5. netcat使用总结
  6. “无法建立到信任根颁发机构的证书链问题解决,根证书的导入方法
  7. 阿里云弹性计算技术专家樊毅伟:云上成本优化实践
  8. 阿里云弹性计算总经理张献涛:智能化、高效能、新交互将重塑互联网
  9. vue渐进式框架的理解
  10. 请详细解释下小波去噪的原理