Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 缩进导致在方法中发送电子邮件时出现问题_Python_Smtp - Fatal编程技术网

Python 缩进导致在方法中发送电子邮件时出现问题

Python 缩进导致在方法中发送电子邮件时出现问题,python,smtp,Python,Smtp,我正在尝试使用Pythion smtp库发送电子邮件。我有下面的代码,但不知怎的,当我收到一封电子邮件时,它没有“To”,“Subject”和“Body”内容,因为它们丢失了。我认为消息字符串的构造方式有问题 import smtplib import socket FROM = "from@host.com" TO = ["to@host.com"] def send_email(): hostname = socket.getfqdn() text = "Hello"

我正在尝试使用Pythion smtp库发送电子邮件。我有下面的代码,但不知怎的,当我收到一封电子邮件时,它没有
“To”
“Subject”
“Body”
内容,因为它们丢失了。我认为
消息
字符串的构造方式有问题

import smtplib
import socket

FROM = "from@host.com"
TO = ["to@host.com"]

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 = "from@host.com"
TO = ["to@host.com"]
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: from@host.com
    To: to@host.com
    Subject: Error on machineA

    Hello
From: from@host.com
To: to@host.com
Subject: Test! machineA

Testing.
这是我在第二个代码中看到的:

    From: from@host.com
    To: to@host.com
    Subject: Error on machineA

    Hello
From: from@host.com
To: to@host.com
Subject: Test! machineA

Testing.
当我将它放入一个方法中时,如何在第一个代码中修复它

更新:

我试过使用下面的代码,但它给出了一个错误,即
打印消息上的缩进错误

import smtplib
import socket

FROM = "from@host.com"
TO = ["to@host.com"]

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

您可以删除缩进:

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
'''
message=''<==无反斜杠
东西
'''

使用stdlib
电子邮件
包帮助您将邮件构建为正确的SMTP有效负载(邮件头、编码、部分等)


标准文档或stackoverflow中有大量示例。

函数中的文字“三引号”字符串包括缩进。我根据您的建议更新了我的问题,但编译时缩进出现错误?我更新的代码有什么问题吗?听起来字符串还是有问题。