PHP Amazon SES v3 - 缺失必要的邮件头 'From'

6

我需要将我的PHP Amazon SES API从v2版本升级到v3版本。在v2版本中正常工作的相同代码在v3版本中无法正常工作。

以下是代码:

//Send the message (which must be base 64 encoded):
$ses = new SesClient([
    'credentials' => new Credentials(
        $this->connection->getUsername(),
        $this->connection->getPassword()
    ),
    'region' => $this->connection->getServer(),
    'version' => '2010-12-01'
]);

// the body message generated by PHP Mailer:
$message = 
    "Date: Tue, 6 Sep 2016 16:46:35 -0300\n" . 
    "To: some@email.com\n" . 
    "From: my_registered_email@at.amazon.com\n" . 
    "Reply-To: my_registered_email@at.amazon.com\n" . 
    "Subject: Email Subject\n" . 
    "Message-ID: <3a1db7d5ae6b610cab5898f0be4a00a3@machine-id>\n" . 
    "X-Mailer: PHPMailer 5.2.16 (https://github.com/PHPMailer/PHPMailer)\n" . 
    "MIME-Version: 1.0\n" . 
    "Content-Type: multipart/alternative;\n" . 
    "        boundary=\"b1_3a1db7d5ae6b610cab5898f0be4a00a3\"\n" . 
    "Content-Transfer-Encoding: 8bit\n" . 
    "\n" . 
    "This is a multi-part message in MIME format.\n" . 
    "\n" . 
    "--b1_3a1db7d5ae6b610cab5898f0be4a00a3\n" . 
    "Content-Type: text/plain; charset=us-ascii\n" . 
    "\n" . 
    "html text bodyOK\n" . 
    "\n" . 
    "\n" . 
    "--b1_3a1db7d5ae6b610cab5898f0be4a00a3\n" . 
    "Content-Type: text/html; charset=us-ascii\n" . 
    "\n" . 
    "<h1>html text body</h1>OK\n" . 
    "\n" . 
    "\n" . 
    "\n" . 
    "--b1_3a1db7d5ae6b610cab5898f0be4a00a3--\n";

$ses->sendRawEmail(
    [
        'RawMessage' => [
            'Data' => base64_encode($message),
        ]
    ]
);

当我运行代码时,出现了错误:
PHP Fatal error:  Uncaught exception 'Aws\Ses\Exception\SesException' with message 'Error executing "SendRawEmail" on "https://email.us-east-1.amazonaws.com"; AWS HTTP error: Client error: `POST https://email.us-east-1.amazonaws.com` resulted in a `400 Bad Request` response:
<ErrorResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
  <Error>
    <Type>Sender</Type>
    <Code>InvalidParameterValue (client): Missing required header 'From'. - <ErrorResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
  <Error>
    <Type>Sender</Type>
    <Code>InvalidParameterValue</Code>
    <Message>Missing required header 'From'.</Message>
  </Error>
  <RequestId>9ea0eaa9-746a-11e6-a6cb-21af912ef7d9</RequestId>
</ErrorResponse>
'

但是这段代码可以在API v2中正常运行。

这里出了什么问题?


可能与此无关,但是电子邮件头的正确行分隔符是\r\n,而不是\n。也许旧的SDK过于“热心”了? - Michael - sqlbot
嘿,Michael,我尝试使用分隔符\r\n而不仅仅是\n,但是我收到了相同的消息。 - Joao M
1个回答

17

我深入研究了AWS SDK源代码,发现我不需要对消息进行编码。

因此,我删除了base64_encode函数,现在一切都正常了!

最终代码如下:

(...)
$ses->sendRawEmail(
    [
        'RawMessage' => [
            'Data' => $message,  // <-- Removed base64_encode from here
        ]
    ]
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接