2011-02-28 12 views
2

Je veux configurer un service de messagerie asynchrone via le service de courrier électronique simple amazone, mais j'ai quelques gros problèmes:Obtenir une erreur 403 en essayant de configurer AMAZON SES

new Ajax.Request('https://email.us-east-1.amazonaws.com/?Action=SendEmail&[email protected]&[email protected]&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"]}, 

j'ai une erreur 403 si i » Je me demande ce qui s'est passé d'Amazon. La date est gmdate('D, d M Y H:i:s e') et est correcte. Signature viennent de

Pourriez-vous m'aider s'il vous plaît. J'apprécie vraiment que vous posiez des exemples.

Répondre

3

Je contourne enfin le problème.

Voici le code:

$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&[email protected]&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)); 
    } 

... i exécuter ce code derrière une action de bouton javascript fournissant une forme

5

Si vous tirez parti de la AWS SDK for PHP pour gérer tous les détails de bas niveau comme la demande signature, cette fonction va accomplir ce que vous essayez de faire.

<?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 
} 
?> 
Questions connexes