gpt4 book ai didi

python - 如何在消息中附加 Google Drive 文件并通过 gmail API 发送(无需下载文件)?

转载 作者:行者123 更新时间:2023-12-01 07:37:13 24 4
gpt4 key购买 nike

我目前正在开发一个项目,需要向用户发送邮件并附加 Google 文档中的一些文档。

我有要发送的文档的文件 ID。我不想下载该文件然后将其附加到邮件中。有没有办法直接从谷歌驱动器附加文件而不将它们下载到我们的本地存储?

我尝试过的方法 -

  1. 我首先尝试导出文件,然后将字节状对象存储在变量中,然后将其传递给 create_message() 方法。但是 mimeType.guess_type() 需要一个类似字符串的对象,它可以是路径,也可以是 url。

  2. 然后我尝试将驱动器 URL 直接传递给 create_message() 方法,但没有成功。

这是我的 create_message 方法 -

def create_message_with_attachment(self, sender, to, subject, message_text,files):
"""Create a message for an email.

Args:
sender: Email address of the sender.
to: Email address of the receiver.
subject: The subject of the email message.
message_text: The text of the email message.
file: The path to the file to be attached.

Returns:
An object containing a base64url encoded email object.
"""
message = MIMEMultipart()
message['to'] = to
message['from'] = sender
message['subject'] = subject

msg = MIMEText(message_text)
message.attach(msg)

for fil in files:
content_type, encoding = mimetypes.guess_type(fil)

if content_type is None or encoding is not None:
content_type = 'application/octet-stream'
main_type, sub_type = content_type.split('/', 1)
if main_type == 'text':
fp = open(fil, 'rb')
msg = MIMEText(fp.read(), _subtype=sub_type)
fp.close()
elif main_type == 'image':
fp = open(fil, 'rb')
msg = MIMEImage(fp.read(), _subtype=sub_type)
fp.close()
elif main_type == 'audio':
fp = open(fil, 'rb')
msg = MIMEAudio(fp.read(), _subtype=sub_type)
fp.close()
else:
fp = open(fil, 'rb')
msg = MIMEBase(main_type, sub_type)
msg.set_payload(fp.read())
fp.close()
filename = os.path.basename(fil)
msg.add_header('Content-Disposition', 'attachment', filename=filename)
message.attach(msg)
b64_bytes = base64.urlsafe_b64encode(message.as_bytes())
b64_string = b64_bytes.decode()
body = {'raw': b64_string}
return body

files参数是数组,因为我想发送3-4个左右的多个附件。

到目前为止还没有运气。谁能建议其他方法来实现这一目标?

最佳答案

Google Apps 的问题是您在下载或导出数据时无法保留数据类型 - 它们需要转换为不同的 MIMEType。因此,如果您在发送带有附件的电子邮件时遇到问题,我建议您执行以下解决方法:在您的电子邮件中包含文件的链接,而不是文件本身。在这种情况下,您必须执行以下步骤:

与相应用户共享感兴趣的文件。您可以通过创建和更新 permissions 以编程方式执行此操作。 。在您的情况下,您需要指定 emailAddress、fileID,并在请求正文中包含您想要授予电子邮件收件人的角色。如果您更新现有权限,还需要指定permissionId。包括webViewLink电子邮件正文中所需文件的名称。您可以通过listing files获取webViewLink并将 webViewLink 指定为您想要在响应中获取的字段

关于python - 如何在消息中附加 Google Drive 文件并通过 gmail API 发送(无需下载文件)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56931766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com