package com.yami.trading.service.impl;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.yami.trading.common.manager.email.EmailMessage;
|
import com.yami.trading.common.util.PropertiesUtil;
|
import com.yami.trading.service.InternalEmailSenderService;
|
import okhttp3.*;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.InitializingBean;
|
import org.springframework.stereotype.Service;
|
|
import javax.net.ssl.*;
|
import java.io.IOException;
|
import java.security.SecureRandom;
|
import java.security.cert.CertificateException;
|
import java.security.cert.X509Certificate;
|
import java.util.HashMap;
|
import java.util.Map;
|
import java.util.concurrent.TimeUnit;
|
|
@Service
|
public class InternalEmailSenderServiceImpl implements InternalEmailSenderService, InitializingBean {
|
private static final Logger logger = LoggerFactory.getLogger(InternalEmailSenderServiceImpl.class);
|
|
private OkHttpClient client;
|
private static final String API_URL = "https://www.aoksend.com/index/api/send_email";
|
private static final String APP_KEY = "c3affa4607524cb619ca0368e4f93c24";
|
|
@Override
|
public void afterPropertiesSet() {
|
// 创建信任所有证书的 OkHttpClient
|
this.client = createUnsafeOkHttpClient();
|
logger.info("OkHttpClient 初始化完成,已禁用 SSL 证书验证");
|
}
|
|
/**
|
* 创建信任所有证书的 OkHttpClient
|
*/
|
private OkHttpClient createUnsafeOkHttpClient() {
|
try {
|
// 创建信任所有证书的 TrustManager
|
final TrustManager[] trustAllCerts = new TrustManager[] {
|
new X509TrustManager() {
|
@Override
|
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
|
}
|
|
@Override
|
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
|
}
|
|
@Override
|
public X509Certificate[] getAcceptedIssuers() {
|
return new X509Certificate[]{};
|
}
|
}
|
};
|
|
// 创建 SSLContext 并使用信任所有证书的 TrustManager
|
final SSLContext sslContext = SSLContext.getInstance("TLS");
|
sslContext.init(null, trustAllCerts, new SecureRandom());
|
|
// 创建 SSLSocketFactory
|
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
|
|
// 构建 OkHttpClient
|
OkHttpClient.Builder builder = new OkHttpClient.Builder();
|
builder.sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0]);
|
builder.hostnameVerifier((hostname, session) -> true); // 信任所有主机名
|
|
// 设置超时
|
builder.connectTimeout(30, TimeUnit.SECONDS);
|
builder.readTimeout(30, TimeUnit.SECONDS);
|
builder.writeTimeout(30, TimeUnit.SECONDS);
|
|
return builder.build();
|
} catch (Exception e) {
|
logger.error("创建 OkHttpClient 失败", e);
|
throw new RuntimeException(e);
|
}
|
}
|
|
@Override
|
public void send(EmailMessage emailMessage) {
|
// 验证邮件信息数据的有效性
|
if (emailMessage == null || emailMessage.getTomail() == null || emailMessage.getContent() == null) {
|
logger.error("无效的邮件信息数据。");
|
return;
|
}
|
|
try {
|
logger.info("----- 开始发送邮件 -----");
|
logger.info("发送邮件到: {}, 内容: {}", emailMessage.getTomail(), emailMessage.getContent());
|
|
// 构建请求数据
|
ObjectMapper objectMapper = new ObjectMapper();
|
Map<String, String> dataMap = new HashMap<>();
|
dataMap.put("code", emailMessage.getContent());
|
|
String json = objectMapper.writeValueAsString(dataMap);
|
|
// 构建请求体
|
RequestBody body = RequestBody.create(
|
json, MediaType.parse("application/json; charset=utf-8")
|
);
|
|
// 构建请求 URL
|
HttpUrl url = HttpUrl.parse(API_URL).newBuilder()
|
.addQueryParameter("app_key", APP_KEY)
|
.addQueryParameter("template_id", "E_132497205418")
|
.addQueryParameter("to", emailMessage.getTomail())
|
.addQueryParameter("data", json)
|
.build();
|
|
// 构建请求
|
Request request = new Request.Builder()
|
.url(url)
|
.post(body)
|
.addHeader("app_key", APP_KEY)
|
.addHeader("Content-Type", "application/json")
|
.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36")
|
.build();
|
|
// 执行请求
|
try (Response response = client.newCall(request).execute()) {
|
if (!response.isSuccessful()) {
|
logger.error("邮件发送失败。HTTP 响应码: {}, 错误信息: {}", response.code(), response.message());
|
if (response.body() != null) {
|
logger.error("错误响应体: {}", response.body().string());
|
}
|
return;
|
}
|
|
String responseBody = response.body() != null ? response.body().string() : "空响应";
|
logger.info("----- 邮件发送成功 -----");
|
logger.info("响应内容: {}", responseBody);
|
}
|
|
} catch (IOException e) {
|
logger.error("邮件发送失败【IOException】", e);
|
} catch (Exception e) {
|
logger.error("邮件发送失败【Exception】", e);
|
}
|
}
|
|
public static void main(String[] args) {
|
// 创建服务实例并初始化
|
InternalEmailSenderServiceImpl service = new InternalEmailSenderServiceImpl();
|
service.afterPropertiesSet();
|
|
// 测试发送邮件
|
EmailMessage emailMessage = new EmailMessage();
|
emailMessage.setTomail("ljdbo813@justdefinition.com");
|
emailMessage.setContent("11111");
|
|
service.send(emailMessage);
|
}
|
}
|