springMVC发送邮件的简单实现

利用javax.mail发送邮件,图片与附件都可发送

1,Controller类

package com.web.controller.api;
 
import javax.annotation.Resource;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
 
import com.service.EmailService;
 
@Controller
@RequestMapping("api")
public class EmailTaskController {
 
  private static final Logger logger = LoggerFactory.getLogger(EmailTaskController.class);
 
  @Resource
  EmailService emailService;
   
  @RequestMapping("sendEmailTask")
  public void sendEmailTask() {
    logger.info("-------------执行发送邮件START---------------");
      //写入excel
      //insuranceService.excelManage();
      //发邮件
      emailService.emailManage();
     
    logger.info("-------------执行发送邮件END---------------");
     
  }
 
}

2,service类

package com.service.impl;
 
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
 
import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
 
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
 
import com.entity.MailModel;
import com.service.EmailService;
import com.SimpleException;
 
@Service
public class EmailServiceImpl implements EmailService {
  private static Logger logger = Logger.getLogger(EmailServiceImpl.class);
 
  private String excelPath = "d://";
   
  @Resource
  private JavaMailSender javaMailSender;
   
  @Resource
  private SimpleMailMessage simpleMailMessage;
   
  @Override
  public void emailManage(){
    MailModel mail = new MailModel();
    //主题
    mail.setSubject("清单"); 
     
    //附件
    Map<String, String> attachments = new HashMap<String, String>();
    attachments.put("清单.xlsx",excelPath+"清单.xlsx");
    mail.setAttachments(attachments);
     
    //内容
    StringBuilder builder = new StringBuilder();
    builder.append("<html><body>你好!<br />");
    builder.append("    附件是个人清单。<br />");
    builder.append("    其中人信息;<br />");
    builder.append("</body></html>");
    String content = builder.toString();
     
    mail.setContent(content);
     
    sendEmail(mail);
  }
 
 
 
  /**
   * 发送邮件
   * 
   * @author chenyq
   * @date 2016-5-9 上午11:18:21
   * @throws Exception
   */
  @Override
  public void sendEmail(MailModel mail) {
    // 建立邮件消息
    MimeMessage message = javaMailSender.createMimeMessage();
     
    MimeMessageHelper messageHelper;
    try {
      messageHelper = new MimeMessageHelper(message, true, "UTF-8");
      // 设置发件人邮箱
      if (mail.getEmailFrom()!=null) {
        messageHelper.setFrom(mail.getEmailFrom());
      } else {
        messageHelper.setFrom(simpleMailMessage.getFrom());
      }
       
      // 设置收件人邮箱
      if (mail.getToEmails()!=null) {
        String[] toEmailArray = mail.getToEmails().split(";");
        List<String> toEmailList = new ArrayList<String>();
        if (null == toEmailArray || toEmailArray.length <= 0) {
          throw new SimpleException("收件人邮箱不得为空!");
        } else {
          for (String s : toEmailArray) {
            if (s!=null&&!s.equals("")) {
              toEmailList.add(s);
            }
          }
          if (null == toEmailList || toEmailList.size() <= 0) {
            throw new SimpleException("收件人邮箱不得为空!");
          } else {
            toEmailArray = new String[toEmailList.size()];
            for (int i = 0; i < toEmailList.size(); i++) {
              toEmailArray[i] = toEmailList.get(i);
            }
          }
        }
        messageHelper.setTo(toEmailArray);
      } else {
        messageHelper.setTo(simpleMailMessage.getTo());
      }
       
      // 邮件主题
      if (mail.getSubject()!=null) {
        messageHelper.setSubject(mail.getSubject());
      } else {
         
        messageHelper.setSubject(simpleMailMessage.getSubject());
      }
       
      // true 表示启动HTML格式的邮件
      messageHelper.setText(mail.getContent(), true);
       
      // 添加图片
      if (null != mail.getPictures()) {
        for (Iterator<Map.Entry<String, String>> it = mail.getPictures().entrySet()
            .iterator(); it.hasNext();) {
          Map.Entry<String, String> entry = it.next();
          String cid = entry.getKey();
          String filePath = entry.getValue();
          if (null == cid || null == filePath) {
            throw new RuntimeException("请确认每张图片的ID和图片地址是否齐全!");
          }
           
          File file = new File(filePath);
          if (!file.exists()) {
            throw new RuntimeException("图片" + filePath + "不存在!");
          }
           
          FileSystemResource img = new FileSystemResource(file);
          messageHelper.addInline(cid, img);
        }
      }
       
      // 添加附件
      if (null != mail.getAttachments()) {
        for (Iterator<Map.Entry<String, String>> it = mail.getAttachments()
            .entrySet().iterator(); it.hasNext();) {
          Map.Entry<String, String> entry = it.next();
          String cid = entry.getKey();
          String filePath = entry.getValue();
          if (null == cid || null == filePath) {
            throw new RuntimeException("请确认每个附件的ID和地址是否齐全!");
          }
           
          File file = new File(filePath);
          if (!file.exists()) {
            throw new RuntimeException("附件" + filePath + "不存在!");
          }
           
          FileSystemResource fileResource = new FileSystemResource(file);
          messageHelper.addAttachment(cid, fileResource);
        }
      }
      messageHelper.setSentDate(new Date());
      // 发送邮件
      javaMailSender.send(message);
      logger.info("------------发送邮件完成----------");
       
    } catch (MessagingException e) {
       
      e.printStackTrace();
    }
  }
 
}
MailModel实体类

