不明觉厉的spring(6)---spring对邮件的支持

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());


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值