spring对邮件的发送有了方便简单的支持
如果使用spring发邮件需要加入org.springframework.context.support-3.1.0.RELEASE.jar包,和mail.jar包
1.spring的xml中配置如下:
<bean id="javamail" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<!--设置邮件的smtp服务器 -->
<property name="host" value="smtp.163.com"></property>
<!-- 姓名 -->
<property name="username" value="senssic@163.com"></property>
<!-- 密码 -->
<property name="password" value="xxxxxxx"></property>
<property name="javaMailProperties">
<props>
<!-- 是否需要验证 -->
<prop key="mail.smtp.auth">true</prop>
<!-- 超时时间 -->
<prop key="mail.smtp.timeout">20000</prop>
</props>
</property>
</bean>
使用spring的javamail
package spring.senssic.mail;
import java.util.Date;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.core.io.ClassPathResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
public class SMail {
private final SimpleMailMessage sm = new SimpleMailMessage();
/**
* 简单的文本邮件
*
* @return
*/
public SimpleMailMessage siMessage(String from, String[] to,
String subject, String message) {
sm.setFrom(from);
sm.setTo(to);
sm.setSubject(subject);
sm.setText(message);
sm.setSentDate(new Date());
return sm;
}
/**
* 发送带附件的邮件
*
* @param mailSender
* @param from
* 发件人
* @param to
* 收件人
* @param text
* 发送文本
* @param subject
* 发送主题
* @return
* @throws MessagingException
*/
public MimeMessage mimeMessage(JavaMailSenderImpl mailSender, String[] to,
String text, String subject) throws Exception {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper mHelper = new MimeMessageHelper(message, true, "utf8");
mHelper.setFrom(mailSender.getUsername());
mHelper.setTo(to);
mHelper.setSubject(subject);
mHelper.setText(text);
ClassPathResource file = new ClassPathResource("/file/readme.wps");//文件位于classes下的file目录下
System.out.println(file.getInputStream());
mHelper.addAttachment("readme.wps", file);
return message;
}
/**
* 发送带图片的网页
*
* @param mailSender
* 发件人
* @param to
* 收件人
* @param subject
* 发送主题
* @param html
* 发送的网页文本
* @return
* @throws MessagingException
*/
public MimeMessage miMessage(JavaMailSenderImpl mailSender, String[] to,
String subject, String html) throws MessagingException {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(message,
true, "utf8");
mimeMessageHelper.setFrom(mailSender.getUsername());
mimeMessageHelper.setTo(to);
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setText(html, true);
ClassPathResource file = new ClassPathResource("file/1.png");
mimeMessageHelper.addInline("file", file);//‘file’为contentId的标示符号
return message;
}
}
junit测试类:
package spring.senssic.test;
import javax.mail.internet.MimeMessage;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import spring.senssic.mail.SMail;
public class STest {
private static JavaMailSenderImpl js;
private final SMail sMail = new SMail();
@BeforeClass
public static void TWork() {
ApplicationContext act = new ClassPathXmlApplicationContext("beans.xml");
js = (JavaMailSenderImpl) act.getBean("javamail");
}
@Test
public void test() {
String[] to = { "463349267@qq.com" };
SimpleMailMessage sMessage = sMail.siMessage(js.getUsername(), to,
"测试而已", "lala德玛西亚");
js.send(sMessage);
}
@Test
public void testm() throws Exception {
String[] to = { "463349267@qq.com" };
MimeMessage message = sMail.mimeMessage(js, to, "详细文档在附件内",
"这个是带有附件的邮件");
js.send(message);
}
@Test
public void testsm() throws Exception {
String[] to = { "463349267@qq.com" };
String html = "<body><p>Hello Html Email</p><img src='cid:file'/></body>";//注意<img/>标签,src='cid:file','cid'是contentId的缩写,其值对应上面的’file‘标示符
MimeMessage message = sMail.miMessage(js, to, "html内嵌图片", html);
js.send(message);
}
}
注:spring发送邮件的时候解决中文乱码的一些方法
1.增加验证,否则会报:553 authentication is required 的错误信息
Properties prop = new Properties();
prop.setProperty("mail.smtp.auth", "true");
JavaMailSenderImpl.setJavaMailProperties(prop);
2.当邮件内容是HTML语言时的中文问题:
初始化MimeMessageHelper辅助类时,设置"GBK" encoding!如:
MimeMessageHelper messageHelp = new MimeMessageHelper(message,true,"GBK");
同时在设置:<META http-equiv=Content-Type content='text/html; charset=GBK'>
如果都设置为"UTF-8",在某些邮件客户端标题不能正常显示!
3.邮件附件的中文问题!
spring的文档里面说MimeMessageHelper设置了encoding,同时对title,text,attach产生作用,但还是会出问题:
解决方法:MimeUtility.encodeWord(file.getName());