使用 Gmail API 获取 "From" 和 "To" 个地址

Get "From" and "To" addresses with Gmail API

我使用 Gmail API 从 Gmail 帐户中检索邮件并将它们存储在我的数据库中。我想为每封邮件存储 To/From 个电子邮件地址。

每条消息包含 headers 数组,在这个数组中有两个字段,如 "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];
}

但这是获取 to/from 地址的唯一方法吗?只能手动解析 headers?

是的。 User.messages 仅包括标准 RFC 2822 headers.

中的 from/to

尽管如此,您应该避免使用正则表达式来解析电子邮件地址。它们很复杂,几乎可以包含任何字符。查看此 regex for an example 合规版本的外观。

我用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;
        }