it-swarm-ko.tech

sendmail을 통해 메일 보내기 python

SMTP가 아닌 sendmail을 통해 메일을 보내려면이 프로세스를 캡슐화하는 python) 라이브러리가 있습니까?

더 나은 방법은, 전체 'sendmail -vs-smtp'선택을 추상화하는 좋은 라이브러리가 있습니까?

필자는이 스크립트를 여러 유닉스 호스트에서 실행할 예정이며 일부는 localhost : 25에서 수신 대기합니다. 이들 중 일부는 임베디드 시스템의 일부이며 SMTP를 수락하도록 설정할 수 없습니다.

모범 사례의 일환으로 라이브러리가 헤더 주입 취약점 자체를 처리하도록하고 싶습니다. 따라서 문자열을 popen('/usr/bin/sendmail', 'w')에 덤프하면 금속보다 약간 더 가깝습니다.

대답이 '라이브러리를 작성하십시오'이면 ;-)

70
Nate

헤더 삽입은 메일을 보내는 방법에 영향을 미치지 않으며 메일을 구성하는 방법에 영향을줍니다. email 패키지를 확인하고, 그와 함께 메일을 구성하고, 직렬화하여 /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"] = "[email protected]"
msg["To"] = "[email protected]"
msg["Subject"] = "This is the subject."
p = Popen(["/usr/sbin/sendmail", "-t", "-oi"], stdin=PIPE)
p.communicate(msg.as_string())
116
Jim

이것은 유닉스 sendmail을 사용하여 메일을 전달하는 간단한 python 함수입니다.

def sendMail():
    sendmail_location = "/usr/sbin/sendmail" # sendmail location
    p = os.popen("%s -t" % sendmail_location, "w")
    p.write("From: %s\n" % "[email protected]")
    p.write("To: %s\n" % "[email protected]")
    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
34
Pieter

Jim의 대답이 Python 3.4)에서 작동하지 않았습니다. subrocess.Popen()universal_newlines=True 인수를 추가해야했습니다.

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

msg = MIMEText("Here is the body of my message")
msg["From"] = "[email protected]"
msg["To"] = "[email protected]"
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
10
MEI

Os.popen을 사용하여 Python)에서 sendmail 명령을 사용하는 것이 일반적입니다.

개인적으로, 내가 직접 작성하지 않은 스크립트의 경우 SMTP 프로토콜을 사용하는 것이 더 좋습니다 .Windows에서 실행하기 위해 sendmail 클론을 설치할 필요가 없기 때문입니다.

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

3
tovare

이 질문은 매우 오래되었지만 Marrow Mailer (이전 TurboMail)이라는 메시지 구성 및 전자 메일 배달 시스템이 있으며이 메시지를 요청하기 전부터 사용할 수있었습니다.

이제 Python 3)을 지원하도록 포팅되고 Marrow 제품군의 일부로 업데이트되었습니다.

3
amcgregor