PHP:解析由Amazon SES保存到S3的文件中的邮件


PHP: Parse mails from files saved to S3 by Amazon SES

我使用Amazon SES的Rule Set将发送到我的域的所有邮件定向到SES Bucket。我现在试图以编程方式读取这些文件,但无法弄清楚如何做到这一点。我研究了这个主题,发现了PHP的Mailparse函数。我的代码是:

    $filnename = '/Users/R00tUser/Downloads/u38sf1l0jcd4s1tifl59a10psc16i7nfoaq2c64';
    $resource = mailparse_msg_parse_file($filename);
    $parts = mailparse_msg_get_structure($resource);
    var_dump($parts);
    $text = mailparse_msg_extract_whole_part_file($resource, $filename);
    var_dump($text);

var_dump的输出都是bool(false)。由于这些方法的文档几乎不存在,我不知道哪里出了问题。能否有人请纠正我的代码中的错误,或者请建议一个更好的方法来做我想做的事情。

我试图解析的文件内容:

Return-Path: <>
Received: from mail1.dokia.com (mail1.dokia.com [212.63.232.3])
 by inbound-smtp.us-east-1.amazonaws.com with SMTP id v1o5lrohq3e841no469t801
 for abcdghgasd@mydomain.com;
 Thu, 03 Nov 2016 10:34:17 +0000 (UTC)
X-SES-Spam-Verdict: PASS
X-SES-Virus-Verdict: PASS
Received-SPF: none (spfCheck: 212.63.232.3 is neither permitted nor denied by domain of mail1.dokia.com) client-ip=212.63.232.3; envelope-from=postmaster@mail1.dokia.com; helo=mail1.dokia.com;
Authentication-Results: amazonses.com;
 spf=none (spfCheck: 212.63.232.3 is neither permitted nor denied by domain of mail1.dokia.com) client-ip=212.63.232.3; envelope-from=postmaster@mail1.dokia.com; helo=mail1.dokia.com;
 dkim=pass header.i=@sender.be;
X-SES-RECEIPT: AEFBQUFBQUFBQUFGcHNSUkh4ShWRWNhN3djZ3hoUllvLzRyM0RXY3dNMER6OXBRcHNoZnBiRlQzbkNnUE1BK3B3TXgzYURnUE8yREFJd0ZJTW5SbWhaSm03dlE3cVljazE0QzVLbjhYNCsxdnRCdmc2M3o5bDI3ZVM4Nm1vK3BZdnUra1I1Wjc2MFo5VXA3c0psR0JaOGIvMWhmRThiMD0=
X-SES-DKIM-SIGNATURE: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple;
    s=hkasda87d; d=amazonses.com; t=1478169251;
    h=X-SES-RECEIPT:From:To:Subject:Date:Message-ID:Content-Type:MIME-Version;
    bh=Hywa/hajdiyfsdhjsdf+3Iz8=;
    b=O/hjagdasd6hjasd
    890adskajsd+hhjahda98789asd
    hkjahdkjhasd987asdhjk+2Osk=
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=sender.be; q=dns/txt; s=sender; t=1478169257;
  x=1509705257;
  h=from:to:subject:date:message-id:references:in-reply-to:
   mime-version:content-transfer-encoding;
  bh=Hywa/ghjgsd87a6dasjhbakf+3Iz8=;
  b=bbdksahiofds8fdfhjkaksd+h17EaoYrG
   mnbxzcuiuasdyibjsiud/JhgsdufgIUIUhhdksfksdiu
   OlsdjsdiThdklfj/hkasd876ihkjdfk/+Jkufd+rgruk
   w=;
From: "Sender Sender1" <sender@sender.be>
To: Super User <super.user@mydomain.com>
Subject: Automatic reply: Special Situation
Thread-Topic: Special Situation
Thread-Index: KHHSDHkjsaduiad==
Date: Thu, 3 Nov 2016 10:34:11 +0000
Message-ID: <23e9f814220844f393dc026f8cfea2d6@ULU0SXHT003P.urp.int.dexwired.net>
References: <1240504930.186814941478169243108.JavaMail.app@rbg11.atlis1>
In-Reply-To: <1240504930.186814941478169243108.JavaMail.app@rbg11.atlis1>
X-MS-Has-Attach: 
X-Auto-Response-Suppress: All
X-MS-Exchange-Inbox-Rules-Loop: sender@sender.be
X-MS-TNEF-Correlator: 
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
And more so behind fox deliberately unwound took far because yikes cowered =
much far firefly jeez revealed soggy away 
-----------------------------------------------
https://www.google.com/doodles/358th-anniversary-of-tea-in-the-uk
-----------------------------------------------

不是直接使用Mailparse,我发现解决方案是使用一个库:https://github.com/php-mime-mail-parser/php-mime-mail-parser。这对于我正在做的任务来说已经足够了,而且使用

非常直接。