[Megrez Boot] starter-aliyun-mail

阿里云邮件推送服务提供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邮件模板。提供接口管理模板及发送邮件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值