前面一直用javamail来发送,对比spring会显得臃肿复杂,利用spring只需简单的配置就可以实现发邮件的功能。 首先必须导入所必须的包activation.jar,commons-logging.jar,mail.jar,spring.jar 新建一个applicationContext .xml <?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:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host"> <value>127.0.0.1</value><!-- 本地服务器 如果是其他,请填如:smtp.sohu.com--> </property> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">true</prop> <prop key="mail.smtp.timeout">25000</prop> </props> </property> <property name="username"> <value>postmaster@mai.com</value> <!-- 我这里用本地的邮箱名--> </property> <property name="password"> <value>123456</value> </property> </bean> </beans> 然后建立一个java文件 package org.fantlam.spring; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; public class SpringMail1 { public static void main(String args[]){ ApplicationContext ctx =new ClassPathXmlApplicationContext("applicationContext.xml"); JavaMailSender sender = (JavaMailSender) ctx.getBean("mailSender"); SimpleMailMessage mail = new SimpleMailMessage(); //这里SimpleMailMessage只能用来发送text格式的邮件 try { mail.setTo("fantlam@163.com");//接收者 mail.setFrom("sohu@mai.com");//按前面讲的,可以随便起 mail.setSubject("spring mail test!");//主题 mail.setText("springMail的简单发送测试");//邮件内容 sender.send(mail); } catch (Exception e) { e.printStackTrace(); } } } 这代码本身是没错的,一开始用了网易的老邮箱发送,它老给我报错 org.springframework.mail.MailSendException; nested exception details (1) are: Failed message 1: com.sun.mail.smtp.SMTPSendFailedException: 553 You are not authorized to send mail, authentication is required at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1388) at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:959) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583) at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:382) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:291) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:277) at org.fantlam.spring.SpringMail1.main(SpringMail1.java:20) 然后我试了一个新邮箱,报错又不一样。 org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:395) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:291) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:277) at org.fantlam.spring.SpringMail1.main(SpringMail1.java:20) Caused by: javax.mail.AuthenticationFailedException at javax.mail.Service.connect(Service.java:306) at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:373) ... 3 more 不过这并不是代码本身的错误,是邮箱验证那些东西,后来我用了本地的服务器就可以成功发送了,这就是用spring发送的简单邮件,不用解释什么,一看就明白了。 这是邮件系列文章的完结篇了,最后一次我用spring发送HTML格式的邮件,邮件里嵌套图片,并带有附件功能。 程序测试过了 发给搜狐就没问题,至于其它可能它比较严格,把邮件过滤掉了,我是用自己本地的服务器。 代码如下 package org.fantlam.spring; import java.io.File; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeUtility; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; public class SpringMail2 { public ApplicationContext ctx = null; public SpringMail2() { // 获取上下文 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 = null; try { messageHelper = new MimeMessageHelper(mailMessage, true, "utf-8"); } catch (MessagingException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { messageHelper.setTo("fantlam@sohu.com");// 接收者 messageHelper.setFrom("fantlam@sina.com");// 发送者 messageHelper.setSubject("用spring发送邮件");// 主题 // 邮件内容,注意加参数true(注重这里的boolean,等于真的时候才能嵌套图片,在构建MimeMessageHelper时候,所给定的值是true表示启用,multipart模式) messageHelper.setText("<html><head></head><body><h1>用spring发送HTML并带附件的邮件</h1><br><img src="a" mce_src="a"/></body></html>",true);// 附件内容 messageHelper.addInline("a", new File("c:/1.jpg")); File file = new File("c:/中文名字.rar"); // 这里的方法调用和插入图片是不同的,使用MimeUtility.encodeWord()来解决附件名称的中文问题 messageHelper.addAttachment(MimeUtility.encodeWord(file.getName()),file); sender.send(mailMessage); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { new SpringMail2().send(); } } 就这样结束吧,java邮件开发,把我自己的理解和实验与大家一起分享,代码是参考别人的,实际运用中挺大作用的,一般项目里都需要发送邮件的功能,常见的用spring和quartz做定时邮件发送。 接下来准备的是java多媒体开发,是我毕业设计需要做的。一眨眼功夫就已经四月多了,将临毕业了,毕业设计碰都没碰,不是懒,而是时间没时间,累,白天上班,晚上想做也觉得有点乏力。虽然有时候觉得自己所做的一切没有什么回报的希望,但依然会坚持着生活。现在我不会对自己说要努力,坚持下去,因为一直都是这样。