Python:使用smtplib模块发送电子邮件时未显示"主题"

nsh*_*nsh 58 python smtplib

我成功地使用smtplib模块发送电子邮件.但是,当发送emial时,它不包括发送的电子邮件中的主题.

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()
Run Code Online (Sandbox Code Playgroud)

如何编写"server.sendmail"以在发送的电子邮件中包含SUBJECT.

如果我使用server.sendmail(FROM,TO,message,SUBJECT),则会出现关于"smtplib.SMTPSenderRefused"的错误

Rom*_*huk 128

将其作为标题附加:

message = 'Subject: {}\n\n{}'.format(SUBJECT, TEXT)
Run Code Online (Sandbox Code Playgroud)

然后:

server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()
Run Code Online (Sandbox Code Playgroud)

还要考虑使用标准的Python模块email- 它可以在编写电子邮件时帮助你很多.

  • 不幸的是,在 2021 年,这会将主题添加到消息正文中。 (4认同)

eme*_*hex 20

这将适用于 Gmail 和 Python 3.6+ 使用新的“EmailMessage”对象:

import smtplib
from email.message import EmailMessage

msg = EmailMessage()
msg.set_content('This is my message')

msg['Subject'] = 'Subject'
msg['From'] = "me@gmail.com"
msg['To'] = "you@gmail.com"

# Send the message via our own SMTP server.
server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server.login("me@gmail.com", "password")
server.send_message(msg)
server.quit()
Run Code Online (Sandbox Code Playgroud)

  • 这是Python 3.6+ 的最佳答案。谢谢! (2认同)

Hac*_*lic 15

试试这个:

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())
Run Code Online (Sandbox Code Playgroud)

  • 信息正文怎么样?那去哪儿了? (4认同)
  • 我最后跟着这个放入了身体https://docs.python.org/2/library/email-examples.html#id5 (2认同)

g.d*_*d.c 7

您可能应该将代码修改为以下内容:

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())
Run Code Online (Sandbox Code Playgroud)

显然,<>变量需要是实际的字符串值或有效变量,我只是将它们填充为占位符.这对我发送带主题的消息很有用.


小智 6

import smtplib
 
# creates SMTP session 

List item

s = smtplib.SMTP('smtp.gmail.com', 587)
 
# start TLS for security   
s.starttls()
 
# Authentication  
s.login("login mail ID", "password")
 
 
# message to be sent   
SUBJECT = "Subject"   
TEXT = "Message body"
 
message = 'Subject: {}\n\n{}'.format(SUBJECT, TEXT)
 
# sending the mail    
s.sendmail("from", "to", message)
 
# terminating the session    
s.quit()
Run Code Online (Sandbox Code Playgroud)


jef*_*150 5

请参阅 smtplib 文档底部的注释:

In general, you will want to use the email package’s features to construct an email message, which you can then convert to a string and send via sendmail(); see email: Examples.

这是email's 文档的示例部分的链接,它确实显示了带有主题行的消息的创建。https://docs.python.org/3/library/email.examples.html

似乎 smtplib 不直接支持主题添加,并希望 msg 已经使用主题等进行格式化。这就是email模块的用武之地。