如何从完整标题中提取电子邮件

时间:2009-12-01 19:44:03

标签: php

我有一些用PHP打开的电子邮件,现在需要获取发件人的电子邮件地址。有人能告诉我我需要使用哪种功能吗?我已经开通了PHP的电子邮件。

编辑: 这是一个棘手的问题还是我不​​能很好地解释它?

我是否使用preg_match从打开的内容中获取电子邮件地址?

2 个答案:

答案 0 :(得分:3)

嘿。你可以使用正则表达式。

$regexp = '/From:\s*(([^\<]*?) <)?<?(.+?)>?\s*\n/i';
if(preg_match($regexp, $email, $matches)) {
    echo "Name: " . $matches[2] . "\r\n";
    echo "Email: " . $matches[3] . "\r\n";
}
else {
    echo "No match";
}

如果没有包含名称,“名称”部分将为空。

这应该适用于标准的From标头。这假设您使用的是原始电子邮件,标题和所有内容。

答案 1 :(得分:3)

某些邮件发送库可以解析原始电子邮件,而not that well documented Zend_Mail应该可以通过将原始电子邮件传递给Zend_Mail_Message对象来实现。 (注意:Reading mailboxes is well documented,从我所看到的,读取原始邮件不是。)

$message = new Zend_Mail_Message(array(), $filename);
$sender = $message->getHeader('From');

如果你需要的只是发送者,那么一个好的RegEx会更好用,但是,如果你要测试其他标题/操作body / mime部分,那么使用一个库是值得的。