springboot项目发送简单邮件

添加依赖

 <!-- 邮件所需依赖 -->
	<dependency>
   	 <groupId>org.springframework.boot</groupId>
  	  <artifactId>spring-boot-starter-mail</artifactId>
  </dependency> 
 <!-- Spring Boot Freemarker 依赖,发送HTML格式的邮件的方式 -->
 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>        
 </dependency>

编写定时器

import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.dangdang.elasticjob.lite.annotation.ElasticSimpleJob;
import lombok.extern.slf4j.Slf4j;
import net.yto.basesrv.api.service.MailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
*项目中使用定时器,每隔两分钟执行代码
*/

@ElasticSimpleJob(cron="0  0/2 * * * ?",jobName="getOrderDetailsTask",shardingTotalCount=1,jobParameter="参	数",shardingItemParameters="0=C")
@Component
@Slf4j
public class testTask implements SimpleJob{

@Autowired
private MailService mailService;

@Override
public void execute(ShardingContext arg0) {
    log.info("定时任务开始:");
    try {
        mailService.sendSimpleMail();
    } catch (Exception e) {
        log.error("定时器出错");
    }
}

}

properties文件配置

##邮件系统
#启用邮件运行状况检查。
management.health.mail.enabled = false

# 设置邮箱主机
spring.mail.host = mail.yto.net.cn
spring.mail.jndi-name = 
spring.mail.port = 25
spring.mail.username = 
spring.mail.password = 

#设置是否需要认证,如果为true,那么用户名和密码就必须的,
#如果设置false,可以不设置用户名和密码,当然也得看你的对接的平台是否支持无密码进行访问的。
spring.mail.properties.mail.smtp.auth = true

# STARTTLS[1]  是对纯文本通信协议的扩展。它提供一种方式将纯文本连接升级为加密连接(TLS或SSL),而不是另外使用一个端口作加密通信。
spring.mail.properties.mail.smtp.starttls.enable = false
spring.mail.properties.mail.smtp.starttls.required = false
#模板文件后缀
spring.freemarker.suffix = .ftl
spring.freemarker.enabled = true
spring.freemarker.cache = false
spring.freemarker.charset = UTF-8
spring.freemarker.content-type = text/html
spring.freemarker.allow-request-override = false
#是否需要检查模板路径是否存在
spring.freemarker.check-template-location = true
spring.freemarker.expose-request-attributes = false
spring.freemarker.expose-session-attributes = false
spring.freemarker.expose-spring-macro-helpers = false

发送简单邮件

	@Value("${spring.mail.username}")
	private String from;
	
	@Autowired
	private JavaMailSender mailSender; 
	
	@Override
	public boolean sendSimpleMail() throws Exception {
	
	MimeMessage message = null;
	boolean flag = true;
	
	try {
		message = mailSender.createMimeMessage();
		MimeMessageHelper helper = new MimeMessageHelper(message, true);
		helper.setFrom(from);
		helper.setTo("[email protected]");
		helper.setSubject("邮件主题");
		helper.setText("内容");
		mailSender.send(message);
	} catch (Exception e) {
		flag = false;
		log.error("系统异常邮件发送异常:{}", e);
		e.printStackTrace();
	}
	return flag;
}

遇到问题:

	553 Mail from must equal authorized user

原因:

由于在做邮件发送时,登录用户(properties文件中配置的用户名密码)和发信人必须一致;而在测试时我登录用户的邮箱是163邮箱,发信人邮箱是QQ邮箱,导致报错

发送带附件的邮件

public void sendAttachmentsEmail() throws Exception {
	try {
		//这个是javax.mail.internet.MimeMessage下的,不要搞错了。
		MimeMessage mimeMessage = mailSender.createMimeMessage();
		MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
		
		//基本设置.
		helper.setFrom(from);//发送者.
		helper.setTo("[email protected]");//接收者.
		helper.setSubject("测试附件(邮件主题)");//邮件主题.
		helper.setText("这是邮件内容(有附件哦.)");//邮件内容.
		//org.springframework.core.io.FileSystemResource下的:
		
		//附件1,获取文件对象.
		FileSystemResource file1 = new FileSystemResource(newFile("D:/test/head/head.jpg"));
	
		//添加附件,这里第一个参数是在邮件中显示的名称,也可以直接是head.jpg,但是一定要有文件后缀,不然就无法显示图片了。
		helper.addAttachment("头像1.jpg", file1);
		mailSender.send(mimeMessage);
	} catch (Exception e) {
		e.printStackTrace();
	}

在这里插入图片描述

发送内嵌静态资源的邮件

内嵌图片,给定一个CID值即可,增加附件,使用MimeMessageHelper的addAttachment即可现在一般不会做内嵌图片,因为这样邮件会很大,容易对服务器造成压力,一般做法是使用图片链接。

	@Override
	public void sendInlineMail() throws Exception {
	MimeMessage mimeMessage = mailSender.createMimeMessage();
	MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
	//基本设置.
	helper.setFrom(from);//发送者.
	helper.setTo("[email protected]");//接收者.
	helper.setSubject("测试静态资源(邮件主题)");//邮件主题.
	// 邮件内容,第二个参数指定发送的是HTML格式
	
	//说明:嵌入图片<img src='cid:head'/>,其中cid:是固定的写法,而aaa是一个contentId。
	helper.setText("<body>这是图片:<img src='cid:head' /></body>", true);
	FileSystemResource file = new FileSystemResource(newFile("D:/test/head/head.jpg"));
	
	helper.addInline("head",file);
	
	mailSender.send(mimeMessage);
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_39248420/article/details/88993707