从python通过sendmail发送邮件

如果我想发送邮件不通过SMTP,而是通过sendmail,是否有一个python库封装这个过程?

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

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

作为良好实践的一部分,我真的想让库本身处理头注入漏洞——所以只是转储一个字符串到 popen('/usr/bin/sendmail', 'w') 比我想的更接近金属

如果答案是“去写一个库”,那就写吧;-)

请先 登录 后评论

4 个回答

tovare

使用os.popen从Python中直接使用sendmail命令是很常见的

就我个人而言,对于不是我自己编写的脚本,我认为只使用smtp协议更好,因为它不需要安装sendmail克隆程序来在windows上运行。

https://docs.python.org/library/smtplib.html

请先 登录 后评论
Frank Wiles

最简单的答案是smtplib,你可以在这里找到它的文档。

您所需要做的就是配置本地sendmail以接受来自localhost的连接,默认情况下它可能已经这样做了。当然,您仍然使用SMTP进行传输,但它是本地的sendmail,这基本上与使用命令行工具相同。

请先 登录 后评论
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

头注入不是您如何发送邮件的一个因素,它是您如何构造邮件的一个因素。检查电子邮件包,用它构造邮件,序列化它,并将其发送到 /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())
请先 登录 后评论
  • 18 关注
  • 0 收藏,349 浏览
  • Nate 提出于 2022-11-02 18:56