标签: gmail-api

GMail API Python 和编码/解码

我正在尝试使用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)

python utf-8 python-3.4 gmail-api

5
推荐指数
1
解决办法
1711
查看次数

使用 google-api-ruby-client '0.9.pre3' 发送 gmail 消息

在 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)

ruby google-api-ruby-client gmail-api

5
推荐指数
1
解决办法
1048
查看次数

查找 Gmail 邮件的 ID

我目前正在使用 Gmail API。

https://developers.google.com/gmail/api/v1/reference/users/messages/get

有谁知道如何找到电子邮件ID?

谢谢!

gmail-api

5
推荐指数
1
解决办法
6962
查看次数

Nodemailer 使用原始用户帐户而不是别名发送电子邮件

我在使用 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

请任何帮助

google-authentication node.js nodemailer gmail-api

5
推荐指数
1
解决办法
4258
查看次数

Gmail API 拒绝委派电子邮件的请求

我有一个 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)

它应该工作,不是吗?

有人可以帮助我为什么会发生这种情况,或者我可以做些什么来使其发挥作用?

google-api gmail-api

5
推荐指数
0
解决办法
1857
查看次数

使用用户指定的 HTML 和纯文本正文以编程方式发布 Gmail 草稿

我正在使用 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 mime-message gmail-api

5
推荐指数
1
解决办法
1056
查看次数

使用 Google API 发送邮件时出错 - “'raw' RFC822 有效负载消息字符串或通过 /upload/* URL 上传消息需要”

我正在尝试通过 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 有什么问题让它期待一个,如果有,我该如何解决?

python-3.x google-api-python-client gmail-api

5
推荐指数
2
解决办法
2055
查看次数

React-仅在加载外部js文件后运行文件(未定义gapi)

我正在尝试将 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)

javascript reactjs gmail-api

5
推荐指数
1
解决办法
1746
查看次数

GMail API 分页使用 nextPageToken

花了几个小时搜索谷歌等。阿尔。对于答案,确定这很简单,但是如何使用 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 文档在这个主题上看起来很差(对我来说),我还没有找到有帮助的 …

jquery gmail pagination google-api gmail-api

5
推荐指数
1
解决办法
4928
查看次数

Gmail API:users.history.list 在使用 pageToken 时返回“Not Found”

对于我们的一位用户(并且只有一位),我们在调用gmail.users.history.list. 具体来说,当我们翻阅来自 的响应(即pageToken给出 a)时会发生这种情况gmail.users.history.list

list当 Gmail 推送通知指示用户有新的 时hisotryId,将调用该方法,此时我们使用他们以前的历史记录 ID 来获取到目前为止的所有更改。第一次调用list总是成功,但是当使用pageToken从初始响应提供的给定值时,调用失败。

奇怪的是,当我们在日志中看到这些故障,然后稍后手动尝试相同的调用时,它们工作得很好。

有任何想法吗?提前致谢!

gmail-api

5
推荐指数
1
解决办法
811
查看次数