发送邮件(163为例)
准备工作,开启邮箱是smtp
点击开启,会得到授权码
pom中引入发邮件对应的sdk
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>>
yml 配置
spring:
#邮件相关配置 以163为例
mail:
host: smtp.163.com # 邮件服务器地址
port: 465 # 端口,通常25, 465(SSL)或者994(SSL)
username: XXXXXX@163.com # 邮箱用户名
password: XXXX # 邮箱授权码,不是登录密码哦
protocol: smtps # 端口25 用smtp不带s
default-encoding: UTF-8
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
邮件发送service封装
import com.kundeyt.machinesell.sellapi.service.EmailService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Service;
import java.util.Objects;
/**
* @author : LuJiang
* {@code @create} 4/9 009 11:11
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class EmailServiceImpl implements EmailService {
private final JavaMailSender mailSender;
@Override
public void sendTextEmail(String to, String subject, String text) {
try {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(Objects.requireNonNull(((JavaMailSenderImpl) mailSender).getUsername()));
message.setTo(to);
message.setSubject(subject);
message.setText(text);
mailSender.send(message);
} catch (Exception e) {
//邮件发送失败,业务正常走,记录日志
log.warn("邮件发送失败: \n邮件主题:{},\n收件人:{},\n邮件内容:{},\n失败原因:{}", subject, to, text , e.getMessage());
}
}
//自定义寄件人名称
@Override
public void sendTextEmailAsync(String to, String subject, String text) {
try {
MimeMessage mimeMessage = mailSender.createMimeMessage();
mimeMessage.setFrom(new InternetAddress(Objects.requireNonNull(((JavaMailSenderImpl) mailSender).getUsername()), "寄件人名称"));
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setTo(to); // 收件人邮箱
helper.setSubject(subject); // 邮件主题
helper.setText(text, true); // 邮件正文
mailSender.send(mimeMessage);
log.info("\n邮件发送成功: \n邮件主题:{},\n收件人:{},\n邮件内容:{}", subject, to, text);
} catch (Exception e) {
//邮件发送失败,业务正常走,记录日志
log.warn("\n邮件发送失败: \n邮件主题:{},\n收件人:{},\n邮件内容:{},\n失败原因:{}", subject, to, text , e.getMessage());
}
}
}
阿里云发送短信
pom中引入发邮件对应的sdk
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>2.0.24</version>
</dependency>
yml配置
kd:
#短信服务地址
sms:
accessKeyId: XXXXX #阿里云key
accessKeySecret: XXXXX #阿里密匙
endpoint: dysmsapi.aliyuncs.com
regionId: default
signName: XXXX #签名
配置
@Data
@ConfigurationProperties(prefix = "kd.sms")
public class AliYunSmsProperties {
private String accessKeyId;
private String accessKeySecret;
private String endpoint;
private String regionId;
private String signName;
}
/**
* @author : LuJiang
* {@code @create} 4/9 009 14:53
*/
@Configuration
@EnableConfigurationProperties({AliYunSmsProperties.class})
@AllArgsConstructor
public class AliYunSmsConfig {
private final AliYunSmsProperties aliYunSmsProperties;
@Bean
public Client createClient() throws Exception {
Config config = new Config()
.setAccessKeyId(aliYunSmsProperties.getAccessKeyId())
.setAccessKeySecret(aliYunSmsProperties.getAccessKeySecret())
.setEndpoint(aliYunSmsProperties.getEndpoint());
return new Client(config);
}
}
短信发送服务封装
import cn.hutool.json.JSONUtil;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendBatchSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendBatchSmsResponse;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teautil.models.RuntimeOptions;
import com.kundeyt.machinesell.sellapi.config.sms.AliYunSmsProperties;
import com.kundeyt.machinesell.sellapi.service.AliYunSmsService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author lujiang
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class AliYunSmsServiceImpl implements AliYunSmsService {
private final Client client;
private final AliYunSmsProperties aliYunSmsProperties;
@Override
public void sendSms(String phoneNumber, String templateCode, Map<String, Object> templateParam) {
sendSms(phoneNumber, templateCode, JSONUtil.toJsonStr(templateParam));
}
@Override
public void sendSms(String phoneNumber, String templateCode, String templateParam) {
try {
SendSmsRequest request = new SendSmsRequest();
request.setPhoneNumbers(phoneNumber);
request.setSignName(aliYunSmsProperties.getSignName());
request.setTemplateCode(templateCode);
request.setTemplateParam(templateParam);
SendSmsResponse response = client.sendSmsWithOptions(request, new RuntimeOptions());
if ("OK".equals(response.getBody().code)) {
log.info("发送短信成功,收信人:{},短信模板:{},模板变量:{}", phoneNumber, templateCode, templateParam);
} else {
log.warn("发送短信失败,收信人:{},短信模板:{},模板变量:{},原因:{}",
phoneNumber, templateCode, templateParam, response.getBody().message);
}
} catch (Exception e) {
log.warn("发送短信失败,收信人:{},短信模板:{},模板变量:{},原因:{}",
phoneNumber, templateCode, templateParam, e.getMessage());
}
}
@Override
public void batchSendSms(List<String> phoneNumbers, String templateCode, List<Map<String, Object>> templateParams) {
try {
List<String> signNames = new ArrayList<>(phoneNumbers.size());
for (int i = 0; i < phoneNumbers.size(); i++) {
signNames.add(aliYunSmsProperties.getSignName());
}
SendBatchSmsRequest sendBatchSmsRequest = new SendBatchSmsRequest();
sendBatchSmsRequest.setPhoneNumberJson(JSONUtil.toJsonStr(phoneNumbers));
sendBatchSmsRequest.setSignNameJson(JSONUtil.toJsonStr(signNames));
sendBatchSmsRequest.setTemplateCode(templateCode);
sendBatchSmsRequest.setTemplateParamJson(JSONUtil.toJsonStr(templateParams));
SendBatchSmsResponse response = client.sendBatchSmsWithOptions(sendBatchSmsRequest, new RuntimeOptions());
if ("OK".equals(response.getBody().code)) {
log.info("发送短信成功,收信人:{},短信模板:{},模板变量:{}", phoneNumbers, templateCode, templateParams);
} else {
log.warn("发送短信失败,收信人:{},短信模板:{},模板变量:{},原因:{}",
String.join(",", phoneNumbers), templateCode, templateParams, response.getBody().message);
}
} catch (Exception e) {
log.warn("发送短信失败,收信人:{},短信模板:{},模板变量:{},原因:{}",
String.join(",", phoneNumbers), templateCode, templateParams, e.getMessage());
}
}
}