Commit 77d8eae8 by zhangxingmin

修复

parent 4ca6b316
...@@ -7,6 +7,7 @@ import com.yd.email.feign.client.ApiEmailSenderConfigFeignClient; ...@@ -7,6 +7,7 @@ import com.yd.email.feign.client.ApiEmailSenderConfigFeignClient;
import com.yd.email.feign.request.ApiEmailSenderConfigAddRequest; import com.yd.email.feign.request.ApiEmailSenderConfigAddRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigEditRequest; import com.yd.email.feign.request.ApiEmailSenderConfigEditRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigPageRequest; 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.ApiEmailSenderConfigDetailResponse;
import com.yd.email.feign.response.ApiEmailSenderConfigPageResponse; import com.yd.email.feign.response.ApiEmailSenderConfigPageResponse;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -77,4 +78,12 @@ public class ApiEmailSenderConfigController implements ApiEmailSenderConfigFeign ...@@ -77,4 +78,12 @@ public class ApiEmailSenderConfigController implements ApiEmailSenderConfigFeign
public Result del(String senderBizId) { public Result del(String senderBizId) {
return apiEmailSenderConfigService.del(senderBizId); return apiEmailSenderConfigService.del(senderBizId);
} }
/**
* 验证发件人邮箱配置(测试连接)
*/
@Override
public Result validateEmailConfig(ApiEmailSenderValidateRequest request) {
return apiEmailSenderConfigService.validateEmailConfig(request);
}
} }
...@@ -97,7 +97,7 @@ public class EmailSendJobHandler { ...@@ -97,7 +97,7 @@ public class EmailSendJobHandler {
try { try {
// 添加发送间隔,避免频率过高 // 添加发送间隔,避免频率过高
if (successCount > 0) { if (successCount > 0) {
Thread.sleep(2000); // 2秒间隔 Thread.sleep(1000); // 1秒间隔
} }
// 处理抄送人列表:将数据库中的逗号分隔字符串转换为List // 处理抄送人列表:将数据库中的逗号分隔字符串转换为List
List<String> ccEmailList = StringUtils.isNotBlank(recipient.getCcEmail()) ? 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; ...@@ -6,6 +6,7 @@ import com.yd.email.feign.dto.ApiEmailSenderConfigDto;
import com.yd.email.feign.request.ApiEmailSenderConfigAddRequest; import com.yd.email.feign.request.ApiEmailSenderConfigAddRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigEditRequest; import com.yd.email.feign.request.ApiEmailSenderConfigEditRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigPageRequest; 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.ApiEmailSenderConfigDetailResponse;
import com.yd.email.feign.response.ApiEmailSenderConfigPageResponse; import com.yd.email.feign.response.ApiEmailSenderConfigPageResponse;
...@@ -22,4 +23,6 @@ public interface ApiEmailSenderConfigService { ...@@ -22,4 +23,6 @@ public interface ApiEmailSenderConfigService {
Result del(String senderBizId); Result del(String senderBizId);
Result<ApiEmailSenderConfigDto> getApiEmailSenderConfigDto(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 { ...@@ -126,7 +126,7 @@ public class ApiEmailSendServiceImpl implements ApiEmailSendService {
log.info("遍历所有收件人,逐个发送邮件->recipient单个对象:{}",JSON.toJSONString(recipient)); log.info("遍历所有收件人,逐个发送邮件->recipient单个对象:{}",JSON.toJSONString(recipient));
// 添加发送间隔,避免频率过高 // 添加发送间隔,避免频率过高
if (successCount > 0) { if (successCount > 0) {
Thread.sleep(2000); // 2秒间隔 Thread.sleep(1000); // 1秒间隔
} }
// 处理抄送人列表:将数据库中的逗号分隔字符串转换为List // 处理抄送人列表:将数据库中的逗号分隔字符串转换为List
......
...@@ -7,12 +7,14 @@ import com.yd.common.enums.ResultCode; ...@@ -7,12 +7,14 @@ import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException; import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result; import com.yd.common.result.Result;
import com.yd.common.utils.RandomStringGenerator; 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.ApiEmailProviderConfigService;
import com.yd.email.api.service.ApiEmailSenderConfigService; import com.yd.email.api.service.ApiEmailSenderConfigService;
import com.yd.email.feign.dto.ApiEmailSenderConfigDto; import com.yd.email.feign.dto.ApiEmailSenderConfigDto;
import com.yd.email.feign.request.ApiEmailSenderConfigAddRequest; import com.yd.email.feign.request.ApiEmailSenderConfigAddRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigEditRequest; import com.yd.email.feign.request.ApiEmailSenderConfigEditRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigPageRequest; 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.ApiEmailSenderConfigDetailResponse;
import com.yd.email.feign.response.ApiEmailSenderConfigPageResponse; import com.yd.email.feign.response.ApiEmailSenderConfigPageResponse;
import com.yd.email.service.dto.EmailSenderConfigDto; import com.yd.email.service.dto.EmailSenderConfigDto;
...@@ -40,6 +42,9 @@ public class ApiEmailSenderConfigServiceImpl implements ApiEmailSenderConfigServ ...@@ -40,6 +42,9 @@ public class ApiEmailSenderConfigServiceImpl implements ApiEmailSenderConfigServ
@Autowired @Autowired
private ApiEmailProviderConfigService apiEmailProviderConfigService; private ApiEmailProviderConfigService apiEmailProviderConfigService;
@Autowired
private ApiEmailConfigValidatorService apiEmailConfigValidatorService;
/** /**
* 分页查询-发件人 * 分页查询-发件人
* @param request * @param request
...@@ -60,7 +65,10 @@ public class ApiEmailSenderConfigServiceImpl implements ApiEmailSenderConfigServ ...@@ -60,7 +65,10 @@ public class ApiEmailSenderConfigServiceImpl implements ApiEmailSenderConfigServ
@Override @Override
public Result add(ApiEmailSenderConfigAddRequest request) { 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() List<EmailSenderConfig> list = iEmailSenderConfigService.queryList(EmailSenderConfigDto.builder()
.email(request.getEmail()) .email(request.getEmail())
...@@ -90,7 +98,10 @@ public class ApiEmailSenderConfigServiceImpl implements ApiEmailSenderConfigServ ...@@ -90,7 +98,10 @@ public class ApiEmailSenderConfigServiceImpl implements ApiEmailSenderConfigServ
EmailSenderConfig emailSenderConfig = result.getData(); EmailSenderConfig emailSenderConfig = result.getData();
Long id = emailSenderConfig.getId(); 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() List<EmailSenderConfig> list = iEmailSenderConfigService.queryList(EmailSenderConfigDto.builder()
.email(request.getEmail()) .email(request.getEmail())
...@@ -166,6 +177,18 @@ public class ApiEmailSenderConfigServiceImpl implements ApiEmailSenderConfigServ ...@@ -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 * @param senderBizId
* @return * @return
......
...@@ -5,11 +5,16 @@ import com.yd.email.feign.fallback.ApiEmailSenderConfigFeignFallbackFactory; ...@@ -5,11 +5,16 @@ import com.yd.email.feign.fallback.ApiEmailSenderConfigFeignFallbackFactory;
import com.yd.email.feign.request.ApiEmailSenderConfigAddRequest; import com.yd.email.feign.request.ApiEmailSenderConfigAddRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigEditRequest; import com.yd.email.feign.request.ApiEmailSenderConfigEditRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigPageRequest; 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.ApiEmailSenderConfigDetailResponse;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.Map;
/** /**
* 邮箱服务-发件人配置信息Feign客户端 * 邮箱服务-发件人配置信息Feign客户端
*/ */
...@@ -55,4 +60,10 @@ public interface ApiEmailSenderConfigFeignClient { ...@@ -55,4 +60,10 @@ public interface ApiEmailSenderConfigFeignClient {
*/ */
@DeleteMapping("/del") @DeleteMapping("/del")
Result del(@RequestParam(value = "senderBizId") String senderBizId); 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; ...@@ -5,6 +5,7 @@ import com.yd.email.feign.client.ApiEmailSenderConfigFeignClient;
import com.yd.email.feign.request.ApiEmailSenderConfigAddRequest; import com.yd.email.feign.request.ApiEmailSenderConfigAddRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigEditRequest; import com.yd.email.feign.request.ApiEmailSenderConfigEditRequest;
import com.yd.email.feign.request.ApiEmailSenderConfigPageRequest; 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.ApiEmailSenderConfigDetailResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.cloud.openfeign.FallbackFactory;
...@@ -44,6 +45,11 @@ public class ApiEmailSenderConfigFeignFallbackFactory implements FallbackFactory ...@@ -44,6 +45,11 @@ public class ApiEmailSenderConfigFeignFallbackFactory implements FallbackFactory
public Result del(String senderBizId) { public Result del(String senderBizId) {
return null; return null;
} }
@Override
public Result validateEmailConfig(ApiEmailSenderValidateRequest request) {
return null;
}
}; };
} }
} }
...@@ -24,4 +24,8 @@ public class ApiEmailSenderConfigPageRequest extends PageDto { ...@@ -24,4 +24,8 @@ public class ApiEmailSenderConfigPageRequest extends PageDto {
*/ */
private String providerName; 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 { ...@@ -61,6 +61,12 @@ public class EmailProviderConfig implements Serializable {
private Integer sslEnabled; private Integer sslEnabled;
/** /**
* 是否启用TLS加密传输: 0-否, 1-是 默认1
*/
@TableField("starttls_enabled")
private Integer starttlsEnable;
/**
* 配置描述 * 配置描述
*/ */
@TableField("description") @TableField("description")
......
...@@ -13,11 +13,15 @@ ...@@ -13,11 +13,15 @@
</if> </if>
<if test="request.email != null and request.email != ''"> <if test="request.email != null and request.email != ''">
and esc.email = #{request.email} and esc.email like concat('%', #{request.email}, '%')
</if> </if>
<if test="request.providerName != null and request.providerName != ''"> <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> </if>
and esc.is_deleted = 0 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