#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 этой ошибки нет.