php - 在php中分解发布的数据以接收日期

标签 php datetime explode

我正在将发送到我的域的电子邮件转发到 php 脚本。它很大,我不知道为什么 stackoverflow 不允许我发布完整的长度,因为它给出了错误 this looks like spam.

但是,它的日期部分看起来像

.......\nFrom: Firstname Lastname <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e08e818d85a0878d81898cce838f8d" rel="noreferrer noopener nofollow">[email protected]</a>>\nDate: Sun, 17 Feb 2019 08:09:37 +0545\nMessage-ID: <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5e3f3c3d3a3b38393637382d382d3f2d3a1e333f37327039333f3732703d3133" rel="noreferrer noopener nofollow">[email protected]</a>>\nSubject:.......

我的目的是获取此电子邮件的接收日期时间。

在那里我可以看到Date: Sun, 17 Feb 2019 08:09:37 +0545 。这个日期是我所需的日期时间。怎么办,能拿到吗?

我尝试使用 preg_split('/\r\n|\r|\n/', $_POST['headers']); 进行 explode 但后来我无法得到想法,因为它似乎是一系列字符串。

"Received: by mx0035p1mdw1.sendgrid.net with SMTP id ADiBRHCowl Sun, 17 Feb 2019 02:59:38 +0000 (UTC)",
   "Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) by mx0035p1mdw1.sendgrid.net (Postfix) with ESMTPS id DB6E7A05D27 for <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f0959d91999cb0949f9d91999ede939f9d" rel="noreferrer noopener nofollow">[email protected]</a>>; Sun, 17 Feb 2019 02:59:37 +0000 (UTC)",
   "Received: by mail-ed1-f48.google.com with SMTP id m35so7028682ede.10 for <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1e7b737f77725e7a71737f7770307d7173" rel="noreferrer noopener nofollow">[email protected]</a>>; Sat, 16 Feb 2019 18:59:37 -0800 (PST)",
   "DKIM-Signature: v=1; a=rsa-sha256; c=relaxed\/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=ttLV0Sk78+4DRG2CM0f\/kiWFXPnwCHm0Y\/1zM9lMrRo=; b=Dgyv4S\/TDdo61RsYchmhkFnFtG8VksVIeAimm7WOnHSv6chN+LOG25ufsh4\/51xX1Z pjQvuiXnuR7MawZ0B\/WZxB4F4309XT9SIrZMBX9\/5HHd\/SddFx1LZ6XVS2qEvaVV9B\/9 4v\/wqNhnNr7Vy1GlKbUq6buB9l4fk9J+ralDNF6lrDbP1XVCv+58Qp0UipMLPzYmFGnf EtylH7N4vVNoOjww15MwT5xrgW3ylfSJLZXog3TBxK+v8fGFKQ0UOH\/+C5PL0sQaFVM5 EVGtwQgqbBeEhJnG77xVuApcerYNYY+gM1Sixjb4NhRtsKgE5fOTAzA3N+jXbDIVunsZ F45g==",
   "X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed\/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=ttLV0Sk78+4DRG2CM0f\/kiWFXPnwCHm0Y\/1zM9lMrRo=; b=s\/ovc9XPMypTBh6anKxw1WFQRJ3I4AGVFaQdu9L0buU2m8tl2JFPLWOYeliRS5K\/Jd WLiTXfRdFw8OpAWuKUbMt0wQ+gZXd0AwpJb\/t5KFs+Fh7l0cjWRSK\/0ZzADqagoyDmhC ISSRazoYBu2h9IeWdOhFV4i+VBvyhkXqauggB6kvZxG4GM\/ulB7sj5zYajnVBt5SfSI1 9SHMkkZrYerI6mCAKgqr\/eEj8E0IYgaKlhct9TlZbh9wsmYUQoDzp4Wf9JET5jhL7Lya 3Pa41NZepc03HfGOcnYadrPfrIz7O2Tm++22D0LBTzozkskwlJqqZz\/rLf0Osu81q80h VdEg==",
   "X-Gm-Message-State: AHQUAuaQnQxerRWkc4sbGZmEt9JioFURi6LQDVYBzb60RKG+21LzjDlV OgAylSy0nmPPAEI7A\/Faxook200gMFui+BFD8sWrBg==",
   "X-Google-Smtp-Source: AHgI3IZGrcH6ngLPOL8YS8PuOU6OPlSk2Q2DDeKmX41lGFBsvhtZ2FFtGkGypCSGCeVJd\/wP6i+pi2S6v5EIJaZOxNA=",
   "X-Received: by 2002:aa7:dacd:: with SMTP id x13mr13739830eds.24.1550372376434; Sat, 16 Feb 2019 18:59:36 -0800 (PST)",
   "MIME-Version: 1.0",
   "From: Firstname Lastname <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2a444b474f6a4d474b434604494547" rel="noreferrer noopener nofollow">[email protected]</a>>",
   "Date: Sun, 17 Feb 2019 08:44:24 +0545",
   "Message-ID: <CACX9xtmKSuZYgnXXEq-z=jtBwG4DG=ytptVVCOsY7SEOi2o_KQ@mail.gmail.com>",
   "Subject: dummy12",
   "To: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="27424a464e4b6743484a464e490944484a" rel="noreferrer noopener nofollow">[email protected]</a>",
   "Content-Type: multipart\/alternative; boundary=\"000000000000c45c6e05820e32b0\"",
   ""

如何从这一行获取 datetim "Date: Sun, 17 Feb 2019 08:44:24 +0545"

更新:

preg_split之后$res = preg_split('/\r\n|\r|\n/', $_POST['headers']);

if(count($res)>0){
  $output = $res[10];
}

此时$output为Date: Sun, 17 Feb 2019 08:09:37 +0545

最佳答案

由于电子邮件 header 相当一致(并且数据格式始终一致),因此您可以使用正则表达式模式来匹配日期值。

$matches = null;
$returnValue = preg_match('/"Date: (.+?)",/', $headers_data, $matches);
如果成功,$matches 将是一个包含两个元素的数组:总匹配子字符串和捕获的日期数据。您可能对后者最感兴趣,位于:

$matches[1]

查看 PHP 手册以了解有关 preg_match 的更多信息.

关于php - 在php中分解发布的数据以接收日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54729789/

相关文章:

php - 这是 PHP 的 DateTime :diff? 中的错误吗

php - 有没有办法选择字符串中以空格分隔的第一个单词/字符组合?

php - 希望将 phpmailer 库添加到 Zend Framework 设置中

php - 允许访问 www/html 文件夹之外的文件

php - 查询每个值只使用一次 MySql

php - 如何通过多个定界符分解字符串并保留定界符?

php - 检查数据库字段是否包含内爆变量的值

php - 使用 PHP 和 HTML 上传文件

java - 在谷歌日历事件中设置日期

python - 如何在 Python 中将日期时间转换为 UTC 时间戳?