我正在使用 Gmail API 的 PHP 包装器首先获取邮件列表,然后使用其邮件 ID 获取每个邮件的一些标头信息,但是我遇到了非常不一致且速度缓慢的问题。我已经在使用 Google 最佳实践页面上所述的部分响应和批量请求之类的东西。
下面是我使用的代码的快照
$client = new Google_Client();
$service= new Google_Service_Gmail($client);
$batch = new Google_Http_Batch($client);
//Call to get mail list from or to user email, limit to 10 result
$messages = $service->users_messages->listUsersMessages('me', array('maxResults' => 10, 'q' => "from:$email OR to:$email"));
$messageList = $messages->getMessages();
//enable batch use for client
$client->setUseBatch(true);
//Loop through message list, add get mail request for each message to batch
foreach($messageList as $msg_obj){
$request = $this->service->users_messages->get('me', $msg_obj->id,array('format' => 'metadata', 'metadataHeaders' => …Run Code Online (Sandbox Code Playgroud) 我正在使用 JavaMail Api 从 gmail 帐户读取邮件。但问题是我只能读一次。有什么办法可以一遍又一遍地阅读邮件吗???
我的 Java 代码是:
import java.util.Properties;
import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;
public class Main {
// main function. Project run starts from main function...
public static void main(String[] args) {
String host = "pop.gmail.com";// change accordingly
String mailStoreType = "pop3";
String username = "your_email@gmail.com";// change accordingly
String password = "your_password";// change accordingly
check(host, mailStoreType, username, password);
}
// function to make connection and get …Run Code Online (Sandbox Code Playgroud) 我一直在为新的 Python Gmail API 更新一些脚本。但是,我对如何更新以下内容感到困惑,以便我只检索昨天的消息。谁能告诉我如何做到这一点?
我目前能看到的唯一方法是遍历所有消息,只解析那些在正确时间范围内具有时代的消息。但是,如果我有 1000 条消息,这似乎效率极低。必须有一种更有效的方法来做到这一点。
from apiclient import discovery
import oauth2client
from oauth2client import client
from oauth2client import tools
import os
import httplib2
import email
from apiclient.http import BatchHttpRequest
import base64
from bs4 import BeautifulSoup
import re
import datetime
try:
import argparse
flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
flags = None
SCOPES = 'https://www.googleapis.com/auth/gmail.readonly'
CLIENT_SECRET_FILE = '/Users/sokser/Downloads/client_secret.json'
APPLICATION_NAME = 'Gmail API Python Quickstart'
def get_credentials():
"""Gets valid user credentials from storage.
If nothing has been stored, or if …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Go 中的 Gmail API 检索邮件的完整邮件正文。目前,当我这样做时,我只能得到消息正文的前三个字符,即“<ht”。我很确定我的问题在于消息正文的解码,但我似乎无法弄清楚我做错了什么。
我查看了其他几种语言的示例,并尝试将它们翻译成 Go,但没有成功。编码的消息正文相当大,所以我相当肯定一些数据在某处丢失了。
这是一个(删节的)代码片段,说明了我是如何尝试解决这个问题的:
req := svc.Users.Messages.List("me").Q("from:someone@somedomain.com,label:inbox")
r, _ := req.Do()
for _, m := range r.Messages {
msg, _ := svc.Users.Messages.Get("me", m.Id).Format("full").Do()
for _, part := range msg.Payload.Parts {
if part.MimeType == "text/html" {
data, _ := base64.StdEncoding.DecodeString(part.Body.Data)
html := string(data)
fmt.Println(html)
}
}
}
Run Code Online (Sandbox Code Playgroud) 我们遇到了一些困境,我们遇到了一些应用程序,这些应用程序试图在没有用户交互授权的情况下读取给定用户的电子邮件。这种方法的关键是我们不需要用户交互,并且希望使用从 Google Developer Console 下载的正确 JSON 凭据加载客户端服务器应用程序。
我有这种方法适用于我们在开发人员控制台中创建服务帐户的程序,然后将域范围的权限委派给具有适当范围访问权限的帐户。但是,我们希望我们不必委派域范围的权限,只需阅读创建此开发者控制台项目的用户电子邮件即可。我为此尝试了许多不同类型的解决方案,但总是遇到相同的限制,即我必须授予域范围的访问权限。
我想知道的是,是否有任何方法可以使用服务器到服务器类型的方法访问单个用户邮箱,而不必授予域范围的访问权限?
感谢您对这个问题的帮助!
我直接使用 Gmail RESTful API(不是来自某个库)。查看此处的文档Gmail 文档。
我设法获取了消息正文的内容,但是它也返回了当前消息的整个历史链。
有没有办法只从 API 获取请求的消息体的响应,而没有整个线程历史记录?
我遇到此错误 <“未配置访问权限。Gmail API 之前未在项目 ********* 中使用或已禁用。通过访问https://console.developers.google.com/启用它apis/api/gmail/overview?project= ********* 然后重试。如果您最近启用了此 API,请等待几分钟,让操作传播到我们的系统并重试。">
我知道我的产品 ID 有问题。几天前,我的朋友用我的 Pycharm 运行日历 API,然后他用他的帐户验证了所有凭据。但我也创建了一个新项目>创建了新凭据。下载了秘密的 Json 文件并替换为以前的。我还检查了 Json 文件,客户端 ID 是我的。但是 Pycharm 仍然在寻找那个客户端 ID,它是我朋友的客户端 ID。我该如何解决?
我也尝试在 Pycharm 中打开新项目,但仍然遇到同样的问题。我是 Python 和 Google API 的新手。如果我的问题太简单/显而易见,请原谅并帮助我解决问题。
我使用的代码在这个链接中给出,quickstart.py 由谷歌开发者页面提供。
我订阅了 Google Cloud Pub/Sub,创建了一个主题并创建了一个带有指向我服务器上 URL 的 webhook 的订阅。然后,我使用 Gmail API 在我在 Gmail 帐户中创建的特定标签上调用 watch,并将其与我创建的主题相关联。
当我的邮件到达我的 Gmail 帐户中的标签时,Webhook 会触发对我服务器上的 URL 的 POST 请求。但是不管邮件的内容是什么,POST 正文总是这样的:
{
"message": {
"attributes": {},
"data": "eyJlbWFpbEFkZHJlc3MiOiJteWVtYWlsQG15ZG9tYWluLmNvbSIsImhpc3RvcnlJZCI6MTIzNDU2N30K",
"messageId": "12345678900000", # only relevant to Pub/Sub
"message_id": "12345678900000",
"publishTime": "2017-04-16T15:42:08.968Z",
"publish_time": "2017-04-16T15:42:08.968Z"
},
"subscription": "projects/proj-name/subscriptions/sub-name"
}
Run Code Online (Sandbox Code Playgroud)
该data字段是 Base64 编码的,在这种情况下是:
{"emailAddress":"myemail@mydomain.com","historyId":1234567}
Run Code Online (Sandbox Code Playgroud)
这就是我每次得到的结果,无论电子邮件内容是什么。但是,如果从 google 开发者控制台运行发布测试,则data字段中的 base64 编码值是我指定的实际消息字符串。
我尝试使用来自 base64 解码data值的 historyId 使用 Gmail API 对 history.list 进行后续调用,但我得到的只是这样的响应:
{"historyId": "1234567"}
Run Code Online (Sandbox Code Playgroud)
我应该如何获取电子邮件内容?
我正在尝试使用从 node.js 服务器发送电子邮件 nodemailer
我目前有一个在 Google Domains 注册的域名,因此我有一个 G Suite 实例设置来为我提供电子邮件服务器。
我有一个电子邮件设置: noreply@domainname.com
我想要做的是从我的服务器从上面的电子邮件发送一封电子邮件。我不想使用普通的用户和密码验证,因为这对我来说非常不安全。
有没有人有可以帮助我实现这一目标的教程或文档?
我很困惑应该如何实现 gmail API 中的监视功能以接收node.js 脚本内的推送通知。我是否应该在无限循环或其他内容中调用该方法,以便在调用后它不会停止侦听电子邮件通知?
这是我在 node.js 中编写的示例代码:
const getEmailNotification = () => {
return new Promise(async (resolve, reject) => {
try{
let auth = await authenticate();
const gmail = google.gmail({version: 'v1', auth});
await gmail.users.stop({
userId: '<email id>'
});
let watchResponse = await gmail.users.watch({
userId: '<email id>',
labelIds: ['INBOX'],
topicName: 'projects/<projectName>/topics/<topicName>'
})
return resolve(watchResponse);
} catch(err){
return reject(`Some error occurred`);
}
})
Run Code Online (Sandbox Code Playgroud)
谢谢你!
gmail-api ×10
gmail ×4
google-api ×3
node.js ×2
credentials ×1
go ×1
java ×1
nodemailer ×1
performance ×1
php ×1
pycharm ×1
python ×1
python-2.7 ×1