Amazon SES RawMessage:缺少必需的标头'From'

问题描述 投票:0回答:1

use PHPMailer\PHPMailer\PHPMailer;
use Aws\Ses\SesClient;
use Aws\Ses\Exception\SesException;
require 'vendor/autoload.php';

if(!function_exists("sendmailalexraw")){

function sendmailalexraw($email,$subject,$messages,$definesender)
{



// Replace [email protected] with your "From" address. 
// This address must be verified with Amazon SES.
$sender = $definesender;           
$sendername = 'Alex';

// Replace [email protected] with a "To" address. If your account 
// is still in the sandbox, this address must be verified.
$recipient = $email;    

// Specify a configuration set.
$configset = 'ConfigSet';

// Replace us-west-2 with the AWS Region you're using for Amazon SES.
$region = 'eu-west-1'; 

$subject = $subject;

$htmlbody = <<<EOD
<html>
<head></head>
<body>
<h1>Hello!</h1>
<p>Please see the attached file for a list of customers to contact.</p>
</body>
</html>
EOD;

$textbody = <<<EOD
Hello,
Please see the attached file for a list of customers to contact.
EOD;

//// The full path to the file that will be attached to the email. 
$att = 'path/to/customers-to-contact.xlsx';

// Create an SesClient.
$client = SesClient::factory(array(
    'version'=> 'latest',     
    'region' => $region
));

// Create a new PHPMailer object.
$mail = new PHPMailer;

// Add components to the email.
$mail->setFrom($sender, $sendername);
$mail->addAddress($recipient);
$mail->Subject = $subject;
$mail->Body = $htmlbody;
$mail->AltBody = $textbody;
$mail->addAttachment($att);
$mail->addCustomHeader('X-SES-CONFIGURATION-SET', $configset);

// Attempt to assemble the above components into a MIME message.
if (!$mail->preSend()) {
    echo $mail->ErrorInfo;
} else {
    // Create a new variable that contains the MIME message.
    $message = $mail->getSentMIMEMessage();
}

// Try to send the message.
try {
    $result = $client->sendRawEmail([
        'RawMessage' => [
            'Data' => $messages
        ]
    ]);
    // If the message was sent, show the message ID.
    $messageId = $result->get('MessageId');
    echo("Email sent! Message ID: $messageId"."\n");
} catch (SesException $error) {
    // If the message was not sent, show a message explaining what went wrong.
    echo("The email was not sent. Error message: "
         .$error->getAwsErrorMessage()."\n");
}

}
}



$email='[email protected]';
$subject='abc';
$messages='xyz';
$definesender='[email protected]';
sendmailalexraw($email,$subject,$messages,$definesender);


?>


我正在尝试通过Amazon SES发送RawMessage,但我得到了:

未发送电子邮件。错误消息:缺少必需的标头'From'。

我使用的发件人已经过验证,我的Amazon SES已激活(不在sendbox中)。

我需要作为RAW消息发送,以便为我要发送的电子邮件创建退订选项。正如我从文档中读到的那样,它必须是原始电子邮件才能添加此参数。谢谢!

php amazon-web-services amazon-ses
1个回答
0
投票

由于您正在使用AWS Ses,因此可以这样操作:

    define('SENDER', 'Your name<[email protected]>');
    define('RECIPIENT', '[email protected]');
    define('CCLIST', '[email protected]');

    define('REGION','your region');

    define('SUBJECT','Your subject goes here');
    $bodytext = "<h2>Your body goes here.</h2>" . PHP_EOL;
    $bodytext .= "<p>Append as many rows as you want</p>";

    define('BODY',$bodytext);


    $client = SesClient::factory(array(
            'version'=> 'latest',
            'region' => 'your region'
    ));

    $request = array();
    $request['Source'] = SENDER;
    $request['Destination']['ToAddresses'] = array(RECIPIENT);
    $request['Destination']['CcAddresses'] = array(CCLIST);
    $request['Message']['Subject']['Data'] = SUBJECT;
    $request['Message']['Body']['Html']['Data'] = BODY;

    try {
        $result = $client->sendEmail($request);
        $messageId = $result->get('MessageId');
        echo("Email successfully sent! Message ID: $messageId"."\n");

    } catch (Exception $e) {
        echo("The email was not sent. Error message: ");
        echo($e->getMessage()."\n");
    }
© www.soinside.com 2019 - 2024. All rights reserved.