| 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<String, Object> requestData = new TreeMap<String, Object>(); | 
|         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<String, Object> 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")); | 
|     } | 
| } |