我正在尝试使用Google 提供的API使用 Python 3.4读取我的 GMail 消息。
我正在使用 Google 在此链接上提供的此功能:
def GetMimeMessage(service, user_id, msg_id):
try:
message = service.users().messages().get(userId=user_id, id=msg_id,
format='raw').execute()
print 'Message snippet: %s' % message['snippet']
msg_str = base64.urlsafe_b64decode(message['raw'].encode('ASCII'))
mime_msg = email.message_from_string(msg_str)
return mime_msg
except errors.HttpError, error:
print 'An error occurred: %s' % error
Run Code Online (Sandbox Code Playgroud)
但是,如果我按原样使用此功能,则会出现以下错误:
类型错误:initial_value 必须是 str 或 None,而不是字节
所以我稍微改变了函数:
def GetMimeMessage(service, user_id, msg_id):
try:
message = service.users().messages().get(userId=user_id, id=msg_id,
format='raw').execute()
#print ('Message snippet: %s' % message['snippet'])
msg_str = base64.urlsafe_b64decode(message['raw'].encode('utf-8','ignore'))
print(msg_str)
mime_msg = email.message_from_string(msg_str.decode('utf-8','ignore'))
return mime_msg
except …Run Code Online (Sandbox Code Playgroud) 在 rails 4 应用程序中使用较新的 google-api-ruby-client 发送 gmail。
require 'google/apis/gmail_v1'
Gmail = Google::Apis::GmailV1
class MailService
def initialize(params)
@params = params
end
def call
message = Gmail::Message.new
service = Gmail::GmailService.new
message.raw = (redacted)
service.request_options.authorization = current_user.token.fresh_token
result = service.send_user_message(current_user.email, message)
end
end
Run Code Online (Sandbox Code Playgroud)
这是调用 API 的结果:
Sending HTTP post https://www.googleapis.com/gmail/v1/users/me/messages/send?
200
#<Hurley::Response POST https://www.googleapis.com/gmail/v1/users/me/messages/send == 200 (63 bytes) 858ms>
Success - #<Google::Apis::GmailV1::Message:0x007fc9cf9b52dd
@id="15096369c05cdb1d",
@thread_id="15096369c05cdb1d">
Run Code Online (Sandbox Code Playgroud)
原始消息从 API Explorer 发送没有问题,但是当从我的应用程序执行时,我的收件箱中收到一封退回电子邮件。在上面的示例中,编辑后的示例是一个有效的 RFC 2822 格式的 base-64 url 安全字符串,而 fresh_token 代表当前用户的 oauth2 访问令牌。
查看退回的邮件
Bounce <nobody@gmail.com>
2:43 PM …Run Code Online (Sandbox Code Playgroud) 我目前正在使用 Gmail API。
https://developers.google.com/gmail/api/v1/reference/users/messages/get
有谁知道如何找到电子邮件ID?
谢谢!
我在使用 nodemailer 时遇到问题,用户收到从我的 google 帐户发送的电子邮件,该帐户用于对 gmail 进行身份验证,而不是邮件选项中使用的别名。
下面是我的代码:
var smtpTransport = nodemailer.createTransport({
service: config.mailer.options.service,
auth: {
user: "xxxx@gmail.com",
pass: "password"
}
});
var mailOptions = {
to: user.email,
from: 'Test Email <aaa@aaa.com>',
subject: subject,
html: emailHTML
};
Run Code Online (Sandbox Code Playgroud)
smtpTransport.sendMail(mailOptions); 现在,当用户收到电子邮件时,电子邮件会提到
来自:测试邮箱 xxxx@gmail.com
而不是显示
来自:测试邮箱 aaa@aaa.com
请任何帮助
我有一个 realusername@gmail.com 电子邮件地址,我有一个委派的 delegateusername@gmail.com
如果我通过 gmail 应用程序使用真实用户名登录,我可以访问委托帐户,但如果想使用 gmail-api 执行相同操作,它会拒绝。
我称之为:
获取 https://www.googleapis.com/gmail/v1/users/delegateusername@gmail.com/labels?key= {MY_API_KEY}
在我使用 realusername 进行身份验证并收到以下信息后:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "forbidden",
"message": "Delegation denied for realusername@gmail.com"
}
],
"code": 403,
"message": "Delegation denied for realusername@gmail.com"
}
}
Run Code Online (Sandbox Code Playgroud)
它应该工作,不是吗?
有人可以帮助我为什么会发生这种情况,或者我可以做些什么来使其发挥作用?
我正在使用 Gmail API 在 Python 中自动创建 Gmail 草稿。我需要创建 HTML 格式的电子邮件,但我个人也需要创建纯文本回退,因为这是正确的做法。
我以为我已经完成了上述所有工作,直到我尝试使纯文本后备与 HTML 略有不同。似乎谷歌自己为我创建了明文后备,而不是使用我提供的,所以如果我的 html body is<HTML><BODY>HTML Body</BODY></HTML>和我的明文 body is Plaintext body,最终的明文正文将是HTML Body,丢弃我提供的明文。
我的问题:有没有人知道让 Gmail API 使用我提供的明文而不是自动生成回退的方法?
我注意到的一个相关项目:如果我以不同的顺序附加 HTML 和纯文本正文,则会发生相反的情况 - GMail 将根据我的纯文本自动生成 HTML 正文。所以它似乎只关注最后一个附着的身体。
我正在使用的代码的精简版:
import base64
import os
import httplib2
import oauth2client
from oauth2client import client
from oauth2client import tools
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from pathlib import Path
from apiclient import errors
from apiclient import discovery
SCOPES …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过 Python 中的 Google API 发送消息,并尝试运行几乎直接从Google 示例页面获取的示例。
def CreateMessage(sender, to, subject, message_text):
message = MIMEText(message_text)
message['to'] = to
message['from'] = sender
message['subject'] = subject
return {'raw': base64.urlsafe_b64encode(message.as_string().replace('message','resource').encode('ascii'))}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试发送它时
message = CreateMessage(sender, to, subject, message_text)
message = service.users().messages().send(body=list(message),userId='me').execute()
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:“'raw' RFC822 有效负载消息字符串或通过 /upload/* URL 上传消息需要”
从其他帖子看来,谷歌似乎在期待一个附件。MIMEText 有什么问题让它期待一个,如果有,我该如何解决?
我正在尝试将 gmail API 与 React.js 一起使用。
我不断收到错误“gapi 未定义”。我相信client.js在我的mail.js文件运行后我的 HTML 文件正在加载吗?
我怎样才能解决这个问题?
索引.html
...
<script src="https://apis.google.com/js/client.js"></script>
Run Code Online (Sandbox Code Playgroud)
索引.js
import './Mail.js';
Run Code Online (Sandbox Code Playgroud)
邮件.js
import { createAction, handleActions } from 'redux-actions'
const CLIENT_ID = '1.apps.googleusercontent.com'
const SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']
export const SET_GMAIL_CREDENTIALS = 'SET_GMAIL_CREDENTIALS'
export const CHANGE_LOADING = 'CHANGE_LOADING'
export const SET_GMAIL_LABELS = 'SET_GMAIL_LABELS'
export const SELECT_GMAIL_LABEL = 'SELECT_GMAIL_LABEL'
export const SET_GMAIL_EMAILS = 'SET_GMAIL_EMAILS'
let defaultState = {
profile: {
emailAddress: ''
},
loading: true,
labels: [],
currentLabel: null,
emails: [] …Run Code Online (Sandbox Code Playgroud) 花了几个小时搜索谷歌等。阿尔。对于答案,确定这很简单,但是如何使用 nextPageToken 通过 GMail api 创建分页?我所做的一切都无法使分页工作(来回)。
假设“授权用户”并使用我调用的正确范围进行访问
gapi.client.load('gmail','v1',displayInbox);
Run Code Online (Sandbox Code Playgroud)
然后
function displayInbox(){
var request = gapi.client.gmail.users.messages.list({
'userId':'me',
'maxResults':10,
});
request.execute(function(response){
$.each(response.messages,function(){
var messageRequest = gapi.client.gmail.users.messages.get({
'userId':'me',
'id':this.id
});
messageRequest.execute(appendMessageRow);
});
});
}
Run Code Online (Sandbox Code Playgroud)
appendMessageRow 只是在表格中列出列表,例如
function appendMessageRow(message){
var txt = '<tr>';
txt +='<td>'+getHeader(message.payload.headers, 'From')+'</td>';
txt +='<td>';
txt +='<a href="#message-modal-'+ message.id +'" data-toggle="modal" id="message-link-' + message.id+'">' +getHeader(message.payload.headers, 'Subject') +'</a>';
txt +='</td>';
txt +='<td class="text-xs-right">'+moment(parseInt(message.internalDate)).format('HH:mm')+'</td>';
txt +='</tr>';
$('table tbody').append(txt);
}
Run Code Online (Sandbox Code Playgroud)
当我 console.log request.execute 我看到 nextPageToken 作为对象键我不能做和需要做的是添加分页按钮 - messageRequest.execute 不通过 nextPageToken 并且似乎没有办法创建/获取'previousPageToken'。
对不起,如果简单但它是我还是比它更重要?GMail API 文档在这个主题上看起来很差(对我来说),我还没有找到有帮助的 …
对于我们的一位用户(并且只有一位),我们在调用gmail.users.history.list. 具体来说,当我们翻阅来自 的响应(即pageToken给出 a)时会发生这种情况gmail.users.history.list。
list当 Gmail 推送通知指示用户有新的 时hisotryId,将调用该方法,此时我们使用他们以前的历史记录 ID 来获取到目前为止的所有更改。第一次调用list总是成功,但是当使用pageToken从初始响应提供的给定值时,调用失败。
奇怪的是,当我们在日志中看到这些故障,然后稍后手动尝试相同的调用时,它们工作得很好。
有任何想法吗?提前致谢!
gmail-api ×10
google-api ×2
python ×2
gmail ×1
javascript ×1
jquery ×1
mime-message ×1
node.js ×1
nodemailer ×1
pagination ×1
python-3.4 ×1
python-3.x ×1
reactjs ×1
ruby ×1
utf-8 ×1