使用 aws workmail 将托管在 Amazon SES 上的电子邮件通过管道传输到 ec2 托管的 php 脚本

pipe email hosted at Amazon SES with aws workmail to ec2 hosted php script

我有一个托管在亚马逊 ec2 上的网站,我有托管在亚马逊 SES 上的网站电子邮件地址,我们还使用亚马逊工作邮件来访问电子邮件和发送电子邮件。但是现在我们想要做的是将所有发送到我们网站电子邮件地址的电子邮件通过管道传输到 php mysql 脚本(我们正在构建一个通信管理系统)。

但是我找不到任何关于如何将收到的电子邮件转发到 aws workmail 收件箱到外部托管 php 文件的建议或文档?

您正在寻找的服务是 AWS 简单电子邮件服务 (SES)。 AWS 在 2015 年增加了对入站电子邮件处理的支持。

Documentation here

要开始,您需要在 SES 中配置和验证您的域,并按照控制台中的指示将域 DNS MX 记录指向 SES。

从那里,您可以根据目标地址创建规则以发送消息:Lambda 函数; S3;社交网络;或工作邮件。

对于在 EC2 上进行处理的情况,您希望将消息发布到 SNS 主题,并使用订阅的 SQS 队列。然后,您在 EC2 上的应用程序服务器需要在工作线程中使用来自 SQS 的消息。

可以使用它来处理您拥有 WorkMail 的域中的所有邮件,但是除非您的特定产品需要它 - 我建议专门为要由自动化处理的电子邮件地址设置一个子域。

第二个答案,因为我没有正确阅读问题(糟糕,抱歉)。

使用 MIME encoding 将电子邮件附件作为邮件正文的一部分发送。从 SES 接收电子邮件时,您将以这种原始格式将其作为邮件正文的一部分。

但是,SES 在发送到 SNS 时会将消息大小(包括附件)限制为 150kb。

要支持更大的消息 (30MB),您需要将它们存储在 S3 中。要在收到新消息时接收 SNS 事件,您需要为 s3:ObjectCreated:*.

设置 S3 Event Notification

从那里开始,过程是相同的 - 您的应用程序需要从 S3 检索对象,并从对象正文中提取消息和附件,完成后可选择从 S3 中删除原始消息.

用于提取附件的唯一漂亮的 PHP 库是 php-mime-mail-parser,并且在他们的 GitHub 页面上有一个不错的例子。

我修改了示例以显示相关部分:

$Parser = new PhpMimeMailParser\Parser();
$Parser->setText($raw_email);

foreach ($Parser->getAttachments(true) as $attachment) {
    echo 'Filename : '.$attachment->getFilename().'<br />'; // logo.jpg
    echo 'Filesize : '.filesize($attach_dir.$attachment->getFilename()).'<br />'; // 1000
    echo 'Filetype : '.$attachment->getContentType().'<br />'; // image/jpeg
    echo 'MIME part string : '.$attachment->getMimePartStr().'<br />'; // (the whole MIME part of the attachment)
}