2014-06-17 2 views
11

Ich benutzte Python zum Senden einer E-Mail mit einem externen SMTP-Server. Im folgenden Code habe ich versucht, mit gmail SMTP eine E-Mail von einer Google Mail-ID an eine andere ID zu senden. Ich konnte die Ausgabe mit dem folgenden Code erstellen.senden Sie anonyme E-Mail von lokalen PC

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() 

Aber ich muss dasselbe ohne die Hilfe eines externen SMTP-Servers tun. Wie kann ich das gleiche mit Python machen? Bitte helfen.

+0

Was genau meinen Sie mit 'ohne die Hilfe eines externen SMTP-Servers'? Sie möchten überhaupt keinen SMTP-Server verwenden? Möchten Sie Ihren eigenen SMTP-Server verwenden? Möchten Sie einen anderen SMTP-Server verwenden? –

+0

eigentlich möchte ich es mit meinem eigenen SMTP-Server. Und wenn es möglich ist, die gleiche Anforderung ohne einen SMTP-Server zu erreichen, dann ist es auch für mich in Ordnung. Was ich versuche zu erreichen, ist das Senden einer E-Mail von einer anonymen benutzerdefinierten E-Mail-ID an eine andere E-Mail-ID von meinem lokalen PC. –

Antwort

1

Der beste Weg, dies zu erreichen, ist zu verstehen, die Fake SMTP Code verwendet die große 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() 

Um dies zu nutzen, speichern Sie die oben als fake_stmp.py und:

chmod +x fake_smtp.py 
sudo ./fake_smtp.py 

Wenn Sie wirklich in mehr Details gehen wollen, dann schlage ich vor, dass Sie den Quellcode des Moduls verstehen.

Wenn das nicht versuchen, funktioniert die 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() 
+1

Ich habe dieses Beispiel irgendwo gefunden und versucht. Aber was ich verstanden habe, ist, wenn ich versuche, eine Mail mit Hilfe dieses lokalen gefälschten SMTP-Servers zu senden, behandelt die Methode "process_message" die Anfrage. Aber hier macht die Methode nichts. Die E-Mails werden also nicht an den Posteingang des Empfängers gesendet. Bitte geben Sie mir eine Richtung. –

+0

@NidhinJoseph, schauen Sie sich dieses zweite Skript an und versuchen Sie es. Wenn es auch nicht funktioniert, stellen Sie sicher, dass diese Module korrekt auf Ihrem Computer installiert sind. – Mansueli

+0

Ich versuche, diesen Beispielen zu folgen, aber nichts passiert, wenn ich den zweiten Teil des Codes ausführe. Das Skript gibt keinen Fehler oder Status zurück. Wie sollte ich versuchen zu verstehen, was passiert? – AlvaroAV

1

Wahrscheinlich können Sie bereits einen SMTP-Server auf dem Host ausgeführt haben, die Sie gerade arbeiten. Wenn Sie ls -l /usr/sbin/sendmail tun zeigt es, dass eine ausführbare Datei (oder Symlink zu einer anderen Datei) an dieser Stelle existiert? Wenn dies der Fall ist, können Sie möglicherweise damit ausgehende E-Mails senden. Probieren Sie /usr/sbin/sendmail [email protected] < /path/to/file.txt aus, um die in /path/to/file.txt enthaltene Nachricht an die Adresse "[email protected]" zu senden ("/path/to/file.txt" sollte eine RFC-konforme E-Mail-Nachricht sein). Wenn das funktioniert, können Sie/usr/sbin/sendmail verwenden, um E-Mails von Ihrem Python-Skript zu senden - entweder durch Öffnen eines Handles für/usr/sbin/sendmail und Schreiben der Nachricht oder einfach durch Ausführen des obigen Befehls von Ihrem Python-Skript über einen Systemaufruf.

Verwandte Themen