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

使用AWS SDK PHP(SMTP/IAM)的SES凭据

韩寒
2023-03-14

我是AWS世界的新手,我不是来自安全背景的人,所以围绕AWS IAM和SMTP设置的概念让我头晕目眩。

我已经按照所有步骤安装了AWS PHP SDK,验证了域(以及从AWS控制台成功发送了一些测试电子邮件)和一些我想发送测试电子邮件的个人电子邮件地址,但我没有得到的部分是SMTP/IAM。

我有他们提供的Amazon基本脚本,但我真的不明白在创建SMTP凭据和/或IAM时需要做什么,我搜索了所有内容,但没有真正找到答案或理解Amazon文档所说的内容。

我使用的代码是下面,但我完全困惑的部分是我应该如何生成我的访问密钥为这个特定的项目(我只需要发送电子邮件,没有处理反弹等)和什么是最好的方法访问这些从脚本是(即。我假设它们应该存储在锁定目录中的实际脚本之外?)。

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

use Aws\Ses\SesClient;

require 'vendor/autoload.php';

$client = SesClient::factory(array(
    'key' => 'SECRET_KEY',
    'secret' => 'SECRET_SECRET',
    'region' => 'eu-west-1',
    'version' => '2010-12-01'
));

$emailSentId = $client->sendEmail(array(
    // Source is required
    'Source' => 'donotreply@mydomain.com',
    // Destination is required
    'Destination' => array(
        'ToAddresses' => array('sendto@mydomain.com')
    ),
    // Message is required
    'Message' => array(
        // Subject is required
        'Subject' => array(
            // Data is required
            'Data' => 'SES Testing',
            'Charset' => 'UTF-8',
        ),
        // Body is required
        'Body' => array(
            'Text' => array(
                // Data is required
                'Data' => 'My plain text email',
                'Charset' => 'UTF-8',
            ),
            'Html' => array(
                // Data is required
                'Data' => '<b>My HTML Email</b>',
                'Charset' => 'UTF-8',
            ),
        ),
    ),
    'ReplyToAddresses' => array( 'donotreply@mydomain.com' ),
    'ReturnPath' => 'donotreply@mydomain.com'
));




?>

我试着进入SES控制台,在那里生成SMTP密钥,并将它们直接插入脚本(只是为了测试它是否有效,我已经从脚本中删除了它们,并出于安全目的删除了这些密钥),但我并不真正理解我是否应该这样做使用它们,或者如果我需要创建一个额外的IAM用户,或者如果我应该生成这些已经提到的动态组合(很高兴就此接受专家建议的投注方法)...在任何抛出我以下错误:

致命错误:未捕获异常“Aws\exception\CredentialsException”,消息为“从实例配置文件元数据服务器检索凭据时出错”。(客户端错误:GET)http://169.254.169.254/latest/meta-data/iam/security-credentials/导致404未找到响应:Aws\Credentials{closure}(数组)#1/var/www/html/vendor/guzzlehttp/promises/src/Promise。php(152):GuzzleHttp\Promise\Promise::callHandler(2,数组,数组)#2/var/www/html/vendor/GuzzleHttp/promises/src/TaskQueue。php(60):GuzzleHttp\Promise\Promise::GuzzleHttp\Promise{closure}()#3/var/www/html/vendor/GuzzleHttp/guzzle/src/Handler/curlmultidhandler。php(96):GuzzleHttp\Promise\TaskQueue-

无论如何,希望有人能理解我所说的——很乐意提供更多的细节,但我不认为从现在起我会给这个问题增加太多的价值,因为我确信从这个问题中可以看出,我并不真正理解它的安全方面。

如果我能让这个工作起来,理解基本概念,并且在最后一个馅饼掉进我喉咙的时候还有一些头发,那将是一个真正的圣诞奇迹。

提前谢谢!!

G人

共有2个答案

盛骏祥
2023-03-14

