Commit 77d8eae8 by zhangxingmin

修复

parent 4ca6b316
......@@ -7,6 +7,7 @@ import com.yd.email.feign.client.ApiEmailSenderConfigFeignClient;
import com.yd.email.feign.request.ApiEmailSenderConfigAddRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigEditRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigPageRequest;
import com.yd.email.feign.request.ApiEmailSenderValidateRequest;
import com.yd.email.feign.response.ApiEmailSenderConfigDetailResponse;
import com.yd.email.feign.response.ApiEmailSenderConfigPageResponse;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -77,4 +78,12 @@ public class ApiEmailSenderConfigController implements ApiEmailSenderConfigFeign
public Result del(String senderBizId) {
return apiEmailSenderConfigService.del(senderBizId);
}
/**
* 验证发件人邮箱配置(测试连接)
*/
@Override
public Result validateEmailConfig(ApiEmailSenderValidateRequest request) {
return apiEmailSenderConfigService.validateEmailConfig(request);
}
}
......@@ -97,7 +97,7 @@ public class EmailSendJobHandler {
try {
// 添加发送间隔,避免频率过高
if (successCount > 0) {
Thread.sleep(2000); // 2秒间隔
Thread.sleep(1000); // 1秒间隔
}
// 处理抄送人列表:将数据库中的逗号分隔字符串转换为List
List<String> ccEmailList = StringUtils.isNotBlank(recipient.getCcEmail()) ?
......
package com.yd.email.api.service;
import com.yd.common.result.Result;
import com.yd.email.service.model.EmailProviderConfig;
public interface ApiEmailConfigValidatorService {
Result testSmtpConnection(String email, String password,
EmailProviderConfig config);
}
......@@ -6,6 +6,7 @@ import com.yd.email.feign.dto.ApiEmailSenderConfigDto;
import com.yd.email.feign.request.ApiEmailSenderConfigAddRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigEditRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigPageRequest;
import com.yd.email.feign.request.ApiEmailSenderValidateRequest;
import com.yd.email.feign.response.ApiEmailSenderConfigDetailResponse;
import com.yd.email.feign.response.ApiEmailSenderConfigPageResponse;
......@@ -22,4 +23,6 @@ public interface ApiEmailSenderConfigService {
Result del(String senderBizId);
Result<ApiEmailSenderConfigDto> getApiEmailSenderConfigDto(String senderBizId);
Result validateEmailConfig(ApiEmailSenderValidateRequest request);
}
package com.yd.email.api.service.impl;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import com.yd.email.api.service.ApiEmailConfigValidatorService;
import com.yd.email.service.model.EmailProviderConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.mail.AuthenticationFailedException;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import java.util.Properties;
/**
* 验证发件人邮箱配置的合法性
*/
@Slf4j
@Service
public class ApiEmailConfigValidatorServiceImpl implements ApiEmailConfigValidatorService {
/**
* 测试SMTP连接
* @param email
* @param password
* @param config
* @return
*/
@Override
public Result testSmtpConnection(String email, String password,
EmailProviderConfig config) {
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", config.getStarttlsEnable() == 1 ? "true" : "false");
props.put("mail.smtp.host", config.getSmtpHost());
props.put("mail.smtp.port", config.getSmtpPort());
props.put("mail.smtp.connectiontimeout", "10000");
props.put("mail.smtp.timeout", "15000");
// SSL配置
if ("465".equals(config.getSmtpPort())) {
props.put("mail.smtp.socketFactory.port", config.getSmtpPort());
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
}
Session session = Session.getInstance(props);
try {
Transport transport = session.getTransport("smtp");
transport.connect(config.getSmtpHost(), email, password);
boolean isConnected = transport.isConnected();
transport.close();
if (isConnected) {
return Result.success("验证成功");
} else {
throw new BusinessException("SMTP连接测试失败");
}
} catch (AuthenticationFailedException e) {
throw new BusinessException("认证失败:请检查邮箱地址和授权码是否正确");
} catch (MessagingException e) {
throw new BusinessException("连接失败"+ e.getMessage());
}
}
/**
* 邮箱格式验证
* @param email
* @return
*/
private boolean isValidEmailFormat(String email) {
String emailRegex = "^[A-Za-z0-9+_.-]+@(.+)$";
return email != null && email.matches(emailRegex);
}
}
\ No newline at end of file
......@@ -126,7 +126,7 @@ public class ApiEmailSendServiceImpl implements ApiEmailSendService {
log.info("遍历所有收件人,逐个发送邮件->recipient单个对象:{}",JSON.toJSONString(recipient));
// 添加发送间隔,避免频率过高
if (successCount > 0) {
Thread.sleep(2000); // 2秒间隔
Thread.sleep(1000); // 1秒间隔
}
// 处理抄送人列表:将数据库中的逗号分隔字符串转换为List
......
......@@ -7,12 +7,14 @@ import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import com.yd.common.utils.RandomStringGenerator;
import com.yd.email.api.service.ApiEmailConfigValidatorService;
import com.yd.email.api.service.ApiEmailProviderConfigService;
import com.yd.email.api.service.ApiEmailSenderConfigService;
import com.yd.email.feign.dto.ApiEmailSenderConfigDto;
import com.yd.email.feign.request.ApiEmailSenderConfigAddRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigEditRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigPageRequest;
import com.yd.email.feign.request.ApiEmailSenderValidateRequest;
import com.yd.email.feign.response.ApiEmailSenderConfigDetailResponse;
import com.yd.email.feign.response.ApiEmailSenderConfigPageResponse;
import com.yd.email.service.dto.EmailSenderConfigDto;
......@@ -40,6 +42,9 @@ public class ApiEmailSenderConfigServiceImpl implements ApiEmailSenderConfigServ
@Autowired
private ApiEmailProviderConfigService apiEmailProviderConfigService;
@Autowired
private ApiEmailConfigValidatorService apiEmailConfigValidatorService;
/**
* 分页查询-发件人
* @param request
......@@ -60,7 +65,10 @@ public class ApiEmailSenderConfigServiceImpl implements ApiEmailSenderConfigServ
@Override
public Result add(ApiEmailSenderConfigAddRequest request) {
//校验邮箱服务商是否存在
apiEmailProviderConfigService.checkEmailProviderConfigIsExist(request.getProviderBizId());
Result<EmailProviderConfig> result = apiEmailProviderConfigService.checkEmailProviderConfigIsExist(request.getProviderBizId());
EmailProviderConfig emailProviderConfig = result.getData();
//测试SMTP连接,验证发件人邮箱配置的有效性(包括授权码有效性)
apiEmailConfigValidatorService.testSmtpConnection(request.getEmail(),request.getPassword(),emailProviderConfig);
//校验邮箱名称唯一性
List<EmailSenderConfig> list = iEmailSenderConfigService.queryList(EmailSenderConfigDto.builder()
.email(request.getEmail())
......@@ -90,7 +98,10 @@ public class ApiEmailSenderConfigServiceImpl implements ApiEmailSenderConfigServ
EmailSenderConfig emailSenderConfig = result.getData();
Long id = emailSenderConfig.getId();
//校验邮箱服务商是否存在
apiEmailProviderConfigService.checkEmailProviderConfigIsExist(request.getProviderBizId());
Result<EmailProviderConfig> result1 = apiEmailProviderConfigService.checkEmailProviderConfigIsExist(request.getProviderBizId());
EmailProviderConfig emailProviderConfig = result1.getData();
//测试SMTP连接,验证发件人邮箱配置的有效性(包括授权码有效性)
apiEmailConfigValidatorService.testSmtpConnection(request.getEmail(),request.getPassword(),emailProviderConfig);
//校验邮箱名称唯一性
List<EmailSenderConfig> list = iEmailSenderConfigService.queryList(EmailSenderConfigDto.builder()
.email(request.getEmail())
......@@ -166,6 +177,18 @@ public class ApiEmailSenderConfigServiceImpl implements ApiEmailSenderConfigServ
}
/**
* 验证发件人邮箱配置
*/
@Override
public Result validateEmailConfig(ApiEmailSenderValidateRequest request) {
//校验邮箱服务商是否存在
Result<EmailProviderConfig> result = apiEmailProviderConfigService.checkEmailProviderConfigIsExist(request.getProviderBizId());
EmailProviderConfig emailProviderConfig = result.getData();
Result result1 = apiEmailConfigValidatorService.testSmtpConnection(request.getEmail(),request.getPassword(),emailProviderConfig);
return result1;
}
/**
* 校验邮件发件人是否存在
* @param senderBizId
* @return
......
......@@ -5,11 +5,16 @@ import com.yd.email.feign.fallback.ApiEmailSenderConfigFeignFallbackFactory;
import com.yd.email.feign.request.ApiEmailSenderConfigAddRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigEditRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigPageRequest;
import com.yd.email.feign.request.ApiEmailSenderValidateRequest;
import com.yd.email.feign.response.ApiEmailSenderConfigDetailResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.Map;
/**
* 邮箱服务-发件人配置信息Feign客户端
*/
......@@ -55,4 +60,10 @@ public interface ApiEmailSenderConfigFeignClient {
*/
@DeleteMapping("/del")
Result del(@RequestParam(value = "senderBizId") String senderBizId);
/**
* 验证发件人邮箱配置(测试连接)
*/
@PostMapping("/validate")
Result validateEmailConfig(@Validated @RequestBody ApiEmailSenderValidateRequest request);
}
......@@ -5,6 +5,7 @@ import com.yd.email.feign.client.ApiEmailSenderConfigFeignClient;
import com.yd.email.feign.request.ApiEmailSenderConfigAddRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigEditRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigPageRequest;
import com.yd.email.feign.request.ApiEmailSenderValidateRequest;
import com.yd.email.feign.response.ApiEmailSenderConfigDetailResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
......@@ -44,6 +45,11 @@ public class ApiEmailSenderConfigFeignFallbackFactory implements FallbackFactory
public Result del(String senderBizId) {
return null;
}
@Override
public Result validateEmailConfig(ApiEmailSenderValidateRequest request) {
return null;
}
};
}
}
......@@ -24,4 +24,8 @@ public class ApiEmailSenderConfigPageRequest extends PageDto {
*/
private String providerName;
/**
* 查询内容(模糊搜索邮箱或者发件人姓名)
*/
private String queryContent;
}
package com.yd.email.feign.request;
import lombok.Data;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
@Data
public class ApiEmailSenderValidateRequest {
/**
* 邮箱地址
*/
@NotBlank(message = "邮箱地址不能为空")
@Email(message = "邮箱格式不正确")
private String email;
/**
* 邮箱密码或授权码
*/
@NotBlank(message = "邮箱密码或授权码不能为空")
private String password;
/**
* 绑定的邮箱服务商唯一业务ID
*/
@NotBlank(message = "绑定的邮箱服务商唯一业务ID不能为空")
private String providerBizId;
}
......@@ -61,6 +61,12 @@ public class EmailProviderConfig implements Serializable {
private Integer sslEnabled;
/**
* 是否启用TLS加密传输: 0-否, 1-是 默认1
*/
@TableField("starttls_enabled")
private Integer starttlsEnable;
/**
* 配置描述
*/
@TableField("description")
......
......@@ -13,11 +13,15 @@
</if>
<if test="request.email != null and request.email != ''">
and esc.email = #{request.email}
and esc.email like concat('%', #{request.email}, '%')
</if>
<if test="request.providerName != null and request.providerName != ''">
and epc.provider_name = #{request.providerName}
and epc.provider_name like concat('%', #{request.providerName}, '%')
</if>
<if test="request.queryContent != null and request.queryContent != ''">
and (esc.display_name like concat('%', #{request.queryContent}, '%') or esc.email like concat('%', #{request.queryContent}, '%'))
</if>
and esc.is_deleted = 0
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment