php - 在 PHP 中剥离收到的电子邮件 header

标签 php regex email

我有一个 PHP 脚本,其中包含电子邮件的来源。我的目标是将标题拆分为变量 $To$From

当尝试拆分字符串时会出现问题。我需要脚本做的是采取

From: John <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="94fefbfcfad4e7fbf9f1e7fde0f1baf7fbf9" rel="noreferrer noopener nofollow">[email protected]</a>>
To: Susy <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="bac9cfc9c3fad7c3c9d3cedf94d9d5d7" rel="noreferrer noopener nofollow">[email protected]</a>>, Steven <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6310170615060d23100c0e06100a17064d000c0e" rel="noreferrer noopener nofollow">[email protected]</a>>, Mary <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="cea3afbcb78ea3b7bda7baabe0ada1a3" rel="noreferrer noopener nofollow">[email protected]</a>>

并仅返回我网站上的发件人地址和收件人地址。即

$From = '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6d070205032d1e0200081e041908430e0200" rel="noreferrer noopener nofollow">[email protected]</a>';
$To = array('<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8dfef8fef4cde0f4fee4f9e8a3eee2e0" rel="noreferrer noopener nofollow">[email protected]</a>', '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ef828e9d96af82969c869b8ac18c8082" rel="noreferrer noopener nofollow">[email protected]</a>');

因此代码需要将一串电子邮件地址转换为一个数组,然后过滤掉来自其他站点的电子邮件地址。事实证明,第一部分很困难,因为电子邮件地址在标题中列出的方式不同。

最佳答案

编辑

由于您现在已指定将 header 作为字符串您实际上需要从中解析地址,因此无需重新发明轮子:

这两个函数将为您完成这项工作,最后一个函数将为您提供一个包含预先解析电子邮件地址的对象的数组,以便您可以轻松地根据主机做出决定。


从你的问题中我并不清楚你的实际问题是什么。

只要您关心过滤包含一个电子邮件地址的字符串(将其转换为数组)或包含一个或多个地址的数组:

要过滤现有的电子邮件地址数组,您可以使用简单的数组映射函数,该函数会将与您网站主机不匹配的任何电子邮件设置为 FALSE,然后过滤数组副本 Demo :

$addresses = array(
   '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fd909c8f84bd90848e948998d39e9290" rel="noreferrer noopener nofollow">[email protected]</a>',
   '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1a777b68635a756e727f6869736e7f34797577" rel="noreferrer noopener nofollow">[email protected]</a>',
);

$myhost = 'mysite.com';

$filtered = array_map(function($email) use ($myhost) {
    $host = '@'.$myhost;
    $is = substr($email, -strlen($host)) === $host;
    return $is ? $email : FALSE;
}, $addresses);

$filtered = array_filter($filtered);

print_r($filtered);

此代码假设您已经收集了电子邮件地址。您尚未指定如何解析问题中已有的 header ,因此实际上不知道您正在处理哪些数据,因此我选择从问题的末尾开始。如果您有更多可用信息,请告诉我们。

关于php - 在 PHP 中剥离收到的电子邮件 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7453804/

相关文章:

php - 获取 CSS 属性大小值的正则表达式?

php - 表单提交中的西类牙口音标记

php - WooCommerce Blocks - 向产品网格添加简短的产品描述

php - 在 5.6 中出现 fatal error ,但在 7 中则正常

regex - 帮助使用正则表达式 - 提取文本

android - 在 Android 中登录后获取 facebook 电子邮件

python - 用 python 发送电子邮件

php - 从基于 REST 的 Web 服务调用 C++ 函数

php - jquery 在添加 html 后向 div 添加切换功能

regex - 如何使用swift对搜索正则表达式进行分组