如何使用Python的smtplib发送电子邮件中的换行符? [英] How to get line breaks in e-mail sent using Python's smtplib?

查看:6887
本文介绍了如何使用Python的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