2016-09-06 31 views
3

PHP Amazon SES APIをバージョンv2からバージョンv3にアップグレードする必要があります。私がv2で作業していたのと同じコードは、v3では動作しません。PHP Amazon SES v3 - Missing Required Header 'From'

コード従ってください:

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ので働いていた:私は、私はエラーを得たコードを実行すると

//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: [email protected]\n" . 
    "From: [email protected]\n" . 
    "Reply-To: [email protected]\n" . 
    "Subject: Email Subject\n" . 
    "Message-ID: <[email protected]>\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), 
     ] 
    ] 
); 

を。

ここで何が間違っていますか?

+0

はおそらく無関係が、([電子メールヘッダの正しい行区切り文字は、 '\ Rの\のN'ではなく '\ N'である] http://stackoverflow.com/:

最終的なコードでありますA/4415687/1695906)。おそらく、古いSDKはあまりにも「役に立っていますか? –

+0

ちょっとマイケル、私は区切り記号\ r \ nを使用するようにトライしました\ nしかし、私は同じメッセージを持っていました。 –

答えて

10

私はAWS SDKのソースコードを掘り下げました。メッセージをエンコードする必要はありません。

私はbase64_encode関数を削除しました。

(...) 
$ses->sendRawEmail(
    [ 
     'RawMessage' => [ 
      'Data' => $message, // <-- Removed base64_encode from here 
     ] 
    ] 
); 
関連する問題