如何使用Python的smtplib发送电子邮件中的换行符? [英] How to get line breaks in e-mail sent using Python's smtplib?
问题描述
一切顺利,电子邮件终于似乎全部在一行。
我通过 \\\
添加换行符,它适用于文本文件,但不适用于电子邮件。
你知道可能的原因是什么?
这是我的代码:
import smtplib,sys
import traceback
def send_error(发件人,收件人,标题,正文):
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\\\\
+ 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 =亲爱的学生, \\ n请发送您的报告\感谢您的关注
打开('student.txt','w')。write(body)
headers = [From :+ sender,
主题:+ subject,
To:+ recipient,
MIME-Version:1.0,
Content-Type: html]
headers =\r\\\
.join(headers)
send_error(发件人,收件人,标题,正文)
您的邮件正文声明为HTML内容(Content-Type:text / html
)。换行符的HTML代码是 < br>
。您应该将您的内容类型更改为 text / plain
或使用HTML标记进行换行符,而不是简单的 \\\
因为后者在呈现HTML文档时被忽略。
作为附注,还可以看看<一个href =http://docs.python.org/2/library/email.html =nofollow noreferrer>电子邮件包。有些类可以简化电子邮件的定义( with例如:
例如,您可以尝试(未经测试):
code> import smtplib
from email.mime.text import MIMEText
#define content
recipients = [recipient_id@yahoo.com]
发件人=sender_id@gmail.com
subject =report reminder
body =
亲爱的学生,
请发送您的报告
感谢您的注意
#补充消息
msg = MIMEText(body)
msg ['Subject'] = subject
msg ['From '] = sender
msg ['To'] =,.join(recipient)
#发送
会话= smtplib.SMTP('smtp.gmail.com' ,587)
session.starttls()
session.login(发件人,我的密码)
send_it = session.sendmail(发件人,收件人,msg.as_string())
session.quit()
I have written a script that writes a message to a text file and also sends it as an email. Everything goes well, except the email finally appears to be all in one line.
I add line breaks by \n
and it works for the text file but not for the email.
Do you know what could be the possible reason?
Here's my code:
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)
You have your message body declared to have HTML content ("Content-Type: text/html"
). The HTML code for line break is <br>
. You should either change your content type to text/plain
or use the HTML markup for line breaks instead of plain \n
as the latter gets ignored when rendering a HTML document.
As a side note, also have a look at the email package. There are some classes that can simplify the definition of E-Mail messages for you (with examples).
For example you could try (untested):
import smtplib
from email.mime.text import MIMEText
# define content
recipients = ["recipient_id@yahoo.com"]
sender = "sender_id@gmail.com"
subject = "report reminder"
body = """
Dear Student,
Please send your report
Thank you for your attention
"""
# make up message
msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = ", ".join(recipients)
# sending
session = smtplib.SMTP('smtp.gmail.com', 587)
session.starttls()
session.login(sender, 'my password')
send_it = session.sendmail(sender, recipients, msg.as_string())
session.quit()
这篇关于如何使用Python的smtplib发送电子邮件中的换行符?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!