新版仿ok交易所-后端
1
zj
2025-10-26 70f9c0146dca26deb1ea6f73db8f57bbdf28ef90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
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);
    }
}