【问题标题】:Sending email from gmail api not received but shown in sent folder从 gmail api 发送电子邮件未收到但显示在已发送文件夹中
【发布时间】:2015-04-09 02:34:25
【问题描述】:

我正在使用 gapi 发送 gmail。但是,如果我将邮件发送给自己,它不会出现在我的收件箱中。最奇怪的是,它出现在“已发送”文件夹中。 `

function sendMessage(email, callback) {
    // Web-safe base64 
    var base64EncodedEmail = btoa(email).replace(/\//g,'_').replace(/\+/g,'-');
    var request = gapi.client.gmail.users.messages.send({
        'userId': 'me',
        'message': {
            'raw': base64EncodedEmail
        }
    });
    request.execute(callback);
}

function send() {
    var var to = 'znlswd@gmail.com',
        subject = 'Hello World',
        content = 'send a Gmail.'

    var email = "From: 'me'\r\n"+
        "To:  "+ to +"\r\n"+
        "Subject: "+subject+"\r\n"+
        "\r\n"+
        content;
    sendMessage(email, function () {
        console.log(arguments);
    });
}

` 控制台登录信息为:

"[↵ {↵  "id": "gapiRpc",↵  "result": {↵   "id": "1471e09d88000bf7",↵   "threadId": "1471e09d88000bf7",↵   "labelIds": [↵    "SENT"↵   ]↵  }↵ }↵]↵"

我可以在 Gmail 的“已发送”文件夹中看到这封邮件,但我没有在收件箱中收到它。 此邮件在“已发送”文件夹中的原件如下:

Received: from 823618323534-124pu7sujfj5olv94rkr0apqdppc6nti.apps.googleusercontent.com
named unknown
by gmailapi.google.com
with HTTPREST;
Wed, 9 Jul 2014 19:11:07 -0700
From: znlswd@gmail.com
To:  znlswd@gmail.com
Subject: Hello World
Date: Wed, 9 Jul 2014 19:11:07 -0700
Message-Id: <CADOxe9KLTdYfcb8OxWz+rFSM4tVKuZcVV8HJ4byv95+qPA=+dw@mail.gmail.com>

send a Gmail.

有人知道为什么吗?非常感谢!

编辑: 我将 Mime 消息中的“收件人:”更改为另一个邮箱(不是 Gmail),并正确接收邮件。感觉更迷茫了。

编辑: 我添加了一个“抄送”:字段,它是:znlswd@gmail.com(myself)、71848140@qq.com、swdpal2014@gmail.com、ezdiary@163.com。所有其他人(Gmail 和其他邮箱)都收到了邮件,但我仍然无法收到自己的邮件。

我在ezdiary@163.com收到的原始邮件如下:

Received: from mail-qg0-f44.google.com (unknown [209.85.192.44])
by mx42 (Coremail) with SMTP id XMCowEAJvlfC_L1TjzExBg--.81S3;
Thu, 10 Jul 2014 10:39:03 +0800 (CST)
Received: by mail-qg0-f44.google.com with SMTP id j107so7126918qga.31
    for <ezdiary@163.com>; Wed, 09 Jul 2014 19:38:57 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
    d=gmail.com; s=20120113;
    h=mime-version:from:date:message-id:subject:to:cc:content-type;
    bh=zgoFEkSzE1bUNp54umXlfaDEDw5bLf2Ei0uFrgrVZic=;
    b=UHOLwuTsFL9yajR0nn/TskbhVKrIfzX4OAsNDno4S2QIvwx83H5dOe2WMyFbL6Plmk
     n4z2qzGjturoi1411+PGpgj8rt4Y57aDQpu7tEOMolMmFLJomtCSmagHIHhc0qwU+CRL
     rTjO2ztwZoj/ejnqwcmANzgzMMnSxxkcIf3OvXhLm+j+5yHQvPhmGWIapFWJaTN+9gb9
     Q47Qkqe5dBrsxOnGhgQnr1orbE5NcLIYumZTH1YfCMZvqIjUtmviUQUKpfhNQD5UtCX0
     0J2moKK98Q5Vek4Wti/WtnEqOgNTzHkIL1M90eeAJKelyPu4TQ7G9GJxr1FX+s4WhgrM
     xTFA==
