使用 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 合规版本的外观。
它是这样工作的:
$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;
}
我使用 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 合规版本的外观。
它是这样工作的:
$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;
}