簡體   English   中英

從python中的函數調用時,郵件傳遞時沒有主題

[英]mail is delivering without subject when calling from function in python

我有一個示例代碼如下:

import smtplib
def send_mail(PASS,FAIL):
    me = "XXXX"
    you = "YYYY"
    print "Start of program"
    server = smtplib.SMTP('ZZZ', 25)
    total_testcase = "15/12"
    print total_testcase
    message = """From: From Person <XXXX>
    To: To Person <YYYY>
    Subject: mail testing

    %s
    """ %total_testcase
    print message
    server.sendmail(me, you, message)


send_mail(8,9)

當我發送電子郵件時,它沒有主題地傳遞

但是,如果我使用代碼而不是函數調用-那么它可以很好地處理主題。 我在函數調用中缺少的任何內容。 請提出建議。

您遇到的問題是用三引號引起來的多行字符串。 將其放在函數中時,您要縮進其所有行,以便它們與其余代碼對齊。 但是,這會導致在第一行之后的消息的每一行的開頭出現不必要的(和不合適的)空格。

SMTP郵件標頭中的前導空格表示應繼續前一個標頭。 這意味着您的前三行全部合並到From標頭中。

您可以通過省略前導空格來解決此問題:

def send_mail(PASS,FAIL):
    #...
    message = """From: From Person <XXXX>
To: To Person <YYYY>
Subject: mail testing

%s
""" % total_testcase
    #...

或者通過使用\\n代替字符串中的實際換行符:

message = "From: From Person <XXXX>\nTo: To Person <YYYY>\nSubject: mail testing\n\n%s" % total_testcase

或最后,您可以保留當前代碼以生成消息,但隨后應去除開頭的空格:

def send_mail(PASS,FAIL):
    #...
    message = """From: From Person <XXXX>
    To: To Person <YYYY>
    Subject: mail testing

    %s
    """ % total_testcase
    message = "\n".join(line if not line.startswith("    ") else line[4:]
                        for line in message.splitlines())
    #...

最后一個選項有些脆弱,因為它可能會從total_testcase字符串(如果有多行)中total_testcase行中所需的空格,而不只是由於多行字符串而添加了空格。 如果您使用制表符進行縮進或除四個空格外的其他內容,它也會中斷。 我不確定我是否真的會推薦這種方法。

最后一種方法的一個更好的版本是使用標准庫中的textwrap.dedent函數 它刪除字符串中每行開頭出現的所有縮進(但僅刪除所有行共有的縮進)。 這確實需要對創建message進行一些小的更改,因為您需要第一行與所有其他行具有相同的前導空格(您還需要避免添加任何新行,而不必在total_testcase的多余文本中total_testcase )。

這是代碼:

import textwrap

def send_mail(PASS,FAIL):
    #...
    # backslash after the quotes on the first line avoids a empty line at the start
    message = """\
    From: From Person <XXXX>
    To: To Person <YYYY>
    Subject: mail testing

    %s
    """ % total_testcase
    message = textwrap.dedent(message)
    #...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM