Question

J'utilise AWS SDK PHP. J'ai le code ci-dessous pour envoyer un e-mail en utilisant SES:

$ses = new AmazonSES(...);
$response =  $ses->send_email('ubuntu@localhost', 
            array('ToAddresses' => 'myemail@somedomain.com'), 
            array( 
                'Subject.Data' => 'My Test message',
                'Body.Text.Data' => 'my message'
            )
        );

Assez simple, non? Mais je reçois l'erreur suivante de l'AWS SDK lui-même:

Undefined index: body

sdk.class.php(828)

// Normalize JSON input
828         if ($query['body'] === '[]')
829         {
830             $query['body'] = '';
831         }

Mon accès AWS et les clés secrètes sont correctes, puisque je suis en mesure d'utiliser S3. Qu'est-ce que je manque ici?

EDIT: Je vérifiais une adresse e-mail différente sur @ gmail.com, et utilisé que comme adresse à la place. Je toujours couru dans le bogue rapporté d'origine. J'ai eu aucun problème à l'aide de la bibliothèque tierce partie je l'ai mentionné cependant.

Était-ce utile?

La solution

Mise à jour: Ce bogue est maintenant corrigé! S'il vous plaît télécharger la dernière version.

Cela semble être un bug confirmé dans le SDK Amazon. Voir le lien ci-dessous ...

https://forums.aws.amazon.com/thread.jspa?messageID=231411

Pour autant que je peux dire, il n'y a pas de patch pour ce encore. Je suppose que vous pouvez patcher vous en utilisant isset (). Voilà ce que je l'ai fait, et il semble fonctionner maintenant. Encore une fois, ceci est un bogue dans sdk.class.php en ligne 828. Je ne me sens pas comme faire un fichier correctif en ce moment. Voici ce que je l'ai fait au code, mais ...

// Normalize JSON input
if (!isset($query['body']) || $query['body'] === '[]')
{
    $query['body'] = '';
}

Encore une fois, pas un patch officiel, mais il vous permet d'aller sur votre chemin heureux.

Autres conseils

Je suppose que vous avez besoin d'une adresse e-mail non-privée qui ubuntu@localhost est manifestement pas.

(modifier) ??également de la documentation que vous devez vérifier que vous êtes le propriétaire de ladite adresse e-mail, que vous pouvez clairement pas faire avec ubuntu@localhost.

Adresse e-mail de vérification

Avant de pouvoir envoyer votre première message, Amazon SES exige que vous vérifier votre adresse e-mail. Est de confirmer que vous possédez l'e-mail adresse, et d'empêcher les autres de l'utiliser.

http://docs.amazonwebservices.com/ es / latest / DeveloperGuide / index.html? InitialSetup.EmailVerification.html

Voici comment je le fais sans le SDK:

<?php

error_reporting(E_ALL);
ini_set('display_errors','On');

// AMAZON PARAMETERS
$sAccess = 'YOUR-ACCESS-KEY-GOES-HERE';
$sSecret = 'YOUR-SECRET-KEY-GOES-HERE';
$sURL = 'https://email.us-east-1.amazonaws.com/'; // may be subject to change!
$nVerifyHost = 1; // may need to set either of these to 0 on some hosting plans
$nVerifyPeer = 1;

// OUR TEST MESSAGE
$sTo = 'you@example.com'; // must request production mode in AWS SES Console
$sFrom = 'sender@example.com'; // must verify the sender in the AWS SES Console
$sSubject = 'Hello, World!';
$sMessage = <<<EOD
<p>This is para 1.</p>

<p>This is para 2.</p>

<p>Regards,<br>
<b>Management</b></p>
EOD;

// SEND THE MESSAGE
$sDate = gmdate('D, d M Y H:i:s e');
$sSig = base64_encode(hash_hmac('sha256', $sDate, $sSecret, TRUE));
$asHeaders = array();
$asHeaders[] = 'Date: ' .  $sDate;
$asHeaders[] = 'X-Amzn-Authorization: AWS3-HTTPS AWSAccessKeyId=' . $sAccess . 
  ',Algorithm=HmacSHA256,Signature=' . $sSig;
$asHeaders[] = 'Content-Type: application/x-www-form-urlencoded';
$sText = $sMessage;
$sText = str_replace("\r\n",'',$sText);
$sText = str_replace("\r",'',$sText);
$sText = str_replace("\n",'',$sText);
$sText = str_replace("\t",'  ',$sText);
$sText = str_replace('<BR />','<br />',$sText);
$sText = str_replace('<BR/>','<br />',$sText);
$sText = str_replace('<BR>','<br />',$sText);
$sText = str_replace('</P>','</p>',$sText);
$sText = str_replace('</p>',"</p>\n\n",$sText);
$sText = str_replace('<br />',"<br />\n",$sText);
$sText = strip_tags($sText);
$asQuery = array(
  'Action' => 'SendEmail',
  'Destination.ToAddresses.member.1' => $sTo,
  'Source' => $sFrom,
  'Message.Subject.Data' => $sSubject,
  'Message.Body.Text.Data' => $sText,
  'Message.Body.Html.Data' => $sMessage
);
$sQuery = http_build_query($asQuery);

$hCurl = curl_init();
curl_setopt($hCurl, CURLOPT_SSL_VERIFYHOST, $nVerifyHost);
curl_setopt($hCurl, CURLOPT_SSL_VERIFYPEER, $nVerifyPeer);
curl_setopt($hCurl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($hCurl, CURLOPT_POSTFIELDS, $sQuery);
curl_setopt($hCurl, CURLOPT_HTTPHEADER, $asHeaders);
curl_setopt($hCurl, CURLOPT_HEADER, 0);
curl_setopt($hCurl, CURLOPT_URL, $sURL);
curl_setopt($hCurl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($hCurl, CURLOPT_FOLLOWLOCATION, 1);

$asResult = array('code'=>'','error'=>'');
if (curl_exec($hCurl)) {
  $asResult['code'] = curl_getinfo($hCurl, CURLINFO_HTTP_CODE);
} else {
  $asResult['error'] = array (
    'code' => curl_errno($hCurl),
    'message' => curl_error($hCurl),
  );
}
@curl_close($hCurl);
print_r($asResult);

Cela peut être un bug dans le SDK Amazon. Ce ne serait pas la première fois.

J'ai plutôt choisi d'utiliser une excellente bibliothèque tierce partie:

https://github.com/kierangraham/php-ses

Et sa documentation: http://www.orderingdisorder.com/aws/ses/

fonctionne comme un charme.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top