1. 准备发送邮件需要的jar
<classpathentry kind="lib" path="lib/activation.jar"/> <classpathentry kind="lib" path="lib/commons-logging-1.1.1.jar"/> <classpathentry kind="lib" path="lib/mail.jar"/> <classpathentry kind="lib" path="lib/org.apache.log4j_1.2.12.jar"/> <classpathentry kind="lib" path="lib/org.springframework.aop-3.1.1.RELEASE.jar"/> <classpathentry kind="lib" path="lib/org.springframework.asm-3.1.1.RELEASE.jar"/> <classpathentry kind="lib" path="lib/org.springframework.aspects-3.1.1.RELEASE.jar"/> <classpathentry kind="lib" path="lib/org.springframework.beans-3.1.1.RELEASE.jar"/> <classpathentry kind="lib" path="lib/org.springframework.context-3.1.1.RELEASE.jar"/> <classpathentry kind="lib" path="lib/org.springframework.core-3.1.1.RELEASE.jar"/> <classpathentry kind="lib" path="lib/org.springframework.expression-3.1.1.RELEASE.jar"/> <classpathentry kind="lib" path="lib/org.springframework.transaction-3.1.1.RELEASE.jar"/> <classpathentry kind="lib" path="lib/spring-context-support.jar"/> |
2. 配置发送邮件的Bean
<beanid="mailSender"class="org.springframework.mail.javamail.JavaMailSenderImpl"> <propertyname="host"value="smtp.163.com"/> <propertyname="port"value="25"/> <propertyname="username"value="chenxiang0207@163.com"/> <propertyname="password"value="****"/>
<propertyname="javaMailProperties"> <props> <propkey="mail.smtp.auth">true</prop> </props> </property> </bean> |
3. 编写发送邮件
3.1发送文本邮件
/** * 发送文本信息的邮件. <br> * @author ices 2012-12-4下午4:09:49<br> */ publicvoid sendMessage() { final ApplicationContext context =new ClassPathXmlApplicationContext( new String[] {"com/mail/applicationContext.xml"}); JavaMailSender sender = (JavaMailSender) context.getBean("mailSender"); // SimpleMailMessage只能用来发送text格式的邮件 SimpleMailMessage mail = new SimpleMailMessage(); try { mail.setTo("chenxiang0207@163.com"); mail.setFrom("chenxiang0207@163.com"); mail.setSubject("测试邮件"); mail.setText("SpringMail邮件发送"); sender.send(mail); } catch (Exception e) { thrownew RuntimeException(e); } } |
3.2发送Html格式邮件
/** * 发送HTML信息的邮件. <br> * @author ices 2012-12-4下午4:09:49<br> */ publicvoid sendHtmlMessage() { final ApplicationContext context =new ClassPathXmlApplicationContext( new String[] {"com/mail/applicationContext.xml"}); JavaMailSender sender = (JavaMailSender) context.getBean("mailSender");
try { JavaMailSenderImpl senderImpl =new JavaMailSenderImpl(); MimeMessage mailMessage = senderImpl.createMimeMessage(); //设置utf-8或GBK编码,否则邮件会有乱码 MimeMessageHelper messageHelper =new MimeMessageHelper(mailMessage,true,"utf-8");
messageHelper.setTo("chenxiang0207@163.com"); messageHelper.setFrom("chenxiang0207@163.com"); messageHelper.setSubject("测试邮件"); //邮件内容,参数true,表示启用html格式 messageHelper.setText("<html><head></head><body><h1>SpringMail邮件发送</h1></body></html>",true); sender.send(mailMessage); } catch (Exception e) { thrownew RuntimeException(e); } } |
3.3发送Html格式并带附件的邮件
/** * 发送HTML信息并有附件的邮件. <br> * @author ices 2012-12-4下午4:09:49<br> */ publicvoid sendAttachMessage() { final ApplicationContext context =new ClassPathXmlApplicationContext( new String[] {"com/mail/applicationContext.xml"}); JavaMailSender sender = (JavaMailSender) context.getBean("mailSender");
try { JavaMailSenderImpl senderImpl =new JavaMailSenderImpl(); MimeMessage mailMessage = senderImpl.createMimeMessage(); MimeMessageHelper messageHelper =new MimeMessageHelper(mailMessage,true,"utf-8");
messageHelper.setTo("chenxiang0207@163.com"); messageHelper.setFrom("chenxiang0207@163.com"); messageHelper.setSubject("测试邮件"); messageHelper.setText("<html><head></head><body><h1>SpringMail邮件发送</h1></body></html>",true);
//附件内容 messageHelper.addInline("a",new File("file/2080.BMP")); messageHelper.addInline("b",new File("file/Sunset.jpg")); File file =new File("file/中华民族.txt"); // MimeUtility.encodeWord()用来解决附件名称的中文问题 messageHelper.addAttachment(MimeUtility.encodeWord(file.getName()), file); sender.send(mailMessage); } catch (Exception e) { thrownew RuntimeException(e); } } |
4. 包冲突问题解决
java.lang.VerifyError: (class: org/springframework/mail/javamail/JavaMailSenderImpl, method: doSend signature: ( [Ljavax/mail/internet/MimeMessage; [Ljava/lang/Object; )V ) Incompatible argument to function at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2404) |
由于javaee-api-5.0-2.jar与spring-context-support-3.2.0.M1.jar存在相同的类“javax/mail/internet/MimeMessage.java”,导致上述的错误。
解决方法:删除javaee-api-5.0-2.jar的mail包。