Получение ошибки 403 при попытке настроить AMAZON SES - PullRequest
1 голос
/ 28 февраля 2011

Я хочу настроить асинхронную почтовую службу с помощью простой почтовой службы amazon, но у меня есть большие проблемы:

new Ajax.Request('https://email.us-east-1.amazonaws.com/?Action=SendEmail&Source=myemail@domain.com&Destination.ToAddresses.member.1=mydestination@domain.com&Message.Subject.Data=This%20is%20the%20subject%20line.&Message.Body.Text.Data=Hello.%20I%20hope%20you%20are%20having%20a%20good%20day.',
    {
   method: 'get',
   requestHeaders: {"Date": +res["result"]["date"],
                    "X-Amzn-Authorization":"AWS3-HTTPS",
                    "AWSAccessKeyId":"myaccesskey",
                    "SignatureMethod":"mysignature"
                    "Signature":+res["result"]["auth"]},

У меня ошибка 403, поэтому мне интересно, что случилось с Амазонкой.

Дата gmdate('D, d M Y H:i:s e') и является правильной. Подпись от hash_hmac('sha256', $date, 'exampleofsignature', false));

Не могли бы вы помочь мне, пожалуйста. Я очень ценю, что вы публикуете примеры.

Ответы [ 2 ]

5 голосов
/ 02 марта 2011

Если вы используете AWS SDK для PHP для обработки всех низкоуровневых деталей, таких как подписание запроса, эта функция выполнит то, что вы пытаетесь сделать.

<?php
/**
 * Send a plain-text email using Amazon SES.
 *
 * @link http://docs.amazonwebservices.com/AWSSDKforPHP/latest/#m=AmazonSES/send_email AmazonSES::send_email()
 * @param string|array $to (Required) The email address(es) to send to. Accepts a string for one, or an array for multiple.
 * @param string $from (Required) The email address of the sender.
 * @param string $subject (Required) The subject of the email. US-ASCII characters only!
 * @param string $message (Required) The plain-text email to send. US-ASCII characters only!
 * @return boolean Whether the request was successful or not.
 */
function send_text_email($to, $from, $subject, $message)
{
    $email = new AmazonSES(AWS_KEY, AWS_SECRET_KEY);
    $response = $email->send_email($from, //Source (aka From)
        array('ToAddresses' => $to), // Destination (aka To)
        array( // Message (short form)
            'Subject.Data' => $subject,
            'Body.Text.Data' => $message
        )
    );
    return $response->isOK(); // boolean
}
?>
3 голосов
/ 01 марта 2011

я наконец обошёл проблему.

Вот код:

$headers = array();
    $headers[]= "X-Amzn-Authorization: AWS3-HTTPS AWSAccessKeyId=XXXXXXXXXXXXXX, Algorithm=HmacSHA256, Signature=".$auth;
    $headers[]= "Date: ".$date;
    $curl = curl_init('https://email.us-east-1.amazonaws.com/?Action=SendEmail&Source=contact@enterprise.com&Destination.ToAddresses.member.1='.$contact['email'].'&Message.Subject.Data='.rawurlencode($subject).'&Message.Body.Text.Data='.rawurlencode($body));
      curl_setopt($curl, CURLOPT_USERAGENT, 'anUserAgent');
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_HEADER, false);
      curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    if (curl_exec($curl)) {
      S('log')->debug(curl_getinfo($curl, CURLINFO_HTTP_CODE));
    } else {
      S('log')->debug(curl_error($curl));
    }

... я выполняю этот код за действием кнопки JavaScript, предоставляя форму

...