SpringBoot发送邮件通过SendGrid服务平台
一、开通API Keys
二、后台实现
- 加入maven依赖
<dependency>
<groupId>com.sendgrid</groupId>
<artifactId>sendgrid-java</artifactId>
<version>4.7.2</version>
</dependency>
1.yaml配置属性(自定义配置)
2.yaml属性对应配置类SendGridConfig
package com.ruoyi.common.config;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @created: 2021/4/13
* @description:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Component
@ConfigurationProperties(prefix = "send-grid")
public class SendGridConfig
{
private String from;
private String apiKey;
}
3.yaml属性对应配置类SendGridConfig
package com.ruoyi.common.config;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @created: 2021/4/13
* @description:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Component
@ConfigurationProperties(prefix = "send-grid.templateids")
public class SendGridTemplateConfig
{
/**
* 重置密码模板ID
*/
private String resetPwd;
/**
* 驾驶证模板ID
*/
private String driverLicense;
/**
* 安全票模板ID
*/
private String safetyTicket;
/**
* 打卡模板ID
*/
private String timeSheet;
}
4.接口类
package com.ruoyi.common.sendgrid;
import java.util.List;
import java.util.Map;
/**
* @created: 2021/4/13
* @description: 邮件服务平台接口类
*/
public interface SendGridService
{
/**
* 发送到邮件服务平台
* @param templateId 模板ID
* @param params 替换参数
* @param to 收件人
* @return
*/
public boolean sendGridOutLookToXXXMail(String templateId, Map<String, Object> params, List<String> to);
}
5.接口实现类
package com.ruoyi.common.sendgrid.impl;
import com.alibaba.fastjson.JSON;
import com.google.common.base.Throwables;
import com.ruoyi.common.config.SendGridConfig;
import com.ruoyi.common.config.SendGridTemplateConfig;
import com.ruoyi.common.sendgrid.SendGridService;
import com.sendgrid.*;
import com.sendgrid.helpers.mail.objects.Email;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @created: 2021/4/13
* @description:
*/
@Slf4j
@Service
public class SendGridImpl implements SendGridService
{
@Autowired
private SendGridConfig sendGridConfig;
@SneakyThrows
@Override
public boolean sendGridOutLookToXXXMail(String templateId, Map<String, Object> params, List<String> toList)
{
try
{
String from = sendGridConfig.getFrom();
for (String to : toList)
{
//SendGrid 秘钥
String apiKey = sendGridConfig.getApiKey();
SendGrid sg = new SendGrid(apiKey);
Request request = new Request();
request.setMethod(Method.POST);
request.setEndpoint("mail/send");
request.setBody(getEmailContent(from, to, templateId, params));
Response response = sg.api(request);
System.out.println(response.getStatusCode());
System.out.println(response.getBody());
System.out.println(response.getHeaders());
}
return true;
} catch (IOException e)
{
e.printStackTrace();
}
return false;
}
/**
* 组织邮件内容模板
* @param from 发件方
* @param to 收件方
* @param templateId 模板ID
* @param params 参数
* @return
*/
private String getEmailContent(String from, String to, String templateId, Map<String, Object> params){
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("from", new Email(from));
dataMap.put("template_id", templateId);
Map<String, Object> persMap = new HashMap<>();
persMap.put("to", Arrays.asList(new Email(to)));
persMap.put("dynamic_template_data", params);
dataMap.put("personalizations", Arrays.asList(persMap));
return JSON.toJSONString(dataMap);
}
}