今天测试了下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 bean
JavaMailSender 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("测试邮件");//主题
//邮件内容,注意加参数true
messageHelper.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
分享到:
相关推荐
java 发送邮件 spring发送邮件Mail
Spring邮件发送服务(java邮件发送),支持多附件、多人发送/抄送/暗送
springboot 整合spring-boot-starter-mail 发邮件
使用Spring mail发送邮件的完整实例,包含代码与Spring mail的jar,可直接运行与使用。相关学习文档参考博客《Spring Mail邮件发送 http://blog.csdn.net/chenxiang0207/article/details/8256528》。
封装了一个java mail的jar包,只需设置邮件的基本信息 就可发邮件: //这个类主要是设置邮件 MailSenderInfo mailInfo = new MailSenderInfo(); mailInfo.setMailServerHost("smtp.163.com"); mailInfo....
java发送邮件(两种方式-springcloud方式+静态调用方式)
java发送邮件示例源码,支持html格式邮件,接收人,邮件主题,邮件内容,附件路径 #邮件 spring.mail.default-encoding=utf-8 # 配置SMTP服务器地址 spring.mail.host=smtp.qq.com #发送方邮件名 spring.mail....
spring邮件服务,实现java邮件发送功能,可实现多附件、多人发送/抄送/暗送
这个java project的源代码 博文链接:https://kukuqiu.iteye.com/blog/161771
用法查看 https://blog.csdn.net/qq_32371887/article/details/72821291 注意配置的邮箱不要被标记为垃圾邮件
Spring Boot整合邮件发送并保存历史发送邮箱 项目描述 项目主要是使用 Spring Boot 发送邮件,主要的技术点有: 1、Spring Boot +mybatis的整合 2、Spring Boot项目中jsp的使用 3、Spring Boot 发送邮件...
主要介绍了Spring Boot利用Java Mail实现邮件发送,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
spring-context-support-4.1.7.RELEASE.jar mail-1.4.1.jar
使用时需要将mail.properties和jdbc.properties的用户名密码修改为使用者自己的参数
主要为大家详细介绍了使用Spring的JAVA Mail支持简化邮件发送功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
基于spring boot java mail demo ,简单邮件,html邮件, 附件 三种实现
Java基于JDK1.6基础上Spring2.5.6版本上发送邮件功能需要的依赖lib包
Java网络编程-基于Spring的邮件编程-1
SpringBoot整合JavaMail功能,使用的是Spring自带的发送邮件功能,本Demo以qq邮箱为服务器做的测试,完成了纯文本发送、html发送、嵌入图片、带有附件等的封装,如有不足欢迎交流
主要介绍了java使用spring实现发送mail的方法,涉及java基于spring框架发送邮件的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下