使用Gmail API获取“发件人”和“收件人”地址

3
我使用Gmail API来获取Gmail账户中的邮件并将其存储到我的数据库中。我想为每个邮件存储收件人/发件人电子邮件地址。
每个邮件都包含一个标题数组,这个数组中有两个字段,“From”和“To”。然而,它们同时包含联系人姓名和电子邮件地址,而非纯粹的电子邮件地址。
因此,现在我像这样解析它们:
if ($header->name === 'From') {
    preg_match_all("/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i", $header->value, $matches);
    $from = $matches[0][0];
}

但这是获取/发送地址的唯一方式吗?只能通过手动解析标头吗?

2个回答

2
是的。 User.messages 仅包括标准RFC 2822标头中的发件人/收件人。
您应该避免使用正则表达式解析电子邮件地址。它们很复杂,可以包含几乎任何字符。查看此正则表达式示例以了解符合规范的版本是什么样子的。

谢谢,但我还有什么其他方法可以获取电子邮件地址? - Victor
我建议您努力剥离掉任何您知道不属于电子邮件地址的部分。例如,First Last <name@example.com> 可以基于 <> 进行解析。 - abraham

1

我使用imap_rfc822_parse_adrlist()

它的工作原理如下:

$arrayOfAddressesFoundInString = imap_rfc822_parse_adrlist('Some Name <someemail@test.com>', 'localhost');

我创建了一个小函数,可以为我完成这项工作:

function getAddressFromString($address_string) {
            $address_array  = imap_rfc822_parse_adrlist($address_string, "localhost");
            if (!is_array($address_array) || count($address_array) < 1) 
                return FALSE;
            return $address_array[0]->mailbox . '@' . $address_array[0]->host;
        }

有趣的是了解这个函数,虽然它不如正则表达式好。 - vatavale

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接