【问题标题】:adding attachment using sendmail from unix使用来自 unix 的 sendmail 添加附件
【发布时间】:2013-07-07 17:03:39
【问题描述】:

我正在使用以下代码从 unix 发送电子邮件。

代码

#!/usr/bin/python
import os
def sendMail():
    sendmail_location = "/usr/sbin/sendmail" # sendmail location
    p = os.popen("%s -t" % sendmail_location, "w")
    p.write("From: %s\n" % "myname@company.com")
    p.write("To: %s\n" % "yourname@company.com")
    p.write("Subject: My Subject \n")
    p.write("\n") # blank line separating headers from body
    p.write("body of the mail")
    status = p.close()
    if status != 0:
           print "Mail Sent Successfully", status
    sendMail()

我不知道如何在这封电子邮件中添加附件(附件位于不同的目录 /my/new/dir/)

【问题讨论】:

    标签: python unix sendmail python-2.6


    【解决方案1】:

    Sendmail 是一个极其简单的程序。它知道如何通过 smtp 发送一段文本。如果您想拥有附件,您将不得不将它们转换为文本块并使用(在您的示例中) p.write() 将它们添加到消息中。

    这很难 - 但您可以使用 email 模块(python 核心的一部分)为您完成很多工作。

    更好的是,您可以使用smtplib(也是核心的一部分)来处理发送邮件。

    查看http://docs.python.org/2/library/email-examples.html#email-examples 了解如何使用emailsmtplib 发送带有附件的邮件的示例

    【讨论】:

      【解决方案2】:

      使用email.mime 包来创建你的邮件而不是尝试手动生成它,它会为你省去很多麻烦。

      例如,发送带有附件的短信可能很简单:

      from email.mime.multipart import MIMEMultipart
      from email.mime.text import MIMEText
      from email.mime.application import MIMEApplication
      
      msg = MIMEMultipart()
      msg['From'] = 'fromaddress'
      msg['To'] = 'toaddres'
      msg['Subject'] = 'subject'
      msg.attach(MIMEText('your text message'))
      with open(filename, 'rb') as f:
          attachment = MIMEApplication(f.read(), 'subtype')
          attachment['Content-Disposition'] = 'attachment; filename="%s";' % filename
          msg.attach(attachment)
      message = msg.as_string()
      

      然后你可以将消息写入sendmail,或者使用smtplib发送。

      'subtype' 应替换为附加文档的 mime 子类型,或者省略以发送默认类型为 application/octet-stream 的附件。或者,如果您知道您的文件是文本,则可以使用 MIMEText 而不是 MIMEApplication

      【讨论】:

      • 以不可读的格式发送消息 --===============0631434354== Content-Type: application/subtype MIME-Version: 1.0 Content-Transfer-编码:base64 内容处置:附件:filename=name_of_file; TG9nZ2luZyBTdGFydHMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCioqICAgICAgICAgICAgIE9kYkF1dG9wdXJnZSBGaWxlIEZvdW5kICAgICAg
      • 没错,它是附件,bas64 编码,email 包会自动为您完成。任何电子邮件客户端都可以阅读。尝试查看任何带有附件的邮件的来源,您会看到类似的内容...如果您想了解更多信息,请阅读 MIME here
      • 为了正确的文件名我不得不改变'附件:文件名=%s;'到'附件;文件名=%s;' (用“;”代替“:”)
      • @Jakob - 是的,你是对的,应该是分号。已更正,谢谢。
      【解决方案3】:

      我通常使用以下方式发送文件“file_name.dat”作为附件:

      uuencode file_name.dat file_name.dat | mail -s "Subject line" arnab.bhagabati@gmail.com
      

      【讨论】:

      • 这可以用pythonic的方式表示吗?
      猜你喜欢
      • 2012-03-16
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多