无法在python中使用MIME发送带有pdf附件的电子邮件

Posted

技术标签:

【中文标题】无法在python中使用MIME发送带有pdf附件的电子邮件【英文标题】:Failing to send an email with pdf attachment with MIME in python 【发布时间】:2021-04-23 18:59:07 【问题描述】:

我正在使用 MIME 发送带有附件的电子邮件,代码运行时没有错误,但没有发送电子邮件。我正在使用编解码器编码来防止先前的错误(MIMEText 无法识别没有此编码的文档中的字节)-UnicodeDecodeError: 'utf8' codec can't decode byte 0x9c。我在 python 3.6.4 和 Windows 10 中运行它

import smtplib
import os, sys
import xlrd
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import codecs

gmail_user = input("Your gmail: ")
gmail_password = input("Your password: ")
print("sending...")

example = "email test"

msg = MIMEMultipart()
msg['Subject'] = sheet.cell_value(l,1)
msg['From'] = gmail_user
msg['To'] = email_reciver
body = MIMEText(texto)
msg.attach(body)

pod = os.getcwd() + "\doc.pdf"
with codecs.open(pod, 'r', encoding='utf-8', errors='ignore') as fp:
    record = MIMEText(fp.read())
    record['Content-Disposition'] = 'attachment; filename="doc.pdf"'
    msg.attach(record)

try:
    server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
    server.ehlo()
    server.login(gmail_user, gmail_password)
    print(l)
    server.sendmail(gmail_user, email_reciver, msg.as_string())
    server.close()

except:
    print ("something went wrong")
   

【问题讨论】:

【参考方案1】:

我不明白发生了什么变化,但我正在运行测试:

    server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
    server.ehlo()
    server.login(gmail_user, gmail_password)
    print(l)
    r = server.sendmail(gmail_user, email_reciver, msg.as_string())
    print("__________________")
    print(r)
    server.close()

它奏效了。 r 输出为,如果我删除print("_____________")print(r),它将停止工作。 代码中没有其他任何变化

【讨论】:

以上是关于无法在python中使用MIME发送带有pdf附件的电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

使用python发送带有(docx)附件的邮件

带有附件问题的 PHP Pear Mime 邮件

Mime 和 Office365

python 2.7 smtplib 和 mime 的电子邮件附件问题

在 Python 中发送带有 HTML+plain_text 电子邮件的 PDF 附件

使用 S/MIME (PHP) 发送带有附件的电子邮件