web-dev-qa-db-ja.com

ローカルマシンから匿名メールを送信します

Python=外部SMTPサーバーを使用してメールを送信するために使用していました。以下のコードでは、smtp.gmail.com GmailのIDから他のIDにメールを送信します。以下のコードで出力を生成することができました。

import smtplib
from email.MIMEText import MIMEText
import socket


socket.setdefaulttimeout(None)
Host = "smtp.gmail.com"
PORT = "587"
sender= "[email protected]"
password = "pass"
receiver= "[email protected]"

msg = MIMEText("Hello World")

msg['Subject'] = 'Subject - Hello World'
msg['From'] = sender
msg['To'] = receiver

server = smtplib.SMTP()
server.connect(Host, PORT)
server.starttls()
server.login(sender,password)
server.sendmail(sender,receiver, msg.as_string())
server.close()

しかし、私は外部のSMTPサーバーの助けなしに同じことをしなければなりません。 Pythonでも同じことができますか?
助けてください。

16
Nidhin Joseph

これを実現する最良の方法は、 Fake SMTP コードを理解することです。これは、優れた smtpd module

#!/usr/bin/env python
"""A noddy fake smtp server."""

import smtpd
import asyncore

class FakeSMTPServer(smtpd.SMTPServer):
    """A Fake smtp server"""

    def __init__(*args, **kwargs):
        print "Running fake smtp server on port 25"
        smtpd.SMTPServer.__init__(*args, **kwargs)

    def process_message(*args, **kwargs):
        pass

if __name__ == "__main__":
    smtp_server = FakeSMTPServer(('localhost', 25), None)
    try:
        asyncore.loop()
    except KeyboardInterrupt:
        smtp_server.close()

これを使用するには、上記をfake_stmp.pyとして保存し、次のようにします。

chmod +x fake_smtp.py
Sudo ./fake_smtp.py

本当にもっと詳しく知りたいのであれば、そのモジュールのソースコードを理解することをお勧めします。

それが機能しない場合は、smtplibを試してください。

import smtplib

SERVER = "localhost"

FROM = "[email protected]"
TO = ["[email protected]"] # must be a list

SUBJECT = "Hello!"

TEXT = "This message was sent with Python's smtplib."

# Prepare actual message

message = """\
From: %s
To: %s
Subject: %s

%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)

# Send the mail

server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()
4
Mansueli

ほとんどの場合、作業中のホストでSMTPサーバーがすでに実行されている可能性があります。 ls -l /usr/sbin/sendmailを実行すると、この場所に実行可能ファイル(または別のファイルへのシンボリックリンク)が存在することが示されますか?その場合、これを使用して送信メールを送信できる場合があります。 /usr/sbin/sendmail [email protected] < /path/to/file.txtを試して、/ path/to/file.txtに含まれるメッセージを[email protected]に送信します(/path/to/file.txtはRFC準拠の電子メールメッセージである必要があります)。それが機能する場合、/ usr/sbin/sendmailを使用してpythonスクリプトからメールを送信できます-/ usr/sbin/sendmailのハンドルを開いてメッセージを書き込むことにより、または、単にシステムコールを介してpythonスクリプトから上記のコマンドを実行します。

1
mti2935