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

Posted

技术标签:

【中文标题】python 2.7 smtplib 和 mime 的电子邮件附件问题【英文标题】:Email attachment issues with python 2.7 smtplib and mime 【发布时间】:2021-08-19 21:00:26 【问题描述】:

我有兴趣发送带有 csv 附件的正文电子邮件。当我使用非常小的 csv(10 行)时,这似乎很简单,但是当我有较大的附件时,电子邮件不会发送。我的电子邮件附件大小限制为 10MB,因此我不希望/打算发送大于该大小的任何内容,但我无法附加任何接近该大小的内容。

我在流集 jython 阶段从 AWS EC2 实例运行 python 2.7 代码,这可能会或可能不会影响我的响应。

## Make CSV to attach
csvString = 'some string of csv-type' # EX: 'header1, header2, header3, header4'

## Send response email
#### Set To/From/Subject
sender = 'no-reply@example.com'
recieversString = 'rec1@example.com, rec1@example.com'
recieversArray = recieversString.split(',')
subject = 'Job Complete'
msg = MIMEMultipart()
msg['From'] = sender
msg['To'] = recieversString
msg['Subject'] = subject

#### Set body ===========================
body = '''To: ''' + msg['To'] + '''
From: ''' + str(msg['From']) + '''
Subject: ''' + msg['Subject'] + '''

Files uploaded to AWS'''
#### ==================================
msgMIMEText = MIMEText(body, 'plain')
msg.attach(msgMIMEText)
#### ==================================

#### Set attachment
attMIMEBase = MIMEBase('text', 'csv')
attMIMEBase.set_payload(csvString)
Encoders.encode_base64(attMIMEBase)
attMIMEBase.add_header('Content-Disposition', 'attachment', filename='file_name')
msg.attach(attMIMEBase)

#### Send Email
try:
  smtpObj = smtplib.SMTP('my.domain.example', 25)
  smtpObj.sendmail(sender, recieversArray, msg.as_string())
  print('response email sent')
except:
  print('response email failed')

我已尝试打印许多失败电子邮件的大小。许多文件小于 1 MB,但电子邮件仍然失败。我只复制了我认为对这个问题有用的代码。如果还有其他有用的信息,请告诉我。谢谢大家。

【问题讨论】:

【参考方案1】:

已通过对附件和正文使用 MIMEText() 来解决此问题。 MIMEBASE() 不再使用。我不确定它为什么会导致问题。

因此:

#### Set attachment
attMIMEBase = MIMEBase('text', 'csv')
attMIMEBase.set_payload(csvString)
Encoders.encode_base64(attMIMEBase)
attMIMEBase.add_header('Content-Disposition', 'attachment', filename='file_name')
msg.attach(attMIMEBase)

被替换为

#### Set attachment
attMIMEText = MIMEText(csvString)
attMIMEText.add_header('Content-Disposition', 'attachment', filename='file_name')
msg.attach(attMIMEText)

【讨论】:

以上是关于python 2.7 smtplib 和 mime 的电子邮件附件问题的主要内容,如果未能解决你的问题,请参考以下文章

python 2.7 利用smtplib发送抄送邮件以及发送html表格

Python smtplib.sendmail Mime Multipart 正文未在 iPhone 上显示

python之smtplib库学习

python内建模块:smtplib

python smtplib发送邮件

python smtplib发送邮件