如何使用 Python 从文件夹中通过电子邮件发送随机 pdf 文件?

Posted

技术标签:

【中文标题】如何使用 Python 从文件夹中通过电子邮件发送随机 pdf 文件?【英文标题】:How can I send random pdf files in email from a folder using Python? 【发布时间】:2021-08-20 20:47:40 【问题描述】:

我正在尝试创建一个电子邮件机器人,它将从文件夹中向我发送一个随机的 pdf 文件。虽然我的代码没有显示任何错误,但我没有收到任何邮件。如果您能告诉我哪里出了问题以及我应该怎么做,那将会很有帮助。谢谢。

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import  MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import os
import random
def send():
    body = ""
    sender_email = "email"
    password = "my_password"
    receiver_email = "email"

    msg = MIMEMultipart()
    msg['Subject'] = '[Email Test]'
    msg['From'] = sender_email
    msg['To'] = receiver_email
    msg.attach(MIMEText(body, 'plain'))
    path = "C:/Users/Asus/PycharmProjects/messenger_bot/files"
    files = os.listdir(path)
    index = random.randrange(0, len(files))
    print(files[index])
    attachment = open(os.path.join(path, random.choice(files)), 'rb')

    payload = MIMEBase('application', 'octate-stream')
    # payload = MIMEBase('application', 'pdf', Name=pdfname)
    payload.set_payload(attachment.read())

    # enconding the binary into base64
    encoders.encode_base64(payload)

    # add header with pdf name
    payload.add_header('Content-Decomposition', 'attachment', filename=files)
    msg.attach(payload)

    # use gmail with port
    session = smtplib.SMTP('smtp.gmail.com', 587)

    # enable security
    session.starttls()

    # login with mail_id and password
    session.login(sender_email, password)

    text = msg.as_string()
    session.sendmail(sender_email, receiver_email, text)
    session.quit()
    print('Mail Sent')

【问题讨论】:

您的代码缺少缩进,这是您执行它的方式还是只是 *** 格式错误? 我给出了适当的缩进。这实际上是一个格式错误。 请不要为我注册这个“服务”。 【参考方案1】:

您确定发件人的电子邮件是正确的吗? 将 sender_email 从“电子邮件”更改为您的实际电子邮件,它应该可以工作

【讨论】:

我将其更改为“电子邮件”以便在此处发布。【参考方案2】:

根据我从official documentation 收集到的信息。您遇到的问题是因为 starttls 将一个密钥文件和一个证书文件一起使用,或者单独使用一个上下文,而您没有给出任何一个。

尝试添加这个:

context = ssl.create_default_context()

然后将您的 starttls() 调用更改为

starttls(context=context)

【讨论】:

以上是关于如何使用 Python 从文件夹中通过电子邮件发送随机 pdf 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中通过电子邮件发送本地链接(共享服务器链接)?

如何在 django 中通过电子邮件发送链接?

在 oracle apex 中通过电子邮件发送富文本字段

如何在 Android 中通过电子邮件发送图片,预览但未附加..?

使用 Gmail 在 codeigniter 中通过电子邮件类发送电子邮件

有没有办法在 Python 的 Pandas 数据框中通过 SMTPLib 将电子邮件连接到多个收件人? [复制]