【问题标题】:Postmark/Guzzle InvalidArgumentException: Invalid resource type: booleanPostmark/Guzzle InvalidArgumentException:无效的资源类型:布尔值
【发布时间】:2016-01-10 03:55:27
【问题描述】:

我不断收到通过邮戳发送的一些电子邮件的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 来处理它。

我似乎正在运行 Guzzle 的“工作”版本。 GitHub Issue #628 for 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"
  },
}

有什么想法吗?

【问题讨论】:

    标签: php guzzle postmark


    【解决方案1】:

    当您的错误不是立即显而易见时,调用 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 并且事情开始工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-24
      • 2019-12-11
      • 2018-08-21
      • 2019-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多