1

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

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

4

2 回答 2

2

第二个答案,因为我没有正确阅读问题(哎呀,对不起)。

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

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

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

从那里开始,过程是相同的 - 您的应用程序将需要从 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)
}
于 2018-01-13T03:06:22.953 回答
1

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

此处的文档

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

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

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

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

于 2018-01-13T01:38:01.843 回答