当前位置: 首页 > 知识库问答 >
问题:

亚马逊大量发送电子邮件

白浩气
2023-03-14

我试图通过亚马逊SES设置一个电子邮件队列,以确保我可以同时发送多封电子邮件(每秒限制为14封电子邮件)。

我总是收到错误的信号

电子邮件未发送。错误消息:在上执行“发送电子邮件”时出错https://email.us-west-2.amazonaws.com"; AWS HTTP错误:客户端错误:POSThttps://email.us-west-2.amazonaws.com导致了一个403禁止的响应:发件人签名o(截断…)签名desnotmatch(客户端):我们计算的请求签名与您提供的签名不匹配。检查您的AWS秘密访问密钥和签名方法。有关详细信息,请参阅维修文档。此请求的规范字符串应为“POST/aws sdk调用id:4d2929e4b7ca73cfe9370d1b848d398d aws sdk重试:0/0主机:email.us-west-2.amazonaws.com x-amz-date:20170311T01541Z aws sdk调用id;aws sdk重试;主办x-amz-date 486B4C1288D7C5717C3A0BCCDAF10F67EB02CA5DA8FBFED75298E98E8F7805048'要签名的字符串应该是'AWS4-HMAC-SHA256 20170311T01541Z 20170311/us-west-2/email/AWS4_请求CE02F756D98AB45AB63754FD6EC64A6621C36ED802316FF22C2C8735925735'-发件人签名与我们计算的请求签名不匹配签名与签名不匹配你提供的。检查您的AWS秘密访问密钥和签名方法。有关详细信息,请参阅维修文档。此请求的规范字符串应为“POST/aws sdk调用id:4d2929e4b7ca73cfe9370d1b848d398d aws sdk重试:0/0主机:email.us-west-2.amazonaws.com x-amz-date:20170311T01541Z aws sdk调用id;aws sdk重试;主办x-amz-date 486B4C1288D7C5717C3A0BCCDAF10F67EB02CA5DA8FBFED75298E98E8F7805048“要签名的字符串应该是”AWS4-HMAC-SHA256 20170311T01541Z 20170311/us-west-2/email/AWS4_请求CE02F756D98AB45AB63754FD6EC64A6621C36ED802316FF22C28735925735“028b5fb9-0609-11e7-956D5EC2EC3C18”

我在stackoverflow上尝试了其他解决方案,但没有成功。

PHP代码:

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

// aws.amazon.com/code/
// docs.aws.amazon.com/ses/latest/DeveloperGuide/send-using-sdk-php.html
// Replace path_to_sdk_inclusion with the path to the SDK as described in 
// docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/basic-usage.html
define('REQUIRED_FILE','aws/aws-autoloader.php');

// Replace sender@example.com with your "From" address. 
// This address must be verified with Amazon SES.
define('SENDER', 'no-reply@mydomain.com');

// Replace recipient@example.com with a "To" address. If your account 
// is still in the sandbox, this address must be verified.
define('RECIPIENT', 'admin@mydomain.com');

// Replace us-west-2 with the AWS region you're using for Amazon SES.
define('REGION','us-west-2');

define('SUBJECT','Amazon SES test (AWS SDK for PHP)');
define('BODY','This email was sent with Amazon SES using the AWS SDK for PHP.');


require REQUIRED_FILE;

use Aws\Ses\SesClient;

$client = SesClient::factory(array(
    'version'=> 'latest',
    'region' => REGION,
    'credentials' => array(
        'key' => 'xxxx',
        'secret'  => 'xxxx',
    )
));

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

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

} catch (Exception $e) {
    echo("The email was not sent. Error message: ");
    echo($e->getMessage()."\n");
}

如果你能帮忙,你会让我开心的。

共有1个答案

别俊誉
2023-03-14

AWS SES BULK发送库

AWS SDK V3文档

安装

第一步<代码>创建Composer.json

{“require”:{“aws/aws sdk php”:“3.*}}

步骤2.编写器安装

AWS SDK V2文档

安装

此代码将用于使用SES AWS SDK版本3进行一对一发送。希望这能奏效。要通过AWS SES发送多封电子邮件,请使用此库AWS SES批量电子邮件发送

<?php

$sesClient = Aws\Ses\SesClient::factory(array(
            'credentials' => array(
                'key' => $accessKey,
                'secret' => $secretKey,
            ),
            "region" => "us-east-1",
            "version" => "2010-12-01"
        ));

$mail = new PHPMailer_PHPMailer();
$mail->CharSet = "UTF-8";
$mail->AddAddress($receiverEmail);
$mail->setFrom($senderEmail, $senderName);
$mail->Subject = $subject;
$mail->preSend();
$mime = $mail->getSentMIMEMessage();
try
{
    $response = $sesClient->sendRawEmail(array("RawMessage" => array("Data" => $mime)));
    $MessageId = $response->get("MessageId");
    $metaData = $response->get("@metadata");
    if (!empty($MessageId))
    {
        $sent[]=$MessageId;
        $sent[]=$metaData["headers"]['x-amzn-requestid'];
    }
} catch (Exception $ex)
{
    echo $response = $ex->getMessage();
    $xmlResponse = explode('<Code>', $response);
    $parsedResponse = explode('</Code>', $xmlResponse[2]);
    $failed[]=$parsedResponse[0];
}
 类似资料:
  • 我试图使用与这里完全相同的代码:https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-using-smtp-java.html我更改了。但是我不能发送电子邮件。这两封电子邮件都已添加并验证了Amazon SES。 我正在使用邮件依赖项: 日志: 问题在哪里?

  • 我正在尝试使用Amazon SES发送电子邮件。我在地区工作过,刚刚把我的地区切换到,我无法向我的个人gmail账户发送电子邮件。我已经从地址验证了的

  • 文档中说您需要在主目录中有一个“共享凭证文件”,但这对生产不起作用!那么在发送电子邮件时如何指定AWS密钥呢?它没有给出任何例子! https://docs.aws.amazon.com/ses/latest/DeveloperGuide/examples-send-using-sdk.html 此代码示例假设您已经为Java安装了AWS SDK,并且已经创建了共享凭据文件。 他们的参考留档甚至不

  • 问题内容: 我目前正在写一个音乐博客。管理员每2-3天发布一次新文章。管理员发布文章后,将立即向大约5000个订阅者发送大量电子邮件。 实施群发邮件功能的最佳方法是什么? 下列功能有效吗? 另一个问题:如果所有5000个订阅者都在使用Yahoo Mail,Yahoo是否会将其视为DDOS攻击并阻止我的SMTP服务器的IP地址? 问题答案: 首先,使用PHP随附的mail()函数不是最佳解决方案。它

  • 我正在尝试使用AmazonSDK发送电子邮件。NET和SES。我有一封由特殊信件组成的电子邮件,例如: ęxąmplę@źćż。通用域名格式 对于域部分,我阅读了关于Punycode的文章,这很好用。但对于地址的本地部分,我似乎找不到解决方案:我尝试对整个电子邮件使用RFC 2047编码,但SES返回“missing final@domain”错误,因此我尝试只对本地部分进行编码,因此电子邮件将是

  • 我正在尝试使用php中的amazon SES sendmail()函数在邮件中发送pdf附件。我写了一个函数,它以MIME类型作为内容并发送邮件。但我无法在邮件中发送附件。文件路径和所有其他值看起来都很完美。 功能代码如下: 邮件已成功发送给用户,但没有附件。请帮忙。