当前位置:  开发笔记 > 编程语言 > 正文

从python通过sendmail发送邮件

如何解决《从python通过sendmail发送邮件》经验,为你挑选了3个好方法。

如果我不是通过SMTP发送邮件,而是通过sendmail发送邮件,是否有一个用于封装此进程的python库?

更好的是,是否有一个好的库可以抽象出整个'sendmail -versus-smtp'的选择?

我将在一堆unix主机上运行这个脚本,其中只有一些正在监听localhost:25; 其中一些是嵌入式系统的一部分,无法设置为接受SMTP.

作为良好实践的一部分,我真的很想让库自己处理标题注入漏洞 - 所以只需要将字符串倾斜popen('/usr/bin/sendmail', 'w')到比我想要的金属更接近金属.

如果答案是'去写一个库',那就这样吧;-)



1> Jim..:

标题注入不是您发送邮件的因素,它是您构建邮件的一个因素.检查电子邮件包,使用它构建邮件,将其序列化,然后/usr/sbin/sendmail使用子进程模块将其发送到:

from email.mime.text import MIMEText
from subprocess import Popen, PIPE

msg = MIMEText("Here is the body of my message")
msg["From"] = "me@example.com"
msg["To"] = "you@example.com"
msg["Subject"] = "This is the subject."
p = Popen(["/usr/sbin/sendmail", "-t", "-oi"], stdin=PIPE)
p.communicate(msg.as_string())


python3用户应该使用`.as_bytes()`而不是`as_string()`
您还应该使用`-oi`参数来发送邮件.这样可以阻止邮件中的单个"."过早终止电子邮件.
很好,经过5年的答案,它今天帮了我:)

2> Pieter..:

这是一个简单的python函数,它使用unix sendmail来传递邮件.

def sendMail():
    sendmail_location = "/usr/sbin/sendmail" # sendmail location
    p = os.popen("%s -t" % sendmail_location, "w")
    p.write("From: %s\n" % "from@somewhere.com")
    p.write("To: %s\n" % "to@somewhereelse.com")
    p.write("Subject: thesubject\n")
    p.write("\n") # blank line separating headers from body
    p.write("body of the mail")
    status = p.close()
    if status != 0:
           print "Sendmail exit status", status


@Jim是的,他们在给出我的回答(检查编辑日期)之后专门编辑了这部分内容,以回应我的回答.
他们特别表示,他们不希望使用“ popen”风格的解决方案。更糟糕的是,给出的原因是为了避免诸如标头注入漏洞之类的事情。如果用户提供发件人或收件人地址,则此代码容易受到标头注入攻击。这正是他们所不想要的。

3> 小智..:

Jim的回答在Python 3.4中对我不起作用.我不得不添加一个额外的universal_newlines=True参数subrocess.Popen()

from email.mime.text import MIMEText
from subprocess import Popen, PIPE

msg = MIMEText("Here is the body of my message")
msg["From"] = "me@example.com"
msg["To"] = "you@example.com"
msg["Subject"] = "This is the subject."
p = Popen(["/usr/sbin/sendmail", "-t", "-oi"], stdin=PIPE, universal_newlines=True)
p.communicate(msg.as_string())

没有universal_newlines=True我得到

TypeError: 'str' does not support the buffer interface

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有