Amazon SES PHPMail或SDK

3
我已经注册了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和SECRET_KEY才能使用此脚本......我应该在哪里放入我的KEY和SECRET_KEY?没有解释如何操作。
是否有其他方法可以通过Amazon SES服务发送电子邮件? 谢谢!

这是你发布的链接中的第一步。 - Jonnix
我知道了。已经创建了:AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY。我的问题是在示例脚本中,我必须在哪里使用它。像这样使用吗:<? php define('AWS_ACCESS_KEY_ID','xxxxxxxxxxxxx'); ?>? - StefGuev
没有特定位置。如果它们在环境中,SDK 将自动捕获它们。如果您不想使用环境变量,请参见步骤 1 中的链接。 - Jonnix
阅读PHPMailer故障排除指南,该指南将链接到您的错误,并执行步骤以检查您的环境,以确保您没有被ISP阻止。对于SMTP访问,我希望您将访问密钥放在消息头中。 - Synchro
2个回答

1
很简单。我需要在以下位置添加密钥和秘钥:

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

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


啊~~~这怎么能猜得到呢...亚马逊的API被混淆了,真是太棒了。我最终使用了PHP的 putenv,尽管不是最佳选择。我更喜欢你们的。 - YvesLeBorg

0
据我所知,PHP Mailer无法通过API与AWS SES配合使用,您应该使用SES SMTP与PHP Mailer配合使用。

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


我已经尝试了使用PHPMailer和SMTP的所有端口,但是无论使用哪个端口都会出现超时错误(110)。 - StefGuev
我在我的个人邮件客户端 Mail OSX 中添加了一个 SMTP 服务器,现在感到非常开心。它的工作方式是这样的。但为什么用一个简单的 PHP 脚本就这么复杂呢? - StefGuev
检查PHP Mailer配置,并将超时值更改为1或2分钟,另外,通过 $Mail->SMTPDebug = 2; 启用调试日志。 - Reza Mousavi
PHPMailer的默认超时时间为5分钟,符合RFC规范。这并不复杂,您只需要确保您的网络可以让您出去即可。您是否在与Apple Mail相同的机器上运行PHPMailer? - Synchro
@synchro,没有PHPMailer在Web服务器上,并且他们不会阻止Amazon SES... - StefGuev
所以它在完全不同的网络上!显然他们会阻止,否则你就不会收到错误。在Web服务器上执行PHPMailer故障排除指南中的测试。 - Synchro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接