使用 Gmail API (python) 时在标题中显示名字和姓氏

Posted

技术标签:

【中文标题】使用 Gmail API (python) 时在标题中显示名字和姓氏【英文标题】:Show first and last name in header when using Gmail API (python) 【发布时间】:2021-06-07 08:52:19 【问题描述】:

我有我的邮件my_name@company.com 并使用 gmails API(和 python)发送一些邮件。问题是当邮件到达收件箱时,“发件人”显示为my_name@company.com '<my_name@company.com>',我希望它是First Name <my_name@company.com>

我尝试过使用"First Name '<my_name@company.com>'" 的不同变体,但我得到了RefreshError: ('invalid_request: Invalid impersonation "sub" field.', '\n "error": "invalid_request",\n "error_description": "Invalid impersonation \\u0026quot;sub\\u0026quot; field."\n')

from __future__ import print_function
from googleapiclient.discovery import build
from apiclient import errors
from httplib2 import Http
from email.mime.text import MIMEText
import base64
from google.oauth2 import service_account

# Email variables. Modify this!
EMAIL_FROM = "First Last '<my_name@company.com>'"
EMAIL_TO = 'some_mail@hotmail.com'
EMAIL_SUBJECT = 'Hello  from Me!'
EMAIL_CONTENT = 'Some body'


# Call the Gmail API

def service_account_login():
  SCOPES = ['https://www.googleapis.com/auth/gmail.send']
  SERVICE_ACCOUNT_FILE = 'my-credentials.json'

  credentials = service_account.Credentials.from_service_account_file(
          SERVICE_ACCOUNT_FILE, scopes=SCOPES)
  delegated_credentials = credentials.with_subject(EMAIL_FROM)
  service = build('gmail', 'v1', credentials=delegated_credentials)
  return service


def create_message(sender, to, subject, message_text):

  message = MIMEText(message_text)
  message['to'] = to
  message['from'] = sender
  message['subject'] = subject
  raw = base64.urlsafe_b64encode(message.as_bytes())
  raw = raw.decode()
  return "raw": raw

def send_message(service, user_id, message):

  try:
    message = (service.users().messages().send(userId=user_id, body=message)
               .execute())
    print('Message Id: %s' % message['id'])
    return message
  except errors.HttpError as error:
    print('An error occurred: %s' % error)

service = service_account_login()
message = create_message(EMAIL_FROM, EMAIL_TO, EMAIL_SUBJECT, EMAIL_CONTENT)
sent = send_message(service,'me', message)

【问题讨论】:

【参考方案1】:

我最近刚刚发送了一封电子邮件,显示了您想要的名称,我收到了这行,与您已有的类似,但没有单引号:

message['from'] = "First Name <something@example.com>"

【讨论】:

【参考方案2】:

所以诀窍相当简单——EMAIL_FROM 首先用于使用该电子邮件创建服务,这就是您不能写My Name &lt;my_name@company.com&gt; 的原因。当您需要指定“FROM”邮件时,您可以这样做,例如在 create_message= f"First name&lt;EMAIL_FROM&gt;,...) 的最底部

【讨论】:

以上是关于使用 Gmail API (python) 时在标题中显示名字和姓氏的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中向 Gmail-API 发送批处理请求?

如何使用 Gmail API (python) 检索整个邮件正文

在 Python 中使用 Gmail API 使用 message-id 搜索电子邮件

使用 Python 进行 base64 解码,并使用基于 REST 的 Gmail API 下载附件

使用 gmail api tuto 的错误使用 python 3“除了错误。HttpError,错误:”

Gmail推送通知Python API