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でも同じことができますか?
助けてください。
これを実現する最良の方法は、 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()
ほとんどの場合、作業中のホストで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スクリプトから上記のコマンドを実行します。