我有一个 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/