【问题标题】:Email attachment issues with python 2.7 smtplib and mimepython 2.7 smtplib 和 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,但电子邮件仍然失败。我只复制了我认为对这个问题有用的代码。如果还有其他有用的信息,请告诉我。谢谢大家。

【问题讨论】:

    标签: python-2.7 jython email-attachments mime smtplib


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2015-02-21
      • 2015-05-28
      • 2011-07-31
      • 2011-05-06
      • 1970-01-01
      • 2014-08-30
      • 2011-10-04
      • 2021-04-26
      • 1970-01-01
      相关资源
      最近更新 更多