f.a*_*uri 23 python email smtplib python-2.7
我编写了一个脚本,将消息写入文本文件,并将其作为电子邮件发送.一切顺利,除了电子邮件似乎总是在一行.
我添加换行符\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)
Run Code Online (Sandbox Code Playgroud)
Inb*_*ose 26
对我们所有人来说不幸的是,并非每种类型的程序或应用程序都使用与python相同的标准化.
看看你的问题,我注意到你的标题是: "Content-Type: text/html"
这意味着您需要为新行使用HTML样式标记,这些标记称为换行符. <br>
你的文字应该是:
"Dear Student, <br> Please send your report<br> Thank you for your attention"
Run Code Online (Sandbox Code Playgroud)
如果您更愿意使用字符类型换行,则必须将标题更改为: "Content-Type: text/plain"
您仍然需要将新行字符从单个\n
更改为\r\n
电子邮件中使用的double .
你的文字是:
"Dear Student, \r\n Please send your report\r\n Thank you for your attention"
Run Code Online (Sandbox Code Playgroud)
moo*_*eep 18
您已将消息体声明为具有HTML内容("Content-Type: text/html"
).换行符的HTML代码是<br>
.您应该将内容类型更改为text/plain
或使用HTML标记进行换行而不是简单,\n
因为后者在呈现HTML文档时会被忽略.
作为旁注,还要看一下电子邮件包.有些类可以为您简化电子邮件的定义(使用示例).
例如,您可以尝试(未经测试):
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()
Run Code Online (Sandbox Code Playgroud)
小智 6
在我的情况下'\r\n'
没有用,但'\r\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'))
Run Code Online (Sandbox Code Playgroud)
该消息以多行书写,并在 Outlook 中正确显示。
归档时间: |
|
查看次数: |
34898 次 |
最近记录: |