4

我正在使用以下代码从 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/)

4

3 回答 3

1

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

这很难——但你可以使用email模块(python 核心的一部分)为你做很多工作。

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

查看http://docs.python.org/2/library/email-examples.html#email-examplesemail的工作示例,展示如何使用和发送带有附件的邮件smtplib

于 2013-07-09T22:24:02.180 回答
1

使用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.

于 2013-07-09T22:30:32.113 回答
0

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

uuencode file_name.dat file_name.dat | mail -s "Subject line" arnab.bhagabati@gmail.com
于 2013-07-10T07:59:32.043 回答