package com.support.entity;
 
import java.util.Map;
 
public class MailModel {
   
  /**
   * 发件人邮箱服务器
   */
  private String emailHost;
  /**
   * 发件人邮箱
   */
  private String emailFrom;
 
  /**
   * 发件人用户名
   */
  private String emailUserName;
 
  /**
   * 发件人密码
   */
  private String emailPassword;
 
  /**
   * 收件人邮箱,多个邮箱以“;”分隔
   */
  private String toEmails;
  /**
   * 邮件主题
   */
  private String subject;
  /**
   * 邮件内容
   */
  private String content;
  /**
   * 邮件中的图片,为空时无图片。map中的key为图片ID,value为图片地址
   */
  private Map<String, String> pictures;
  /**
   * 邮件中的附件,为空时无附件。map中的key为附件ID,value为附件地址
   */
  private Map<String, String> attachments;
   
   
  private String fromAddress;//发送人地址1个
   
  private String toAddresses;//接收人地址,可以为很多个,每个地址之间用";"分隔,比方说[email protected];[email protected]
   
  private String[] attachFileNames;//附件 
 
  public String getFromAddress() {
    return fromAddress;
  }
 
  public void setFromAddress(String fromAddress) {
    this.fromAddress = fromAddress;
  }
 
  public String getToAddresses() {
    return toAddresses;
  }
 
  public void setToAddresses(String toAddresses) {
    this.toAddresses = toAddresses;
  }
 
  public String getSubject() {
    return subject;
  }
 
  public void setSubject(String subject) {
    this.subject = subject;
  }
 
  public String getContent() {
    return content;
  }
 
  public void setContent(String content) {
    this.content = content;
  }
 
  public String[] getAttachFileNames() {
    return attachFileNames;
  }
 
  public void setAttachFileNames(String[] attachFileNames) {
    this.attachFileNames = attachFileNames;
  }
 
  public String getEmailHost() {
    return emailHost;
  }
 
  public void setEmailHost(String emailHost) {
    this.emailHost = emailHost;
  }
 
  public String getEmailFrom() {
    return emailFrom;
  }
 
  public void setEmailFrom(String emailFrom) {
    this.emailFrom = emailFrom;
  }
 
  public String getEmailUserName() {
    return emailUserName;
  }
 
  public void setEmailUserName(String emailUserName) {
    this.emailUserName = emailUserName;
  }
 
  public String getEmailPassword() {
    return emailPassword;
  }
 
  public void setEmailPassword(String emailPassword) {
    this.emailPassword = emailPassword;
  }
 
  public String getToEmails() {
    return toEmails;
  }
 
  public void setToEmails(String toEmails) {
    this.toEmails = toEmails;
  }
 
  public Map<String, String> getPictures() {
    return pictures;
  }
 
  public void setPictures(Map<String, String> pictures) {
    this.pictures = pictures;
  }
 
  public Map<String, String> getAttachments() {
    return attachments;
  }
 
  public void setAttachments(Map<String, String> attachments) {
    this.attachments = attachments;
  }
   
   
}


spring.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:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd">
 
   
<!-- 发送邮件 -->
  <bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> 
   <property name="host"> 
   <value>${mail.host}</value> 
   </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>${mail.username}</value> 
   </property> 
   <property name="password"> 
   <value>${mail.password}</value> 
   </property> 
   <property name="defaultEncoding"> 
   <value>UTF-8</value> 
   </property> 
  </bean> 
   
  <bean id="simpleMailMessage" class="org.springframework.mail.SimpleMailMessage">
    <property name="from" value="${mail.from}" />
    <property name="subject" value="${mail.subject}" />
     <property name="to" value="${mail.to}" />
    <!--
    <property name="text" value="邮件内容" />
    -->
  </bean>
</beans>
dev.properties配置
# email configuration
mail.host=smtp.163.com
mail.username=chenyanqing5945
mail.password=123456
 
[email protected]#发件人
[email protected]#收件人(多个用,隔开)
mail.subject=testEmail #主题

原文链接:http://www.cnblogs.com/chenyq/p/5512134.html

猜你喜欢

转载自blog.csdn.net/KuangYeYaZi/article/details/79015415