Spring boot 集成JavaMail服务发送邮件

JavaMail是SUN提供给广大Java开发人员的一款邮件发送和接受的一款开源类库,支持常用的邮件协议,如:SMTP、POP3、IMAP,开发人员使用JavaMail编写邮件程序时,不再需要考虑底层的通讯细节如:Socket而是关注在逻辑层面。JavaMail可以发送各种复杂MIME格式的邮件内容,注意JavaMail仅支持JDK4及以上版本。虽然JavaMail是JDK的API但它并没有直接加入JDK中。

实现方法:

一、添加依赖


    org.springframework.boot
    spring-boot-starter-mail

二、添加配置文件(YAML格式)

stmp: 
  host: smtp.163.com
  account: [email protected]
  password: xxxxxxx
mail: 
  smtp: 
    auth: true
    timeout: 25000
multipart:  
  enabled: true  
  max-file-size: 50mb  
  max-request-size: 50mb

三、创建实体类

public class EmailEntity {

	private String receiver;
    private String subject;
    private String text;
    private String content;

    public String getReceiver() {
        return receiver;
    }

    public void setReceiver(String receiver) {
        this.receiver = receiver;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

四、注册Bean

@Component
public class EmailConfig {

	@Value("${stmp.host}")
	private String host;
	@Value("${stmp.account}")
	private String account;
	@Value("${stmp.password}")
	private String password;

	@Value("${mail.smtp.auth}")
	private String isAuth;
	@Value("${mail.smtp.timeout}")
	private String outTime;

	@Bean(name = "JavaMailSenderImpl")
	public JavaMailSenderImpl getMailSender() {
		JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
		javaMailSender.setHost(host);
		javaMailSender.setUsername(account);
		javaMailSender.setPassword(password);
		Properties properties = new Properties();
		properties.put("mail.smtp.auth", isAuth);
		properties.put("mail.smtp.timeout", outTime);
		javaMailSender.setJavaMailProperties(properties);
		return javaMailSender;
	}

	public void sendSimpleMail(EmailEntity email) {
		SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
		simpleMailMessage.setFrom(account);
		String receiver = email.getReceiver();
		String receivers[] = receiver.split(";");
		simpleMailMessage.setTo(receivers);
		simpleMailMessage.setSubject(email.getSubject());
		simpleMailMessage.setText(email.getContent());
		getMailSender().send(simpleMailMessage);
	}

}

五、使用测试

@RestController
@RequestMapping("/api/email")
@Api("发送Email接口")
public class ApiEmailController {
	private static Logger log = LoggerFactory.getLogger(ApiEmailController.class);
	@Autowired
	EmailConfig mc;
	@IgnoreAuth
	@PostMapping("send")
	public void testEmailConfig(){
	    EmailEntity email = new EmailEntity();
	    email.setReceiver("[email protected]");
	    email.setContent("welcome Email Sender");
	    email.setSubject("Spring Boot Java EE Developer");
	    mc.sendSimpleMail(email);
	    log.info("successful to send message!");
	}
}

六、以上已经可以发送简单的邮件消息。如果想要发送比较复杂的邮件,比如:附件,图片等。需要使用MimeMailMessage类实现。这里只需修改注册Bean时候添加这个功能即可,附代码如下:

@Component
public class EmailConfig {

	@Value("${GaH.stmp.host}")
	private String host;
	@Value("${GaH.stmp.account}")
	private String account;
	@Value("${GaH.stmp.password}")
	private String password;

	@Value("${mail.smtp.auth}")
	private String isAuth;
	@Value("${mail.smtp.timeout}")
	private String outTime;

	@Value("${mail.attach.img}")
	private String imgPath;

	@Bean(name = "JavaMailSenderImpl")
	public JavaMailSenderImpl getMailSender() {
		JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
		javaMailSender.setHost(host);
		javaMailSender.setUsername(account);
		javaMailSender.setPassword(password);
		Properties properties = new Properties();
		properties.put("mail.smtp.auth", isAuth);
		properties.put("mail.smtp.timeout", outTime);
		javaMailSender.setJavaMailProperties(properties);
		return javaMailSender;
	}

	public void sendSimpleMail(MyEmail email) {
		SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
		simpleMailMessage.setFrom(account);
		String receiver = email.getReceiver();
		String receivers[] = receiver.split(";");
		simpleMailMessage.setTo(receivers);
		simpleMailMessage.setSubject(email.getSubject());
		simpleMailMessage.setText(email.getContent());
		getMailSender().send(simpleMailMessage);
	}

	public void sendMimeMail(MyEmail email) {
		MimeMessage mimMessage = getMailSender().createMimeMessage();
		try {
			MimeMessageHelper messageHelper = new MimeMessageHelper(mimMessage, true, "utf-8");
			messageHelper.setFrom(account);
			String receiver = email.getReceiver();
			String receivers[] = receiver.split(";");
			messageHelper.setTo(receivers);

			messageHelper.setSubject(email.getSubject());
			messageHelper.setText(email.getContent(), true);// Set the second
															// Param to True
			FileSystemResource res = new FileSystemResource(new File(imgPath));
			messageHelper.addInline("attachFile", res);
			getMailSender().send(mimMessage);
		} catch (MessagingException e) {
			e.printStackTrace();
		}

	}

}

以上就是在SpringBoot项目内是使用JavaMail进行发送简单邮件,如果需要发送HTML内容的邮件修改contentType(MailContentTypeEnum.HTML)然后content("html代码")即可。


你可能感兴趣的:(JAVA,Spring,boot)