MailJet не может отправить с java email: (400 неверных запросов)

#java #mailjet

#java #mailjet

Вопрос:

Я пытаюсь отправить электронное письмо из нашего проекта Java, но каждый раз у меня появляется ошибка кода 400. Итак, я беру тот же запрос, напечатанный в консоли Java, и отправляю его из Postman с теми же другими элементами, затем он работает с Postman, и я получаю электронное письмо, но с Java у меня всегда ошибка кода 400 неверный запрос, и когда я включаю режим отладки Mailjet, содержимое равно нулю.

Вот окончательный JSON, созданный Java и введенный из Postman

 {
    "Messages": [
        {
            "Variables": {
                "objet": " objet",
                "body": " body "
            },
            "From": {
                "Email": "no-reply@gmail.com"
            },
            "To": [
                {
                    "Email": "send@gmail.com",
                    "Name": ""
                }
            ],
            "TemplateID": 111111,
            "TemplateLanguage": true,
            "Subject": "[[data:objet:" anything"]]"
        }
    ]
}
  

Код Java :

 /**
     *  Send a message
     * @return MailjetResponse
     * @throws MailjetException
     * @throws MailjetSocketTimeoutException
     */
    public MailjetRequest sendEmailCore()  {
        return new MailjetRequest(Emailv31.resource)
                .property(Emailv31.MESSAGES, new JSONArray()
                        .put(new JSONObject()
                                .put(Emailv31.Message.FROM, new JSONObject()
                                    .put("Email", senderMail)
                                    .put("Name", senderName))
                                .put(Emailv31.Message.TO, getRecipientsJson())
                                .put(Emailv31.Message.TEMPLATEID, TEMPLATE_ID)
                                .put(Emailv31.Message.TEMPLATELANGUAGE, true)
                                .put(Emailv31.Message.SUBJECT, "[[data:objet:" anything"]]")
                                .put(Emailv31.Message.VARIABLES, new JSONObject()
                                                .put("objet", " objet")
                                                       .put("mailTitle", mailTitle)
                                                .put("body", body))));
    }

    private JSONArray getRecipientsJson(){
        JSONArray json = new JSONArray();
        for (String recipient : recipients) {
            json.put(new JSONObject()
                        .put("Email", recipient)
                        .put("Name", ""));
        }
        return json;
    }

    public MailjetResponse sendLoggedMail() throws Exception {
        MailjetClient client = new MailjetClient(API_KEY_PUBLIC, API_KEY_PRIVATE, new ClientOptions("v3.1"));
        MailjetRequest request = sendEmailCore();
        MailjetResponse response = null;
        try {
            client.setDebug(MailjetClient.VERBOSE_DEBUG);
            log.info(request.getBody());
            response = client.post(request);
        }  catch (final MailjetException | MailjetSocketTimeoutException e) {
        
            log.error("sendLoggedMail", e);
        } 
        return response;
    }
  

Журнал MailJet :

 === HTTP Request ===
POST https://api.mailjet.com/v3.1/send
Accept-Charset:UTF-8
Accept:application/json
user-agent:mailjet-apiv3-java/v4.5.0
Content-Type:application/json
=== HTTP Response ===
Receive url: https://api.mailjet.com/v3.1/send
Status: 400
date:Tue, 01 Sep 2020 08:59:55 GMT
null:HTTP/1.1 400 Bad Request
content-length:177
x-mj-request-guid:0bb2a0ac-849d-4d80-82ed-a10a792e8d19
content-type:application/json; charset=UTF-8
Content:
null
  

Спасибо за вашу помощь.

Ответ №1:

Значение по умолчанию для времени ожидания соединения слишком мало в версии 4.5.0

Вы можете попробовать установить значение в параметрах клиента следующим образом:

 new MailjetClient("public", "secret", new ClientOptions(8000));
  

или просто используйте более новую версию, где установлено значение тайм-аута по умолчанию.

Ответ №2:

У меня такая же проблема с Java Mailjet Client 4.5.0. При понижении версии до версии 4.4.0 этой ошибки нет.