MIME-Version: 1.0
X-Received: by 10.224.137.9 with SMTP id u9mr78577439qat.24.1404959937414;
 Wed, 09 Jul 2014 19:38:57 -0700 (PDT)
Received: from 823618323534-124pu7sujfj5olv94rkr0apqdppc6nti.apps.googleusercontent.com
 named unknown by gmailapi.google.com with HTTPREST; Wed, 9 Jul 2014 19:38:56 -0700
From: znlswd@gmail.com
Date: Wed, 9 Jul 2014 19:38:56 -0700
Message-ID: <CADOxe9KF+VjMFw1bSkFd09RVsa7c7-pz9OguCFovOUemW4ZZbg@mail.gmail.com>
Subject: Hello World
To: znlswd@gmail.com
Cc: 71848140@qq.com, swdpal2014@gmail.com, ezdiary@163.com
Content-Type: text/plain; charset=UTF-8
X-CM-TRANSID:XMCowEAJvlfC_L1TjzExBg--.81S3
Authentication-Results: mx42; spf=pass smtp.mail=znlswd@gmail.com; dki
m=pass header.i=@gmail.com
X-Coremail-Antispam: 1Uf129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73
VFW2AGmfu7bjvjm3AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvjxUSeT5DUUUU

send a Gmail.

编辑:swdpal2014@gmail.com中的原始邮件如下:

Delivered-To: swdpal2014@gmail.com
Received: by 10.194.121.101 with SMTP id lj5csp1399131wjb;
    Wed, 9 Jul 2014 19:38:58 -0700 (PDT)
Return-Path: <znlswd@gmail.com>
Received-SPF: pass (google.com: domain of znlswd@gmail.com designates 10.224.137.9 as     permitted sender) client-ip=10.224.137.9
Authentication-Results: mr.google.com;
   spf=pass (google.com: domain of znlswd@gmail.com designates 10.224.137.9 as             permitted sender) smtp.mail=znlswd@gmail.com;
   dkim=pass header.i=@gmail.com
X-Received: from mr.google.com ([10.224.137.9])
    by 10.224.137.9 with SMTP id u9mr68151154qat.24.1404959937949 (num_hops = 1);
    Wed, 09 Jul 2014 19:38:57 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
    d=gmail.com; s=20120113;
    h=mime-version:from:date:message-id:subject:to:cc:content-type;
    bh=zgoFEkSzE1bUNp54umXlfaDEDw5bLf2Ei0uFrgrVZic=;
    b=UHOLwuTsFL9yajR0nn/TskbhVKrIfzX4OAsNDno4S2QIvwx83H5dOe2WMyFbL6Plmk
     n4z2qzGjturoi1411+PGpgj8rt4Y57aDQpu7tEOMolMmFLJomtCSmagHIHhc0qwU+CRL
     rTjO2ztwZoj/ejnqwcmANzgzMMnSxxkcIf3OvXhLm+j+5yHQvPhmGWIapFWJaTN+9gb9
     Q47Qkqe5dBrsxOnGhgQnr1orbE5NcLIYumZTH1YfCMZvqIjUtmviUQUKpfhNQD5UtCX0
     0J2moKK98Q5Vek4Wti/WtnEqOgNTzHkIL1M90eeAJKelyPu4TQ7G9GJxr1FX+s4WhgrM
     xTFA==
MIME-Version: 1.0
X-Received: by 10.224.137.9 with SMTP id u9mr78577439qat.24.1404959937414;
 Wed, 09 Jul 2014 19:38:57 -0700 (PDT)
Received: from 823618323534-124pu7sujfj5olv94rkr0apqdppc6nti.apps.googleusercontent.com
 named unknown by gmailapi.google.com with HTTPREST; Wed, 9 Jul 2014 19:38:56 -0700
