2017-10-06 1 views
0

Ich versuche, eine E-Mail mit Pythion SMTP-Bibliothek zu senden. Ich habe unten Code aber irgendwie, wenn ich eine E-Mail bekomme, hat es "To", "Subject" und "Body" Inhalt nicht, da sie fehlen. Ich glaube, etwas stimmt nicht mit der Art und Weise, wie message Strings aufgebaut sind.Einrückung verursacht Probleme beim Senden von E-Mails in einer Methode

import smtplib 
import socket 

FROM = "[email protected]" 
TO = ["[email protected]"] 

def send_email(): 
    hostname = socket.getfqdn() 
    text = "Hello" 
    subject = "Error on %s " % (hostname) 
    print subject 

    # Prepare actual message 
    message = """\ 
    From: %s 
    To: %s 
    Subject: %s 

    %s 
    """ % (FROM, ", ".join(TO), subject, text) 

    smtp_server = "" 
    if ".dev" not in hostname: 
     smtp_server = "abc.host.com" 
    else: 
     smtp_server = "pqr.host.com" 

    # Send the mail 
    server = smtplib.SMTP(smtp_server) 
    server.sendmail(FROM, TO, message) 
    server.quit() 

send_email() 

Aber wenn ich genau die gleichen Code unten verwenden, funktioniert es ohne Probleme in Ordnung so ich bin sicher, dass etwas mit meinem obigen Code falsch ist, wenn ich alles in einem Verfahren setzen. Ich glaube, Einrückung verursacht Probleme mit der Art, wie Nachrichten-String konstruiert wird oder etwas anderes, das ich nicht herausfinden kann.

import smtplib 
import socket 

SERVER = "abc.host.com" 

FROM = "[email protected]" 
TO = ["[email protected]"] 
SUBJECT = "Test! %s " % (socket.getfqdn()) 
TEXT = "Testing." 

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

Hier ist, was ich mit dem ersten Code sehe. Wenn Sie genau sehen es viele Räume vor jedem Tag hat im Vergleich zu dem, was mit dem zweiten Code ausgedruckt wird:

From: [email protected] 
    To: [email protected] 
    Subject: Error on machineA 

    Hello 

Dies ist, was ich mit dem zweiten Code sehen:

From: [email protected] 
To: [email protected] 
Subject: Test! machineA 

Testing. 

Wie Ich repariere das im ersten Code, wenn ich es in eine Methode setze?

Update:

ich mit folgendem Code versucht, aber es gibt mir eine Fehlermeldung über Einbuchtung auf print message falsch ist.

import smtplib 
import socket 

FROM = "[email protected]" 
TO = ["[email protected]"] 

def send_email(): 
    hostname = socket.getfqdn() 
    text = "Hello" 
    subject = "Error on %s " % (hostname) 
    print subject 

    # Prepare actual message 
    message = """\ 
From: %s 
To: %s 
Subject: %s 

%s 
""" % (FROM, ", ".join(TO), subject, text) 

    print message 
    smtp_server = "" 
    if ".dev" not in hostname: 
     smtp_server = "abc.host.com" 
    else: 
     smtp_server = "pqr.host.com" 

    # Send the mail 
    server = smtplib.SMTP(smtp_server) 
    server.sendmail(FROM, TO, message) 
    server.quit() 

send_email() 
+0

Ihre literale Three-Quote-Zeichenfolge in der Funktion enthält die Einzüge. – quamrana

Antwort

1

Sie die Einzüge entfernen erlaubt:

def send_email(): 
    # stuff ... 

    # Prepare actual message 
    message = """\ 
From: %s 
- other stuff... 

""" % (FROM, ", ".join(TO), subject, text) 

    smtp_server = "" 

    # more stuff... 
    server.sendmail(FROM, TO, message) 
    server.quit() 

Auch nicht, dass Sie den Backslash müssen?

message = ''' < == no backslash 
stuff 
''' 
+0

Ich habe meine Frage mit Ihrem Vorschlag aktualisiert, aber es gibt mir einen Fehler beim Einrücken während des Kompilierens? Alles falsch in meinem aktualisierten Code? – john

+0

Es klingt immer noch so, als ob etwas mit der Saite nicht stimmt. – quamrana

Verwandte Themen