java发送邮件,短信

发送邮件(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());
        }
    }
    
}
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值