Sending mail from Python using SMTP

后端 未结 13 777
半阙折子戏
半阙折子戏 2020-11-28 17:27

I\'m using the following method to send mail from Python using SMTP. Is it the right method to use or are there gotchas I\'m missing ?

from smtplib import SM         


        
相关标签:
13条回答
  • following code is working fine for me:

    import smtplib
    
    to = 'mkyong2002@yahoo.com'
    gmail_user = 'mkyong2002@gmail.com'
    gmail_pwd = 'yourpassword'
    smtpserver = smtplib.SMTP("smtp.gmail.com",587)
    smtpserver.ehlo()
    smtpserver.starttls()
    smtpserver.ehlo() # extra characters to permit edit
    smtpserver.login(gmail_user, gmail_pwd)
    header = 'To:' + to + '\n' + 'From: ' + gmail_user + '\n' + 'Subject:testing \n'
    print header
    msg = header + '\n this is test msg from mkyong.com \n\n'
    smtpserver.sendmail(gmail_user, to, msg)
    print 'done!'
    smtpserver.quit()
    

    Ref: http://www.mkyong.com/python/how-do-send-email-in-python-via-smtplib/

    0 讨论(0)
  • 2020-11-28 18:00

    you can do like that

    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    
    server = smtplib.SMTP('mail.servername.com', 25)
    server.ehlo()
    server.starttls()
    
    server.login('username', 'password')
    from = 'me@servername.com'
    to = 'mygfriend@servername.com'
    body = 'That A Message For My Girl Friend For tell Him If We will go to eat Something This Nigth'
    subject = 'Invite to A Diner'
    msg = MIMEText(body,'plain','utf-8')
    msg['Subject'] = Header(subject, 'utf-8')
    msg['From'] = Header(from, 'utf-8')
    msg['To'] = Header(to, 'utf-8')
    message = msg.as_string()
    server.sendmail(from, to, message)
    
    0 讨论(0)
  • 2020-11-28 18:03

    The method I commonly use...not much different but a little bit

    import smtplib
    from email.MIMEMultipart import MIMEMultipart
    from email.MIMEText import MIMEText
    
    msg = MIMEMultipart()
    msg['From'] = 'me@gmail.com'
    msg['To'] = 'you@gmail.com'
    msg['Subject'] = 'simple email in python'
    message = 'here is the email'
    msg.attach(MIMEText(message))
    
    mailserver = smtplib.SMTP('smtp.gmail.com',587)
    # identify ourselves to smtp gmail client
    mailserver.ehlo()
    # secure our email with tls encryption
    mailserver.starttls()
    # re-identify ourselves as an encrypted connection
    mailserver.ehlo()
    mailserver.login('me@gmail.com', 'mypassword')
    
    mailserver.sendmail('me@gmail.com','you@gmail.com',msg.as_string())
    
    mailserver.quit()
    

    That's it

    0 讨论(0)
  • 2020-11-28 18:04

    The example code which i did for send mail using SMTP.

    import smtplib, ssl
    
    smtp_server = "smtp.gmail.com"
    port = 587  # For starttls
    sender_email = "sender@email"
    receiver_email = "receiver@email"
    password = "<your password here>"
    message = """ Subject: Hi there
    
    This message is sent from Python."""
    
    
    # Create a secure SSL context
    context = ssl.create_default_context()
    
    # Try to log in to server and send email
    server = smtplib.SMTP(smtp_server,port)
    
    try:
        server.ehlo() # Can be omitted
        server.starttls(context=context) # Secure the connection
        server.ehlo() # Can be omitted
        server.login(sender_email, password)
        server.sendmail(sender_email, receiver_email, message)
    except Exception as e:
        # Print any error messages to stdout
        print(e)
    finally:
        server.quit()
    
    0 讨论(0)
  • 2020-11-28 18:06

    The main gotcha I see is that you're not handling any errors: .login() and .sendmail() both have documented exceptions that they can throw, and it seems like .connect() must have some way to indicate that it was unable to connect - probably an exception thrown by the underlying socket code.

    0 讨论(0)
  • 2020-11-28 18:07

    The script I use is quite similar; I post it here as an example of how to use the email.* modules to generate MIME messages; so this script can be easily modified to attach pictures, etc.

    I rely on my ISP to add the date time header.

    My ISP requires me to use a secure smtp connection to send mail, I rely on the smtplib module (downloadable at http://www1.cs.columbia.edu/~db2501/ssmtplib.py)

    As in your script, the username and password, (given dummy values below), used to authenticate on the SMTP server, are in plain text in the source. This is a security weakness; but the best alternative depends on how careful you need (want?) to be about protecting these.

    =======================================

    #! /usr/local/bin/python
    
    
    SMTPserver = 'smtp.att.yahoo.com'
    sender =     'me@my_email_domain.net'
    destination = ['recipient@her_email_domain.com']
    
    USERNAME = "USER_NAME_FOR_INTERNET_SERVICE_PROVIDER"
    PASSWORD = "PASSWORD_INTERNET_SERVICE_PROVIDER"
    
    # typical values for text_subtype are plain, html, xml
    text_subtype = 'plain'
    
    
    content="""\
    Test message
    """
    
    subject="Sent from Python"
    
    import sys
    import os
    import re
    
    from smtplib import SMTP_SSL as SMTP       # this invokes the secure SMTP protocol (port 465, uses SSL)
    # from smtplib import SMTP                  # use this for standard SMTP protocol   (port 25, no encryption)
    
    # old version
    # from email.MIMEText import MIMEText
    from email.mime.text import MIMEText
    
    try:
        msg = MIMEText(content, text_subtype)
        msg['Subject']=       subject
        msg['From']   = sender # some SMTP servers will do this automatically, not all
    
        conn = SMTP(SMTPserver)
        conn.set_debuglevel(False)
        conn.login(USERNAME, PASSWORD)
        try:
            conn.sendmail(sender, destination, msg.as_string())
        finally:
            conn.quit()
    
    except:
        sys.exit( "mail failed; %s" % "CUSTOM_ERROR" ) # give an error message
    
    0 讨论(0)
提交回复
热议问题