前言
参考阿里云官方文档
邮件服务配置
1. 配置域名
在邮件推送控制台创建一个子域名,如果没有主域名,请自行购买。
例:若您的主域名是aliyun.com,您可以使用xxx.aliyun.com,'xxx’部分是您自定义的。注意:后续截图都以xxx.aliyun.com为例,请替换为自己的域名。
2. 获取记录值
进入路径:邮件推送控制台—-发信域名—-配置;
该页数据会在域名解析时需要使用。
3. 在域名提供商处配置域名解析
添加Step2对应的4条记录,结果类似
4. 创建发信地址
创建发信地址,请按需选择类型,不可乱用通道:
触发邮件:由事件触发的邮件,如注册通知、交易通知、验证找密等系统通知邮件。
批量邮件:发送给会员的订阅邮件,如产品推广、用户关怀、期刊资讯等邮件。
若无回信地址,可置空。
5. 控制台发信
若少量发信可使用控制台发信方式,请提交模板审核,上传收件人列表,审核后即可开始发信。
6. 新建子用户并授权
为邮件推送服务这个权限,创建一个具有该权限的子用户,将不同子用户的权限分离,方便管理。
创建子用户
在RAM访问控制的页面,新建一个用户,进行邮件推送服务的授权,然后获取其accessKeyId和accessKeySecret。
授权
搜索并选择邮件推送权限,这里已经添加过了。
OK啦
代码
1. 引入依赖
在要进行配置的模块中引入以下依赖
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dm20151123</artifactId>
<version>1.0.5</version>
<scope>compile</scope>
</dependency>
2. 添加配置
mail:
# 你的accessKeyId
accessKeyId:
# 你的accessKeySecret
accessKeySecret:
# 账号,即发信地址
accountName:
# accountName的类型,0为随机账号,1为发信地址
addressType: 1
# 别名
fromAlias:
# 邮件主题
subject:
3. 添加邮件配置类
-
注意,这里必须要有非静态的
setter
方法,可以使用@Data
注解,也可以手动添加。
注意,非静态!即set
方法不能有static
关键字。
否则, 配置文件中的值获取不到哦~ -
注意关注引入的依赖哦~
package com.ruoyi.common.config;
import com.aliyun.dm20151123.Client;
import com.aliyun.teaopenapi.models.Config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "mail")
public class MailConfig {
/**
* AccessKey ID
*/
private static String accessKeyId;
/**
* AccessKey Secret
*/
private static String accessKeySecret;
/**
* 发信地址
*/
private static String accountName;
/**
* 发信地址类型
*/
private static Integer addressType;
/**
* 发信人昵称
*/
private static String fromAlias;
/**
* 邮件主题
*/
private static String subject;
/**
* 使用AK&SK初始化账号Client
* @return Client
* @throws Exception
*/
public static Client createClient() throws Exception {
Config config = new Config()
.setAccessKeyId(accessKeyId)
.setAccessKeySecret(accessKeySecret);
// 服务地址
config.endpoint = "dm.aliyuncs.com";
return new Client(config);
}
public static String getAccessKeyId() {
return accessKeyId;
}
public void setAccessKeyId(String accessKeyId) {
MailConfig.accessKeyId = accessKeyId;
}
public static String getAccessKeySecret() {
return accessKeySecret;
}
public void setAccessKeySecret(String accessKeySecret) {
MailConfig.accessKeySecret = accessKeySecret;
}
public static String getAccountName() {
return accountName;
}
public void setAccountName(String accountName) {
MailConfig.accountName = accountName;
}
public static Integer getAddressType() {
return addressType;
}
public void setAddressType(Integer addressType) {
MailConfig.addressType = addressType;
}
public static String getFromAlias() {
return fromAlias;
}
public void setFromAlias(String fromAlias) {
MailConfig.fromAlias = fromAlias;
}
public static String getSubject() {
return subject;
}
public void setSubject(String subject) {
MailConfig.subject = subject;
}
}
4. 发信
注意一下引入的依赖哦~
import com.aliyun.dm20151123.Client;
import com.aliyun.dm20151123.models.SingleSendMailRequest;
import com.aliyun.dm20151123.models.SingleSendMailResponse;
import com.aliyun.teautil.Common;
public static void sendEmail(String toAddress) {
if (StringUtils.isEmpty(toAddress))
return false;
// Client
try {
Client client = MailConfig.createClient();
SingleSendMailRequest singleSendMailRequest = new SingleSendMailRequest()
.setAccountName(MailConfig.getAccountName())
.setFromAlias(MailConfig.getFromAlias())
.setAddressType(MailConfig.getAddressType())
.setTagName(MailConfig.getTagName())
.setSubject(MailConfig.getSubject())
.setHtmlBody(html)
.setToAddress(toAddress)
.setReplyAddress("")
.setReplyToAddress(false);
SingleSendMailResponse response = client.singleSendMail(singleSendMailRequest);
System.out.println(Common.toJSONString(response));
} catch (Exception e) {
throw new RuntimeException(e);
}
}