Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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发送的电子邮件中获得换行符';是smtplib吗?_Python_Email_Python 2.7_Smtplib - Fatal编程技术网

如何在使用Python发送的电子邮件中获得换行符';是smtplib吗?

如何在使用Python发送的电子邮件中获得换行符';是smtplib吗?,python,email,python-2.7,smtplib,Python,Email,Python 2.7,Smtplib,我写了一个脚本,将消息写入文本文件,并将其作为电子邮件发送。 一切都很顺利,除了电子邮件最终似乎都在一行中 我通过\n添加换行符,它适用于文本文件,但不适用于电子邮件。 你知道可能的原因是什么吗 这是我的密码: import smtplib, sys import traceback def send_error(sender, recipient, headers, body): SMTP_SERVER = 'smtp.gmail.com' SMTP_PORT = 587

我写了一个脚本,将消息写入文本文件,并将其作为电子邮件发送。 一切都很顺利,除了电子邮件最终似乎都在一行中

我通过
\n
添加换行符,它适用于文本文件,但不适用于电子邮件。 你知道可能的原因是什么吗


这是我的密码:

import smtplib, sys
import traceback
def send_error(sender, recipient, headers, body):

    SMTP_SERVER = 'smtp.gmail.com'
    SMTP_PORT = 587
    session = smtplib.SMTP('smtp.gmail.com', 587)
    session.ehlo()
    session.starttls()
    session.ehlo
    session.login(sender, 'my password')
    send_it = session.sendmail(sender, recipient, headers + "\r\n\r\n" +  body)
    session.quit()
    return send_it


SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 587
sender = 'sender_id@gmail.com'
recipient = 'recipient_id@yahoo.com'
subject = 'report'
body = "Dear Student, \n Please send your report\n Thank you for your attention"
open('student.txt', 'w').write(body) 

headers = ["From: " + sender,
               "Subject: " + subject,
               "To: " + recipient,
               "MIME-Version: 1.0",
               "Content-Type: text/html"]
headers = "\r\n".join(headers)
send_error(sender, recipient, headers, body)

不幸的是,并非每种类型的程序或应用程序都使用与python相同的标准化

查看您的问题,我注意到您的标题是:
“内容类型:text/html”

这意味着您需要为新行使用HTML样式的标记,这些标记称为换行符<代码>

你的文字应该是:

"Dear Student, <br> Please send your report<br> Thank you for your attention"

您已将消息正文声明为包含HTML内容(
“内容类型:text/HTML”
)。换行符的HTML代码为。您应该将内容类型更改为
text/plain
,或者将HTML标记用于换行,而不是纯
\n
,因为后者在呈现HTML文档时会被忽略


作为旁注,还可以看一下。有一些类可以为您简化电子邮件的定义()

例如,您可以尝试(未经测试):


将内容类型标题设置为
内容类型:text/plain
(结尾为
\r\n
)允许我发送多行纯文本电子邮件。

Outlook将从它认为是额外内容的纯文本中删除换行符

您可以尝试在下面更新,使线条看起来像子弹。这对我很管用

body = "Dear Student, \n- Please send your report\n- Thank you for your attention"

在我的例子中,
'\r\n'
不起作用,但
'\r\n'
起作用。所以我的代码是:

from email.mime.text import MIMEText
body = 'Dear Student,\r\r\nPlease send your report\r\r\nThank you for your attention'
msg.attach(MIMEText(body, 'plain'))

邮件以多行形式书写,并在Outlook中正确显示

非常感谢你<代码>\r\n对我不起作用,但

对我起作用。
body = "Dear Student, \n- Please send your report\n- Thank you for your attention"
from email.mime.text import MIMEText
body = 'Dear Student,\r\r\nPlease send your report\r\r\nThank you for your attention'
msg.attach(MIMEText(body, 'plain'))