Python: “subject” not shown when sending email using smtplib module

后端 未结 7 2095

I am successfully able to send email using the smtplib module. But when the emial is sent, it does not include the subject in the email sent.

import smtplib
         


        
相关标签:
7条回答
  • 2020-12-04 21:20

    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

    0 讨论(0)
  • 2020-12-04 21:24

    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.

    0 讨论(0)
  • 2020-12-04 21:26

    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()
    
    0 讨论(0)
  • 2020-12-04 21:37

    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.

    0 讨论(0)
  • 2020-12-04 21:37
     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()
    
    0 讨论(0)
  • 2020-12-04 21:44

    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.

    0 讨论(0)
提交回复
热议问题