首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从gmail-api获取发件人电子邮件

从gmail-api获取发件人电子邮件
EN

Stack Overflow用户
提问于 2014-07-16 13:02:04
回答 3查看 10.6K关注 0票数 8

我正在使用gmail和有困难获得电子邮件的发件人.我说的是电子邮件的“完整”格式。我认为发送者的电子邮件实际上是使用gmail的web界面写在"From“字段中的邮件。这种完整格式的标题通常包括“X-原始-身份验证-结果”之类的内容,通常我可以从其中检索smtp.mail值,这是发件人的电子邮件,但是在其他电子邮件中找不到这个标题。

到目前为止,这是我的代码:

代码语言:javascript
复制
if ("X-Original-Authentication-Results" == $header["name"]) {
        $value = $header["value"];
        preg_match("/smtp.mail=(.*)/", $value, $emailFound);
        $parsedEmail = $emailFound[1];
}

以下是一些标题的典型格式:

代码语言:javascript
复制
[headers] => Array
                    (
                        [0] => Array
                            (
                                [name] => Delivered-To
                                [value] => randomemail@gmail.com
                            )

                        [1] => Array
                            (
                                [name] => Received
                                [value] => ................
                            )

                        [2] => Array
                            (
                                [name] => X-Received
                                [value] => ................
                            )

                        [3] => Array
                            (
                                [name] => Return-Path
                                [value] => 
                            )

                        [4] => Array
                            (
                                [name] => Received
                                [value] => ................
                            )

                        [5] => Array
                            (
                                [name] => Received-SPF
                                [value] => ................
                            )

                        [6] => Array
                            (
                                [name] => Authentication-Results
                                [value] => ................
                            )
........

那么,是否有可靠的方式获得正确的电子邮件发件人?提前谢谢你!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-16 15:56:50

循环遍历headers[]数组,查找具有' name‘= "From“(或您感兴趣的标题名称是什么)的数组。注意,可能有多个具有该名称的头。有一些标准的头部通常会存在(从,从,主题),但我不相信这是由RFC授权的。

票数 7
EN

Stack Overflow用户

发布于 2015-06-13 16:08:49

知道这个问题是从一段时间前开始的,但我最近遇到了这个问题,在网上找不到任何解决办法--所以我想分享我的发现。

基本上,将它封装在have实体()中就可以做到这一点--但是您必须直接访问该部件;因此:-

代码语言:javascript
复制
$part = $message->payload['modelData']['headers'][0]['value']; 
echo htmlentities($part);

API似乎正在删除这些值,因为当您在有效负载上执行var_dump时,字符串值实际上是可见的。

代码语言:javascript
复制
 ["name"]=> string(11) "Return-Path" ["value"]=> string(21) ""

这也适用于FROM部分。只是觉得这会是一个更容易证明它的方法。:)

票数 7
EN

Stack Overflow用户

发布于 2017-06-27 17:41:49

我做了一些实验。API Users.messages:获取的头

“From”的标头

代码语言:javascript
复制
{
    "name": "From",
    "value": "Ray Lin \u003cray@xxx.com\u003e"
 }

实验:

代码语言:javascript
复制
  foreach($headers as $header){ if($header->name==="From")  $from = $header->value;}

// experiment 1:
    preg_match('/\\\u003c(.*?)\\\u003e/', $from, $match);
    echo $match[1]; // empty


// experiment 2:(use a string instead)
    $str = 'Ray Lin \u003cray@xxx.com\u003e';
    preg_match('/\\\u003c(.*?)\\\u003e/', $str, $match);
    echo $match[1]; // ray@xxx.com

// experiment 3:
    echo $from // Ray Lin

// experiment 4:
    echo htmlentities($from) // Ray Lin <ray@xxx.com>

// experiment 5:
    preg_match('/<(.*?)>/', $from, $match);
    $from =$match[1];
    echo $from  // ray@xxx.com

// experiment 6:
    $from = htmlentities($from);
    preg_match('/<(.*?)>/', $from, $match);
    print_r($match); // empty Array()

实验5对我的需要是理想的,但你可以从实验3中看到,$from只是两个词,我甚至不知道电子邮件是从哪里来的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24781501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档