2017-10-06 33 views
0

我想用Pythion smtp庫發送電子郵件。我得到了下面的代碼,但不知何故,當我收到一封電子郵件時,它缺少"To""Subject""Body"內容。我相信構造字符串message的方式有些問題。縮進導致問題,同時發送電子郵件的方法

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

但是當我使用完全相同的下面的代碼,它讓我確信的東西是錯誤與我上面的代碼,當我把一切都放在一個方法的工作沒有任何問題的罰款。我相信縮進會導致消息字符串被構造的方式或其他我無法弄清楚的問題。

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

這是我看到的第一個代碼。如果你看仔細它有很多的每個標籤前面的空格比什麼獲取與第二代碼打印出來:

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

    Hello 

這是我第二個代碼中看到:

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

Testing. 

怎麼辦當我將它放入方法中時,我在第一個代碼中解決了這個問題?

更新:

我用下面的代碼嘗試,但它給了我錯誤關於縮進是錯誤的print message

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

函數中的字面'三引號'字符串包含縮進。 – quamrana

回答

1

你被允許刪除縮進:

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

而且,不知道你需要的反斜槓?

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

我用你的建議更新了我的問題,但它在編譯時給我縮進的錯誤?我的更新代碼中有任何錯誤? – john

+0

它仍然聽起來像字符串有問題。 – quamrana