From: znlswd@gmail.com
Date: Wed, 9 Jul 2014 19:38:56 -0700
Message-ID: <CADOxe9KF+VjMFw1bSkFd09RVsa7c7-pz9OguCFovOUemW4ZZbg@mail.gmail.com>
Subject: Hello World
To: znlswd@gmail.com
Cc: 71848140@qq.com, swdpal2014@gmail.com, ezdiary@163.com
Content-Type: text/plain; charset=UTF-8

send a Gmail.

【问题讨论】:

  • 您是否确认它没有出现在您的垃圾邮件文件夹中? :)
  • 嗯,是的!我检查了所有文件夹但仍然找不到它:(
  • 您在发送到非 gmail 目的地时收到了它?收到的邮件是否与您已发送文件夹中的邮件相同(包括标题)?
  • @SMcCrohan 我将收到的邮件标头粘贴到 ,你能找到什么吗?非常感谢!
  • 可以发给其他gmail用户,但不能发给自己?那很有意思。当您将其发送为 swdpal2014@gmail.com 时会发生什么?

标签: javascript google-api gmail gmail-api


【解决方案1】:

所以要清楚,发送邮件的工作原理是正确地发送给其他人。在向自己发送邮件的情况下(你为什么要这样做?这真的需要而不是说只使用messages.insert吗?)然后它只出现在SENT而不是INBOX标签中。你只会得到一份邮件,不管是 API 还是使用 Web UI,都是一样的。问题是 Web UI 也会将该消息放入 INBOX 以及 SENT 中。 (如您所知,由于诸如基于 Message-Id 标头的欺骗检测等原因,发送给自己是一种特殊情况。)

【讨论】:

  • 谢谢!你说的对我帮助很大。最后,我使用 users/messages/modify api 在“SENT”文件夹中的邮件中添加“INBOX”和“UNREAD”标签。这完美解决了我的问题。
  • GmailGuy:messages.send API 似乎仍然应该为我们做这件事。现在我必须向用户询问“googleapis.com/auth/gmail.modify”身份验证范围,因为他们可能想向自己发送电子邮件并将其显示在收件箱中。
  • 是的,我同意messages.send(to=me) 应该这样做——这是一个错误...一两周后再回来查看。
【解决方案2】:

自己回答问题。首先我尝试使用messages.insert。但是,如果我将“发件人”设置为与“收件人”(我的电子邮件地址)相同,邮件仍将仅位于“已发送”文件夹中。正确的方法是使用 message.modify api 在发送的邮件中添加“INBOX”和“UNREAD”标签。

gapi.client.request({
     path: "gmail/v1/users/me/messages/" + messageid + "/modify",
     method: "POST",
     body: "{\"addLabelIds\": [\"UNREAD\",\"INBOX\"]}",
     callback: function() {
         console.log("gmail sent to self");
         return console.log(arguments);
     }
})

“messageid”指的是发送api返回的id。

【讨论】:

  • 我不会说在“正确的方式”之后使用 messages.modify 来做到这一点,但我同意这是目前所必需的。如果您只想将消息放入经过身份验证的用户自己的收件箱中,那么 messages.insert 确实有意义,您可以指定任意标签。如果您实际上是在发送(例如,它可能发送给任何用户,包括该用户),那么 messages.send 是正确的解决方案。
  • 我也面临同样的问题。我正在尝试向其他 gmail 帐户发送电子邮件。邮件出现在第一个帐户的已发送项目中。但是我没有收到第二个帐户中的所有邮件。 :(
【解决方案3】:

一个未经测试的想法:您可以尝试将X-Gmail-Labels: Inbox 标头添加到messages.send REST 调用,希望Gmail 会添加标签。我在将 GMail 中的一些标签从谷歌导出到 mbox 文件时看到了这个标题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 2014-07-13
    • 2016-07-12
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2014-07-20
    相关资源
    最近更新 更多