Spring中的邮件发送

阅读更多
Spring的邮件发送操作简单,使用方便,通过xml文件中bean的配置,可以进一步简化操作。
除了Spring的相关jar包外,还需要mail.jar(在使用MyEclipse 6.0时,web工程引用的J2EE 1.4 Libraries中的mail.jar会引起jar包冲突,导致发送邮件时授权验证失败,需将此jar包引用去除)。

1.获取邮件发送器

1)代码方式:
JavaMailSenderImpl sender = new JavaMailSenderImpl();
	// 设定Mail Server及端口号
	sender.setHost("smtp.163.com");
	sender.setPort(xxx);

	// SMTP验证时,需要用户名和密码
	sender.setUsername("xxx");
	sender.setPassword("xxx");

2)xml中bean配置方式(相关配置信息放置在属性文件中):
	
	
		
			${email.host}
		
		
			${email.port}
		
		
			${email.username}
		
		
			${email.password}
		
		
			
				true
             
				${email.sendFrom}
			
		
	

WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();

	// 获取邮件发送器
	JavaMailSenderImpl sender = (JavaMailSenderImpl) wac.getBean("mailSender");
	// 获取配置的发送人邮件地址
	String sendFrom = (String) sender.getJavaMailProperties().get("sendFrom");

2.邮件对象的创建

1)简单文本邮件
   public static void main(String[] arg) throws Exception {
	JavaMailSenderImpl sender = new JavaMailSenderImpl();
	//设定Mail Server及端口号
	sender.setHost("smtp.163.com");
	sender.setPort(xxx);

	// SMTP验证时,需要用户名和密码
	sender.setUsername("xxx");
	sender.setPassword("xxx");

	//建立简单文本邮件
	SimpleMailMessage mailMessage = new SimpleMailMessage();

	//设定收件人、寄件人、主题与内文
	mailMessage.setFrom("xxx");
	mailMessage.setTo("xxx");//数组发送给多个联系人
	mailMessage.setSubject("Test");
	mailMessage.setText("This is a test mail");

	// 传送邮件
	sender.send(mailMessage);
	System.out.println("邮件传送OK..");
    }

2)可带附件邮件
    public static void main(String[] arg) throws Exception {
	JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();
	// 设定Mail Server及端口号
	senderImpl.setHost("smtp.163.com");
	senderImpl.setPort(xxx);	
	senderImpl.setUsername("xxx");
	senderImpl.setPassword("xxx");
	
	//创建Mime邮件(可包含附件、设置为html格式)
	MimeMessage mailMessage = senderImpl.createMimeMessage();	
	/*
	 *Create a new MimeMessageHelper for the given MimeMessage, 
	 *in multipart mode (supporting alternative texts, inline elements and attachments) if requested. 
	*/
	MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage, true, "utf-8");
	
	// 设定收件人、寄件人、主题与内文
	messageHelper.setFrom("xxx");
	messageHelper.setTo("xxx");
	messageHelper.setSubject("Test");
	// true 表示启动HTML格式的邮件
	messageHelper.setText(
		"

hello!

", true); File file = new File("d:/test.xlsx"); if (file.exists()) { // 添加附件并对文件名处理,避免中文乱码 FileSystemResource fileAdd = new FileSystemResource(file); messageHelper.addAttachment(MimeUtility.encodeWord(fileAdd.getFilename()), fileAdd); } // 传送邮件 senderImpl.send(mailMessage); System.out.println("邮件传送OK.."); }

3)邮件内容使用模板

在创建html邮件时可以使用模板技术生成邮件正文内容,例中使用FreeMarker,添加jar包文件freemarker.jar。
创建模板文件src/mailTemplate/mailTemplate.ftl,内容如下:
   
      
         
      
      
 	  ${user} 您好!
。。。。。。。

---------------------------------
${currentDate}
联系人:刘德华
电话 :18688886666
邮箱 :[email protected]

发送邮件业务类中FreeMarker配置类注入:
  private FreeMarkerConfigurer freeMarker;
    
    public void setFreeMarker(FreeMarkerConfigurer freeMarker) {
        this.freeMarker = freeMarker;
    }

xml中对应bean配置:
	
		
		
		
		
			
				1800
				UTF-8
				zh_CN
			
		
	
根据模板获取邮件正文内容方法:
    //根据模板文件获取邮件内容
    private String getEmailContent() {
	try {
	    //获取模板文件
	    Template template = freeMarker.getConfiguration().getTemplate("mailTemplate.ftl");
	    //对模板中的可变信息进行配置
	    Map map = new HashMap();	   
    map.put("user","xxx");
	    map.put("currentDate",Util.getNowDate("yyyy-MM-dd"));
	    
	    String content =  FreeMarkerTemplateUtils.processTemplateIntoString(template, map);
	    return content;
	    
	} catch (TemplateException e) {
	    logger.error("Error while processing FreeMarker template ", e);
	} catch (FileNotFoundException e) {
	    logger.error("Error while open template file ", e);
	} catch (IOException e) {
	    logger.error("Error while generate Email Content ", e);
	}
	return "";
    }

其它操作可参考: http://www.open-open.com/lib/view/open1338109120604.html

你可能感兴趣的:(spring,mail,freemarker,邮件)