Postmark / Guzzle InvalidArgumentException: неверный тип ресурса: логический

Я продолжаю получать InvalidArgumentException: Invalid resource type: boolean из некоторых писем, отправляемых через почтовую марку. Некоторые работают, другие нет. Я не вижу ничего отличного между электронными письмами, которые работают, и теми, которые имеют ошибки. Они запускают один и тот же код с одинаковыми параметрами.

Вот что я передаю в Postmark:

$client = new PostmarkClient($config->postmark->token);
$sendResult = $client->sendEmail(
$config->postmark->sender,
$recipient,
$subject,
$html_body,
$text_body,
null, true, null, null, null, null, $attachments
);

Вот стек вызовов:

vendor/guzzlehttp/streams/src/Stream.php in factory at line 85
throw new \InvalidArgumentException('Invalid resource type: ' . $type);

vendor/guzzlehttp/guzzle/src/Message/MessageFactory.php in applyOptions at line 345
$request->setBody(Stream::factory(json_encode($value)));

vendor/guzzlehttp/guzzle/src/Message/MessageFactory.php in createRequest at line 98
$this->applyOptions($request, $options);

vendor/guzzlehttp/guzzle/src/Client.php in createRequest at line 120
return $this->messageFactory->createRequest($method, $url, $options);

vendor/wildbit/postmark-php/src/Postmark/PostmarkClientBase.php in processRestRequest at line 101
$request = $client->createRequest($method, $url, $options);

vendor/wildbit/postmark-php/src/Postmark/PostmarkClient.php in sendEmail at line 61
return new DynamicResponseModel($this->processRestRequest('POST', '/email', $body));

library/send_mail.php in send_mail at line 86

Я гуглил некоторое время и не нашел ничего, чтобы понять это.

Я посмотрел здесь:
https://laracasts.com/discuss/channels/general-discussion/mandrill-trouble-invalid-resource-type-boolean
и здесь:
https://laracasts.com/forum/?p=2325-problems-using-mandrill/0 но у обоих были проблемы с Laravel + Mandrill, но я использую Postmark, а не фреймворк. У нас, однако, есть общие черты. В обоих этих постах говорилось, что они справились с этим путем обновления или переустановки своего Guzzle.

Кажется, я запускаю «рабочую» версию Guzzle. GitHub Issue # 628 для Guzzle кажется, именно то, что я вижу, но эта проблема говорит, что это было исправлено в 4.0.2, я на Guzzle 5.3:

От моего composer.lock на сервере:

{
"name": "guzzlehttp/guzzle",
"version": "5.3.0"},
...
{
"name": "guzzlehttp/streams",
"version": "3.0.0"},
...
{
"name": "wildbit/postmark-php",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/wildbit/postmark-php",
"reference": "2eabc627c3f2a693b986e51d2f892cc2e2d065b3"},
"require": {
"guzzlehttp/guzzle": "~5.1",
"php": ">=5.4.0"},
}

Какие-нибудь мысли?

1

Решение

Если ваша ошибка не сразу очевидна, то call stak обычно проливает свет на то, что происходит не так. Это не исключение, и я должен был заметить это раньше.

Второй, последний элемент в стеке вызовов — это то, где это пошло плохо.

$request->setBody(Stream::factory(json_encode($value)));

Вот, json_encode($value) возвращает логическое значение. С помощью json_last_error() Я смог определить, что проблема была в смешанной кодировке символов (JSON_ERROR_UTF8).

Где-то в пользовательском вводе были предоставленные пользователем данные, представляющие собой смесь UTF-8 и ISO-8895-1. Поскольку это было противоречиво, некоторые электронные письма работали бы просто отлично, в то время как другие терпели неудачу.

Я заставил себя $html_body а также $text_body быть UTF-8 и все начало работать.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]