使用来自unix的sendmail添加附件

时间:2013-07-09 22:16:35

标签: python unix sendmail python-2.6

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

3 个答案:

答案 0 :(得分:1)

Sendmail是一个非常简单的程序。它知道如何在smtp上发送一串文本。如果你想要附件,你将不得不做的工作是将它们转换成一个文本块并使用(在你的例子中)p.write()将它们添加到消息中。

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

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

查看http://docs.python.org/2/library/email-examples.html#email-examples,了解如何使用emailsmtplib

发送带附件的邮件的工作示例

答案 1 :(得分: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

答案 2 :(得分:0)

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

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