使用AWS SES有两种方法。一种是使用SMTP接口,另一种是直接使用SESAPI。

当使用SES SMTP时,生成SMTP密钥的方法是正确的,在我看来,如果您只想发送一些电子邮件,最简单的方法就是。如果您曾经使用任何其他SMTP服务器从您的应用程序发送电子邮件,那么SES-SMTP接口是一个替代品-无需更改代码,您只需生成凭据并使用它们即可。

另一方面,如果您直接使用SESAPI,那么您将使用常规IAM凭据。

使用凭据与亚马逊SES

要与亚马逊简单电子邮件服务(Amazon SES)交互,您需要使用安全凭据来验证您是谁以及您是否有权限与Amazon SES交互。有不同类型的凭据,您使用的凭据取决于您想要做什么。例如,使用Amazon SES API发送电子邮件时使用AWS访问密钥,使用Amazon SES SMTP接口发送电子邮件时使用SMTP凭据。

http://docs.aws.amazon.com/ses/latest/DeveloperGuide/using-credentials.html

贺卜霸
2023-03-14

如果有人遇到同样的问题,在这里找到线索后让我的工作(http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/configuration.html),我做了以下工作:

>

'key' => 'SECRET_KEY',
'secret' => 'SECRET_SECRET',

然而,当我运行它时,它以相同的错误失败了。

将上述内容更改为以下内容,但已成功运行并发送电子邮件。。。

'credentials' => [
'key'    => 'SECRET_KEY',
'secret' => 'SECRET_SECRET'],

希望有人发现这很有用。

干杯

 类似资料:
  • 我正在尝试使用已附加到EC2实例的IAM角色来生成一组AWS SES SMTP凭据。但是,在尝试通过django发送电子邮件时,使用Amazon提供的脚本从IAM角色的密钥生成SMTP密码,并使用IAM角色的访问密钥ID。果心邮件,我收到错误。 这是我发送邮件的方式: 我如何生成密码: SMTP密码生成脚本如下所示:https://docs.aws.amazon.com/ses/latest/De

  • 我在尝试使用SMTP从EC2实例向SES发送电子邮件时遇到问题。由于某些原因,我会遇到零星的超时问题,无法再联系SMTP主机。需要注意的是,通过SES发送可能在75%的时间内有效。 我将从一些细节开始。我的SES帐户大部分时间都在工作。发件人邮件已验证,我的限制已提高到10k/天,5封邮件/秒。我的印象是,如果这与我的限制有关,我会得到一个特定于限制的错误。对于我的SMTP配置,我使用posfix

  • 问题内容: 我希望使用Amazon的Elasticsearch服务器在Django数据库中搜索长文本字段。但是,我也不想向那些没有登录并且不想通过模糊性或某些IP限制策略依赖安全性的用户公开此搜索(除非它可以与现有的heroku应用完美配合,部署Django应用的位置)。 Haystack似乎在这方面还有很长的路要走,但是似乎没有一种简单的方法来配置它以使用Amazon的IAM凭据来访问Elast

  • 我们最近收到一封来自亚马逊的电子邮件。 我们有几个PHP Codeigniter应用程序,其中我们使用Amazon SES SMTP凭据发送电子邮件。我们不使用AWS访问密钥

  • 我试图使用与这里完全相同的代码:https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-using-smtp-java.html我更改了。但是我不能发送电子邮件。这两封电子邮件都已添加并验证了Amazon SES。 我正在使用邮件依赖项: 日志: 问题在哪里?

  • 我有一个Symfony2应用程序,需要使用AmazonSES发送邮件。我需要使用SMTP进行设置。由于某种原因,我的Symfony2应用程序自从我在实例上运行以来一直无法发送邮件。它在我的本地服务器上运行良好,使用gmail发送邮件,但在实时服务器上niether gmail不起作用。我的配置是: 我已经从SES控制台在线获取了SMTPHOST、SMTPUSER和SMTPPASS这三件东西。但邮件