📌  相关文章
📜  使用Python从您的 Gmail 帐户发送带有附件的邮件(1)

📅  最后修改于: 2023-12-03 15:06:53.154000             🧑  作者: Mango

使用Python从您的 Gmail 帐户发送带有附件的邮件

简介

本文介绍如何使用Python从您的 Gmail 帐户发送带有附件的电子邮件,您可以使用Python的第三方库来轻松处理这个任务。

需求

在开始编写代码之前,请确保您已经安装以下所有依赖项:

您还需要从 Google Developers Console 上配置 API 凭据。

代码实现
import os.path
import base64
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError


def send_email(subject, body, to, file_path=None):
    """
    发送电子邮件到指定的收件人地址

    :param str subject: 邮件主题
    :param str body: 邮件正文
    :param list to: 收件人电子邮件地址列表
    :param str file_path: 附件文件路径(可选)
    :return: 无返回值
    """
    try:
        # 获取凭据
        credentials = Credentials.from_authorized_user_file(os.path.expanduser('~/.credentials/gmail-python-quickstart.json'))

        # 使用 Google API 构建服务
        service = build('gmail', 'v1', credentials=credentials)

        message = MIMEMultipart()
        message['to'] = ', '.join(to)
        message['subject'] = subject
        message.attach(MIMEText(body, 'plain'))

        if file_path:
            # 添加附件
            with open(file_path, 'rb') as f:
                attachment = MIMEApplication(f.read(), _subtype=os.path.splitext(file_path)[1][1:])
                attachment['Content-Disposition'] = 'attachment; filename="{}"'.format(os.path.basename(file_path))
                message.attach(attachment)

        # 发送电子邮件
        create_message = {'raw': base64.urlsafe_b64encode(message.as_bytes()).decode()}
        send_message = (service.users().messages().send(userId='me', body=create_message).execute())

        print(f'邮件已发送给 {to}: {send_message["id"]}')

    except HttpError as error:
        print(f'邮件发送失败: {error}')
使用方法

您可以像下面这样调用 send_email 函数来发送电子邮件:

subject = '测试邮件'
body = '这是一封测试电子邮件。'
to = ['receiver1@example.com', 'receiver2@example.com']
file_path = '/path/to/attachment'

send_email(subject, body, to, file_path)

此代码将向 receiver1@example.comreceiver2@example.com 发送主题为 测试邮件 的电子邮件,包含附件 /path/to/attachment

总结

在这篇文章中,我们介绍了如何使用Python从您的 Gmail 帐户发送带有附件的电子邮件。现在,您可以使用这个代码片段为您的应用程序添加电子邮件发送功能了。