简体   繁体   中英

Unable to send email from python

I am using the following code to send email from python program in localhost,

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

me = "tonyr1291@gmail.com"
you = "testaccount@gmail.com"


msg = MIMEMultipart('alternative')
msg['Subject'] = "Link"
msg['From'] = me
msg['To'] = you

text = "Hi!\nHow are you?\nHere is the link you wanted:\nhttp://www.python.org"
html = """\
<html>
  <head></head>
   <body>
    <p>Hi!<br>
       How are you?<br>
       Here is the <a href="http://www.python.org">link</a> you wanted.
    </p>
  </body>
</html>
"""

part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')

msg.attach(part1)
msg.attach(part2)

s = smtplib.SMTP('localhost',5000)
s.sendmail(me, you, msg.as_string())
s.quit()

This code is from python documentation.

When I run this code, it is running continuously but no email is sent.

I would like to know, do I have to make some other configurations anywhere else other than this code.

I am not seeing any error.

I am using python 2.7

This is given as a solution in Sending HTML email using Python

It seems that you're using a gmail id. Now, the SMTP server is not your tornado server. it is the server of the email provider.

You can search online for the smtp settings for the gmail server and get the following:

  • Server name : smtp.gmail.com
  • Server port for SSL : 465
  • Server port for TLS : 587

I've gotten them from http://email.about.com/od/accessinggmail/f/Gmail_SMTP_Settings.htm

Also, you need to ensure you do not enable gmail's 2 step authentication when doing this, otherwise it will fail. Also, gmail specifically may require you to send other things like ehlo and starttls. You can find a previous answer with a complete example here : How to send an email with Gmail as provider using Python?

    import smtplib

    gmail_user = user
    gmail_pwd = pwd
    FROM = user
    TO = recipient if type(recipient) is list else [recipient]
    SUBJECT = subject
    TEXT = body

    # Prepare actual message
    message = """\From: %s\nTo: %s\nSubject: %s\n\n%s
    """ % (FROM, ", ".join(TO), SUBJECT, TEXT)
    try:
        server = smtplib.SMTP("smtp.gmail.com", 587)
        server.ehlo()
        server.starttls()
        server.login(gmail_user, gmail_pwd)
        server.sendmail(FROM, TO, message)
        server.close()
        print 'successfully sent the mail'
    except:
        print "failed to send mail"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM