阿里云邮件推送服务提供SDK开发包,方便开发人员。本项目提供基于Spring Boot的配置服务,更加简单,方便。
项目地址:Gitee
详细介绍
megrez.boot.autoconfigure.aliyun.ConfigProperties配置属性
@Data
@ConfigurationProperties(prefix = "aliyun.config")
public class ConfigProperties {
// accesskey id
@ToString.Exclude
private String accessKeyId;
// accesskey secret
@ToString.Exclude
private String accessKeySecret;
// security token
private String securityToken;
// http protocol
private String protocol;
// http method
private String method;
// region id
private String regionId;
// read timeout
private Duration readTimeout;
// connect timeout
private Duration connectTimeout;
// http proxy
private String httpProxy;
// https proxy
private String httpsProxy;
// endpoint, 必须的
private String endpoint = "127.0.0.1";
// proxy white list
private String noProxy;
// max idle conns
private Integer maxIdleConns;
// network for endpoint
private String network;
// user agent
private String userAgent;
// suffix for endpoint
private String suffix;
// socks5 proxy
private String socks5Proxy;
// socks5 network
private String socks5NetWork;
// endpoint type
private String endpointType;
// OpenPlatform endpoint
private String openPlatformEndpoint;
// credential type
private String type;
// Signature Version
private String signatureVersion;
// Signature Algorithm
private String signatureAlgorithm;
public Config convert(Config config) {
config.setAccessKeyId(accessKeyId).setAccessKeySecret(accessKeySecret).setSecurityToken(securityToken)
.setProtocol(protocol).setMethod(method).setRegionId(regionId).setReadTimeout(maxIdleConns)
.setConnectTimeout(maxIdleConns)
.setHttpProxy(httpProxy).setHttpsProxy(httpsProxy).setEndpoint(endpoint).setNoProxy(noProxy)
.setMaxIdleConns(maxIdleConns)
.setNetwork(network).setUserAgent(userAgent).setSuffix(suffix).setSocks5Proxy(socks5Proxy)
.setSocks5NetWork(socks5NetWork)
.setEndpointType(endpointType).setOpenPlatformEndpoint(openPlatformEndpoint).setType(endpointType)
.setSignatureVersion(signatureVersion).setSignatureAlgorithm(signatureAlgorithm);
return config;
}
}
megrez.boot.autoconfigure.aliyun.ConfigAutoConfig自动配置
@Slf4j
@RequiredArgsConstructor
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(Config.class)
@EnableConfigurationProperties({ConfigProperties.class})
public class ConfigAutoConfig {
@Bean
public Config config(ConfigProperties properties, ObjectProvider<ConfigConfigurer> configurers) {
log.info("Initializing aliyun config [{}]", properties);
final Config config = properties.convert(new Config());
// 自定义配置处理
configurers.forEach(configurer -> configurer.configure(config));
return config;
}
}
megrez.boot.autoconfigure.aliyun.mail.MailProperties邮件属性,配置有请求参数
@Data
@ConfigurationProperties(prefix = "aliyun.mail")
public class MailProperties {
private RequestParams requestParams = new RequestParams();
@Data
public static class RequestParams {
/** 控制台创建的发信地址, 必须的 */
private String accountName;
/** 0:为随机账号 1:为发信地址 必须的 */
private Integer addressType;
/** 控制台创建的标签 */
private String tagName;
/** 是否启用管理控制台中配置好回信地址 必须的 */
private Boolean replyToAddress;
/** 发信人昵称,长度小于15个字符。 */
private String fromAlias;
/** 开启需要备案,0关闭,1开启 */
private String clickTrace;
}
}
megrez.boot.autoconfigure.aliyun.mail.MailAutoConfig邮件自动配置
@Slf4j
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(Client.class)
@AutoConfigureBefore({ ConfigAutoConfig.class })
@EnableConfigurationProperties({ MailProperties.class })
public class MailAutoConfig {
@Bean
public Client client(Config config) throws Exception {
log.info("Initializing aliyun mail client");
return new Client(config);
}
@Bean
public MailSenderClient mailSenderClient(Client client, MailProperties properties) {
return new MailSenderClient(client, properties);
}
}
megrez.boot.autoconfigure.aliyun.mail.MailSenderClient邮件发送服务
@RequiredArgsConstructor
public class MailSenderClient {
private final Client client;
private final MailProperties properties;
public SingleSendMailResponse singleSendMail(MailSenderMessage message) throws Exception {
if (message == null) {
throw new IllegalArgumentException("MailSenderMessage instance is null");
}
if (CollectionUtils.isEmpty(message.getMailAddresses())) {
throw new IllegalArgumentException("Mail address list is empty");
}
RequestParams params = properties.getRequestParams();
SingleSendMailRequest request = new SingleSendMailRequest();
if (StringUtils.hasText(params.getAccountName())) {
request.setAccountName(params.getAccountName());
}
if (StringUtils.hasText(params.getFromAlias())) {
request.setFromAlias(params.getFromAlias());
}
if (params.getAddressType() != null) {
request.setAddressType(params.getAddressType());
}
if (StringUtils.hasText(params.getTagName())) {
request.setTagName(params.getTagName());
}
if (params.getReplyToAddress() != null) {
request.setReplyToAddress(params.getReplyToAddress());
}
if (StringUtils.hasText(params.getClickTrace())) {
request.setClickTrace(params.getClickTrace());
}
request.setToAddress(String.join(",", message.getMailAddresses()));
request.setSubject(message.getSubject());
if (message.isTextable()) {
request.setTextBody(message.getBody());
} else {
request.setHtmlBody(message.getBody());
}
return client.singleSendMail(request);
}
}
具体的代码请参考项目。
还有更多的项目可以参考,megrez-mail是邮件发送服务支持文本,FreeMarker,Groovy,Thymeleaf,Pug4j邮件模板。提供接口管理模板及发送邮件