Spring Java Mail发邮件
今天测试了下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发邮件相关推荐
- 关于java mail 发邮件的问题总结(转)
今天项目中有需要用到java mail发送邮件的功能,在网上找到相关代码,代码如下: import java.io.IOException; import java.util.Properties; ...
- Java Mail(发邮件)
邮箱相关协议介绍: 参考博客:https://blog.csdn.net/suhuaiqiang_janlay/article/details/78765613 简单邮件发送案例: import or ...
- 关于使用Java Mail 发邮件,连接超时问题
异常信息 send mail err:Mail server connection failed; nested exception is com.sun.mail.util.MailConnectE ...
- java mail 收发邮件
java mail 收发邮件 1.发件 2.收件 1.发件 package base.util; /* Some SMTP servers require a username and passwor ...
- 如何用java实现发邮件功能
如何用java实现发邮件功能 前言 前置条件 邮件服务器 电子邮件协议 JavaMail 实现 参考 前言 今天突然心学来潮,想用Java来实现发邮件的功能,想想这个在实际中还是蛮有用的,比如我举几个 ...
- Java实现发邮件功能---网易邮箱
目录 Java实现发邮件功能 前言 开发环境 代码 效果 结束语 Java实现发邮件功能 前言 电子邮件的应用场景非常广泛,例如新用户加入,即时发送优惠清单.通过邮件找回密码.监听后台程序,出现异常自 ...
- java velocity 邮件_邮件集成java mail + 读取邮件模板
项目做异地登录提醒功能,通过java mail发送邮件.读取邮件模板sendMail.vm文件. 1.邮件发送 import java.io.StringWriter; import java.uti ...
- 邮件集成java mail + 读取邮件模板
项目做异地登录提醒功能,通过java mail发送邮件.读取邮件模板sendMail.vm文件. 1.邮件发送 import java.io.StringWriter; import java.uti ...
- java 多线程 发邮件_Spring多线程批量发送邮件(ThreadPoolTaskExecutor)
1,需求:使用多线程批量发送邮件 需要批量发送邮件大概400封左右,但是因为发送邮件受网络限制,所以经常导致等待超时.所以就想到了使用多线程来发邮件,因为是异步的所以返回结果不受发邮件影响. 2,思路 ...
最新文章
- 杂谈---改变个人习惯
- oracle 一致性读数量,ORACLE 一致性读原理记录
- CountDownLatch 的使用小例
- mysql mydumper_采用mydumper对MySQL部分数据库进行热备
- leetcode算法题--二叉树中的最长交错路径★
- Java-Runoob-高级教程-实例-字符串:13. Java 实例 - 字符串格式化
- 1.9 多态性:什么是多态?
- 服务器响应回调函数,解决有关flask-socketio中服务端和客户端回调函数callback参数的问题(全网最全)...
- 如何用文本档编辑c语言,c语言读写word文档
- 3.21日 爬虫小计
- ENode 2.8 最新架构图简介
- 在java中实现日期类型和字符串类型的转换大全(Date String Timestamp Datetime)
- 一切问题的解决都离不开人
- Vue笔记:使用 axios 中 this 指向问题
- linux 学习笔记(基础)
- 宜宾学院教务系统(金智教务系统)成绩爬虫
- via浏览器下载路径_via浏览器
- C语言 习题3-1 比较大小 (简单解法)
- 全球最昂贵的10大科技产品
- 通达信精确逃顶主图指标
热门文章
- 《Federated_Machine_Learning:Concept_and_Applications》精读
- MTK Android Driver:PMIC
- 12.静态路由、静态缺省路由
- 【问题】Ucinet密度分析结果一直是1.000
- netcat使用总结
- “无法建立到信任根颁发机构的证书链问题解决,根证书的导入方法
- 阿里云弹性计算技术专家樊毅伟:云上成本优化实践
- 阿里云弹性计算总经理张献涛:智能化、高效能、新交互将重塑互联网
- vue渐进式框架的理解
- 请详细解释下小波去噪的原理