package cc.mrbird.febs.common.utils; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import net.sf.json.JSONObject; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import java.io.IOException; import java.util.Date; import java.util.Map; import java.util.TreeMap; /** * 邮件发送 * * @author wzy * @date 2020-05-27 **/ public class SubMailSend { /** * 时间戳接口配置 */ public static final String TIMESTAMP = "https://api.mysubmail.com/service/timestamp"; /** * API 请求接口配置 */ private static final String URL = "https://api.mysubmail.com/mail/xsend"; public static final String TYPE_MD5 = "md5"; public static final String TYPE_SHA1 = "sha1"; private static final String APP_ID = "16082"; private static final String APP_KEY = "f34c792a1112c16c190ed7190d386c4f"; private static final String FROM = "hibit@submail.hibit.cc"; private static final String SIGN_TYPE = ""; /** * 发送验证码邮件 * * @param to 对象 * @param code 验证码 * @return true or false */ public static boolean sendMail(String to, String code) { JSONObject vars = new JSONObject(); vars.put("code", code); String project = "CVj6P"; return request(vars, project, to); } /** * 发送充值成功邮件 * * @param to 对象 * @param time 成功时间 * @param orderNo 订单编号 * @return true or false */ public static boolean sendRechargeMail(String to, String time, String orderNo) { JSONObject vars = new JSONObject(); vars.put("time", time); vars.put("orderNo", orderNo); String project = "4DvTC2"; return request(vars, project, to); } public static boolean sendWithdrawalMail(String to, String time) { JSONObject vars = new JSONObject(); vars.put("time", time); String project = "e3BO91"; return request(vars, project, to); } private static boolean request(JSONObject vars, String project, String to) { TreeMap requestData = new TreeMap(); requestData.put("appid", APP_ID); requestData.put("project", project); requestData.put("to", to); requestData.put("from", FROM); if (!vars.isEmpty()) { requestData.put("vars", vars.toString()); } MultipartEntityBuilder builder = MultipartEntityBuilder.create(); @SuppressWarnings("deprecation") ContentType contentType = ContentType.create(HTTP.PLAIN_TEXT_TYPE, HTTP.UTF_8); for (Map.Entry entry : requestData.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); if (value instanceof String) { builder.addTextBody(key, String.valueOf(value), contentType); } } if (SIGN_TYPE.equals(TYPE_MD5) || SIGN_TYPE.equals(TYPE_SHA1)) { String timestamp = getTimestamp(); requestData.put("timestamp", timestamp); requestData.put("sign_type", SIGN_TYPE); String signStr = APP_ID + APP_KEY + RequestEncoder.formatRequest(requestData) + APP_ID + APP_KEY; builder.addTextBody("timestamp", timestamp); builder.addTextBody("sign_type", SIGN_TYPE); builder.addTextBody("signature", RequestEncoder.encode(SIGN_TYPE, signStr), contentType); } else { builder.addTextBody("signature", APP_KEY, contentType); } HttpPost httpPost = new HttpPost(URL); httpPost.addHeader("charset", "UTF-8"); httpPost.setEntity(builder.build()); try { CloseableHttpClient closeableHttpClient = HttpClientBuilder.create().build(); HttpResponse response = closeableHttpClient.execute(httpPost); HttpEntity httpEntity = response.getEntity(); if (httpEntity != null) { String jsonStr = EntityUtils.toString(httpEntity, "UTF-8"); if ("success".equals(JSONObject.fromObject(jsonStr).getString("status"))) { return true; } } } catch (IOException e) { e.printStackTrace(); } return false; } /** * 获取时间戳 * * @return */ private static String getTimestamp() { CloseableHttpClient closeableHttpClient = HttpClientBuilder.create().build(); HttpGet httpget = new HttpGet(TIMESTAMP); try { HttpResponse response = closeableHttpClient.execute(httpget); HttpEntity httpEntity = response.getEntity(); String jsonStr = EntityUtils.toString(httpEntity, "UTF-8"); if (jsonStr != null) { JSONObject json = JSONObject.fromObject(jsonStr); return json.getString("timestamp"); } closeableHttpClient.close(); } catch (IOException e) { e.printStackTrace(); } return null; } public static void main(String[] args) { // System.out.println(sendMail("546766039@qq.com", "123456")); System.out.println(sendRechargeMail("546766039@qq.com", DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN), "123456")); } }