使用 Gmail API 和 Python 发送电子邮件

使用 Gmail API 和 Python 发送电子邮件
Python

自动化您的外展

利用 Gmail API 管理和发送草稿中的电子邮件可以简化通信流程,尤其是在处理多个收件人时。这种方法允许重复使用单个草稿将个性化电子邮件发送到地址列表,确保一致性,同时节省时间。挑战在于以编程方式修改草稿的收件人字段而不改变原始内容。

在本指南中,我们将探讨如何在将草稿电子邮件发送给不同用户之前以编程方式更改收件人。此方法涉及获取草稿、更改其收件人详细信息,然后通过 Gmail API 发送。此技术对于发送批量电子邮件特别有用,其中每封邮件都针对其收件人进行了稍微定制。

命令 描述
service.users().drafts().get() 根据用户 Gmail 帐户中的 ID 获取特定草稿电子邮件。
creds.refresh(Request()) 如果当前访问令牌已过期,则使用刷新令牌刷新访问令牌。
InstalledAppFlow.from_client_secrets_file() 从客户端机密文件创建流来管理用户身份验证。
service.users().drafts().send() 将指定的草稿作为电子邮件发送。
service.users().drafts().list() 列出用户 Gmail 帐户中的所有草稿电子邮件。
service.users().drafts().update() 在发送之前更新草稿的内容或属性。

解释自动电子邮件发送机制

提供的脚本旨在自动执行使用 Gmail API 从 Gmail 帐户中的预定义草稿发送电子邮件的过程。关键功能始于 获取凭证 函数,它确保有效的身份验证令牌可用。它检查令牌是否已保存并加载它。如果令牌无效或过期,则会使用以下命令刷新令牌 信用.刷新(请求()) 或启动一个新的身份验证流程 InstalledAppFlow.from_client_secrets_file(),保存新令牌以供将来使用。

通过有效的凭据,可以使用以下方法创建服务对象 建造 函数从 googleapiclient.discovery 模块,它是与 Gmail API 交互的核心。然后,该脚本通过以下方式与 Gmail 草稿进行交互: service.users().drafts().get() 获取特定草稿并修改其“收件人”字段以将其发送到各种电子邮件 ID。功能类似于 service.users().drafts().send()service.users().drafts().update() 分别用于发送电子邮件和更新草稿。这允许每个收件人从单个草稿接收定制电子邮件,而无需更改原始草稿内容。

使用 Gmail API 自动发送电子邮件

Gmail 自动化的 Python 脚本

import os
import pickle
from googleapiclient.discovery import build
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
SCOPES = ['https://mail.google.com/', 'https://www.googleapis.com/auth/gmail.modify', 'https://www.googleapis.com/auth/gmail.compose']
def get_credentials():
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)
    return creds
def send_email_from_draft(draft_id, recipient_list):
    service = build('gmail', 'v1', credentials=get_credentials())
    original_draft = service.users().drafts().get(userId='me', id=draft_id).execute()
    for email in recipient_list:
        original_draft['message']['payload']['headers'] = [{'name': 'To', 'value': email}]
        send_result = service.users().drafts().send(userId='me', body={'id': draft_id}).execute()
        print(f"Sent to {email}: {send_result}")

通过 Python 和 Gmail API 增强电子邮件自动化

使用 Python 实现电子邮件发送自动化

import json
import datetime
import pandas as pd
import re
def list_draft_emails():
    creds = get_credentials()
    service = build('gmail', 'v1', credentials=creds)
    result = service.users().drafts().list(userId='me').execute()
    return result.get('drafts', [])
def modify_and_send_draft(draft_id, recipient_list):
    service = build('gmail', 'v1', credentials=get_credentials())
    draft = service.users().drafts().get(userId='me', id=draft_id).execute()
    for recipient in recipient_list:
        draft['message']['payload']['headers'] = [{'name': 'To', 'value': recipient}]
        updated_draft = service.users().drafts().update(userId='me', id=draft_id, body=draft).execute()
        send_result = service.users().drafts().send(userId='me', body={'id': updated_draft['id']}).execute()
        print(f"Draft sent to {recipient}: {send_result['id']}")

Gmail API 电子邮件自动化中的高级技术

扩展 Gmail API 在电子邮件自动化中的使用包括集成其他功能,例如管理标签和附件。用户可以以编程方式操作标签来对外发电子邮件进行分类或更有效地管理线程,这在复杂的电子邮件工作流程中特别有用。在发送文件之前以编程方式将文件附加到草稿可确保每个收件人收到所有必要的文档,从而进一步增强自动化流程。

此外,可以实施先进的错误处理和日志记录机制,以确保自动电子邮件发送过程的稳健性和可追溯性。这可以包括出于审计目的记录每个操作,或者在 API 调用失败时实施重试机制,这在网络应用程序中很常见。这些增强功能可以显着提高使用 Gmail API 的电子邮件自动化脚本的可靠性和功能。

使用 Gmail API 实现电子邮件自动化:常见问题

  1. 问题: 我可以使用 Gmail API 发送电子邮件而无需用户手动干预吗?
  2. 回答: 是的,一旦您获得必要的凭据和用户同意,Gmail API 就可以用于以编程方式发送电子邮件,而无需用户进一步手动输入。
  3. 问题: 是否可以使用 Gmail API 安排电子邮件?
  4. 回答: API 不支持直接调度,但您可以通过存储电子邮件并使用基于时间的机制在指定时间发送电子邮件来在应用程序中实现此功能。
  5. 问题: 我可以将文件附加到通过 Gmail API 发送的电子邮件吗?
  6. 回答: 是的,API 允许您将文件附加到电子邮件中。您需要对附件进行 Base64 编码,并根据 MIME 类型将它们添加到邮件正文中。
  7. 问题: 如何使用 Gmail API 在 Web 应用程序中处理身份验证?
  8. 回答: 可以使用 OAuth 2.0 处理身份验证。用户必须通过同意屏幕授权您的应用程序访问其 Gmail,然后使用令牌来处理后续 API 调用中的身份验证。
  9. 问题: 使用 Gmail API 发送电子邮件有哪些限制?
  10. 回答: Gmail API 具有使用限制,通常是每天发送的邮件数量上限,具体取决于您的项目配额和帐户类型(例如个人帐户、G Suite)。

结束自动化之旅

在探索使用 Python 和 Gmail API 自动从草稿发送电子邮件的过程中,我们介绍了身份验证方法、草稿操作以及以编程方式向各种收件人发送电子邮件。该技术通过自动执行重复任务来显着提高生产力,并确保个性化通信的准确性。此外,它还为集成更复杂的工作流程开辟了途径,可以适应各种业务需求,从而优化电子邮件管理和推广策略。