Python 巨蟒:“;“主题”;使用smtplib模块发送电子邮件时不显示

Python 巨蟒:“;“主题”;使用smtplib模块发送电子邮件时不显示,python,smtplib,Python,Smtplib,我能够使用smtplib模块成功发送电子邮件。但在发送电子邮件时,电子邮件中不包含主题 import smtplib SERVER = <localhost> FROM = <from-address> TO = [<to-addres>] SUBJECT = "Hello!" message = "Test" TEXT = "This message was sent with Python's smtplib." server = smtplib

我能够使用smtplib模块成功发送电子邮件。但在发送电子邮件时,电子邮件中不包含主题

import smtplib

SERVER = <localhost>

FROM = <from-address>
TO = [<to-addres>]

SUBJECT = "Hello!"

message = "Test"

TEXT = "This message was sent with Python's smtplib."
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()
导入smtplib
服务器=
从=
TO=[]
主题=“你好!”
message=“测试”
TEXT=“此消息与Python的smtplib一起发送。”
server=smtplib.SMTP(服务器)
server.sendmail(发件人、收件人、邮件)
server.quit()
我应该如何写“server.sendmail”,以便在发送的电子邮件中也包含主题

import smtplib

SERVER = <localhost>

FROM = <from-address>
TO = [<to-addres>]

SUBJECT = "Hello!"

message = "Test"

TEXT = "This message was sent with Python's smtplib."
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()

如果我使用server.sendmail(FROM、TO、message、SUBJECT),它会给出关于“smtplib.smtpsenderrefuse”的错误信息参见smtplib文档底部的注释:

通常,您需要使用电子邮件包的功能来构造电子邮件,然后将其转换为字符串并通过sendmail()发送;请参阅电子邮件:示例。

这里是到
电子邮件
文档的示例部分的链接,它确实显示了主题行消息的创建

smtplib似乎不支持直接添加主题,并希望消息已使用主题等进行格式化。这就是
电子邮件模块的作用。

将其作为标题附加:

message = 'Subject: {}\n\n{}'.format(SUBJECT, TEXT)
然后:

server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()

也考虑使用标准的Python模块——它在编写电子邮件时会对你有很大帮助。

你应该修改你的代码到这样的事情:

from smtplib import SMTP as smtp
from email.mime.text import MIMEText as text

s = smtp(server)

s.login(<mail-user>, <mail-pass>)

m = text(message)

m['Subject'] = 'Hello!'
m['From'] = <from-address>
m['To'] = <to-address>

s.sendmail(<from-address>, <to-address>, m.as_string())
从smtplib将SMTP导入为SMTP
从email.mime.text导入MIMEText作为文本
s=smtp(服务器)
s、 登录(,)
m=文本(消息)
m['Subject']=“你好!”
m['从']=
m['To']=
s、 sendmail(,m.as_string())

显然,
变量需要是实际的字符串值或有效的变量,我只是将它们作为占位符填写。这在发送主题邮件时适用。

我认为您必须将其包含在邮件中:

import smtplib

message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test

This is an e-mail message to be sent in HTML format

<b>This is HTML message.</b>
<h1>This is headline.</h1>
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"
导入smtplib
message=“”发件人:发件人
致:致人
MIME版本:1.0
内容类型:text/html
主题:SMTP HTML电子邮件测试
这是以HTML格式发送的电子邮件
这是一条HTML消息。
这是标题。
"""
尝试:
smtpObj=smtplib.SMTP('localhost')
smtpObj.sendmail(发送者、接收者、消息)
打印“已成功发送电子邮件”
除SMTPException外:
打印“错误:无法发送电子邮件”
代码来源:

请尝试以下操作:

import smtplib
from email.mime.multipart import MIMEMultipart
msg = MIMEMultipart()
msg['From'] = 'sender_address'
msg['To'] = 'reciver_address'
msg['Subject'] = 'your_subject'
server = smtplib.SMTP('localhost')
server.sendmail('from_addr','to_addr',msg.as_string())

这将与Gmail和Python 3.6+一起使用,使用新的“EmailMessage”对象:


对于sendmail方法,我使用以下方法(在3.9中)。在msg中包含主题,然后添加两行新行:

email_connection.sendmail(
    from_addr=my_email,
    to_addrs=to_email,
    msg="Subject:Working subject\n\nTest 2 from info email address with subject."
)

我收到以下错误:从email.mime.text导入MIMEText作为文本导入错误:没有名为mime的模块。text@nsh-使用什么版本的Python?我在这个特定的安装中使用2.6.6。完全有可能它在3.x中的位置稍有不同。那么消息的正文呢?这是怎么回事?我最终在当前python版本的正文中加入了这一点,该功能现在由email.message.MailMessage管理。一个观察:例如,from、to和subject字段必须位于变量“message”的最开头,否则,这些字段将不会被解释为预期的字段。我有过只插入“Subject”字段的经验,而不是在变量的开头,消息到达收件人的邮箱时没有主题。干杯。这是Python 3.6+的最佳答案。谢谢
email_connection.sendmail(
    from_addr=my_email,
    to_addrs=to_email,
    msg="Subject:Working subject\n\nTest 2 from info email address with subject."
)