Python: 在使用 smtplib 模块发送电子邮件时没有显示“ subject”

我能够使用 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()

我应该如何写“ server.sendmail”来包括主题以及发送的电子邮件。

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

125307 次浏览

See the note at the bottom of smtplib's documentation:

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.

Here's the link to the examples section of email's documentation, which indeed shows the creation of a message with a subject line. https://docs.python.org/3/library/email.examples.html

It appears that smtplib doesn't support subject addition directly and expects the msg to already be formatted with a subject, etc. That's where the email module comes in.

Attach it as a header:

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

and then:

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

Also consider using standard Python module email - it will help you a lot while composing emails.

You should probably modify your code to something like this:

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())

Obviously, the <> variables need to be actual string values, or valid variables, I just filled them in as place holders. This works for me when sending messages with subjects.

I think you have to include it in the message:

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"

code from: http://www.tutorialspoint.com/python/python_sending_email.htm

try this:

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())
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()

This will work with Gmail and Python 3.6+ using the new "EmailMessage" object:

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()

In case of wrapping it in a function, this should work as a template.

def send_email(login, password, destinations, subject, message):
server = smtplib.SMTP_SSL("smtp.gmail.com", 465)


server.login(login, password)
message = 'Subject: {}\n\n{}'.format(subject, message)


for destination in destinations:
print("Sending email to:", destination)
server.sendmail(login, destinations, message)


server.quit()

try this out :

from = "myemail@site.com"
to= "someemail@site.com"


subject = "Hello there!"
body = "Have a good day."


message = "Subject:" + subject + "\n" + body




server.sendmail(from, , message)
server.quit()