【问题标题】:Amazon SES PHPMail or SDKAmazon SES PHPMail 或 SDK
【发布时间】:2016-09-09 17:56:31
【问题描述】:

我已经注册了 Amazon SES 服务,并设置了电子邮件限制并且脱离了沙盒。我尝试了许多 PHPMailer 函数,但都返回错误:连接超时 (110)。是否可以从 PHPMailer 发送邮件?

我在 Amazon SES 网站上看到了这个link

<?php

// Replace path_to_sdk_inclusion with the path to the SDK as described in 
// http://docs.aws.amazon.com/aws-sdk-php/v2/guide/quick-start.html
define('REQUIRED_FILE','path_to_sdk_inclusion'); 

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

// Replace recipient@example.com with a "To" address. If your account 
// is still in the sandbox, this address must be verified.
define('RECIPIENT', 'recipient@example.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
));

$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");
}

?>

我已经复制了所有代码,将我的变量放在演示脚本中而不是显示。现在我收到错误消息:您必须使用 KEY ans SECRET_KEY 才能使用此脚本......我不能将我的 KEY 和 SECRETKEY 放在脚本中吗?没有说明如何执行此操作。

还有其他方式通过 Amazon SES 服务发送电子邮件吗? 谢谢!

【问题讨论】:

  • 这是您发布的链接中的第 1 步。
  • 我知道。已创建:AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY。我的问题是在脚本示例中我必须在哪里使用它。是不是像 ?
  • 无处可去。如果它们在环境中,SDK 会自动拾取它们。如果您不想使用环境变量,请再次查看步骤 1 中的链接。
  • 阅读您的错误将链接到的 PHPMailer 故障排除指南,并执行检查您的环境的步骤,以确保您没有被您的 ISP 阻止。对于 SMTP 访问,我希望您将访问密钥放在邮件标题中。

标签: php amazon phpmailer amazon-ses


【解决方案1】:

如此简单。我必须在中添加密钥和秘密:

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

并在亚马逊安全凭证中设置 XXXXXXXXXXXXXXXX 对 api 的完全访问权限

【讨论】:

  • arghhh ... 到底怎么会有人猜到 ... 去 amz 混淆你的 api 的方法。我最终使用了 php 的putenv,尽管不是最理想的。我更喜欢你的。
【解决方案2】:

据我所知,PHP Mailer 无法通过 API 与 AWS SES 一起使用,您应该将 SES SMTP 与 PHP Mailer 一起使用。

正确的端口是 25、465 或 587。

【讨论】:

  • 我已经尝试过使用带有 SMTP 的 PHPMailer 的一切,你提到的所有端口都得到相同的结果:超时错误 (110)
  • 我在我的个人邮件客户端 Mail OSX 中添加了一个 SMTP 服务器,我现在正在笑。它以这种方式工作。为什么一个简单的 PHP 脚本会这么复杂
  • 检查 PHP Mailer 配置并将超时值更改为 1 或 2 分钟,另外,通过 $Mail->SMTPDebug = 2; 启用调试日志;
  • PHPMailer 的默认超时是 5 分钟,根据 RFC 规范。这并不复杂,你只需要确保你的网络让你出去。您是否在与 Apple Mail 相同的机器上运行 PHPMailer?
  • @synchro no PHPMailer 在网络服务器上,它们不会阻止亚马逊 ses...
猜你喜欢
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
相关资源
最近更新 更多