Python: Code Snippets - Send Email (SMTP)

Saturday 22nd July 2017 5:58pm

This script is used to send emails using an SMTP (Simple Mail Transfer Protocol). To send emails you will need to supply the following information:

  • Email Addres to Send To
  • Email Addres to be Sent From
  • Email Account Username
  • Email Account Password
  • SMTP Server
  • SMTP Port Number

To run this script copy the code below and save to a file called send_mail.py

send_mail.py:

#!/usr/bin/env python

# SendEmail
# A quick way to send emails

# Date: 07 March 2016
# Written By: Phantom Raspberry Blower

import smtplib

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage


class SendEmail():

    # Initialize object
    def __init__(self, verbose):
        self.verbose = verbose

    # Used to send email
    def send_email(self,
                   send_to,
                   sent_from,
                   username,
                   password,
                   smtp_server,
                   port,
                   subject,
                   message,
                   output_path='',
                   filename='',
                   image_full_path='',
                   image_type='jpg',
                   hyper_txt=''):
        if len(send_to) > 0:
            # Send email with images as attachments
            try:
                msg = MIMEMultipart('related')
                msg["From"] = sent_from
                msg["To"] = send_to
                msg["Subject"] = subject
                msg.preamble = "The Phantom Raspberry Blower has struck again!"

                # Encapsulate the plain and HTML versions of the message
                # body in an 'alternative' part, so message agents can
                # decide which they want to display.
                msgAlternative = MIMEMultipart('alternative')
                msg.attach(msgAlternative)
                msgText = MIMEText(message, 'plain')
                msgAlternative.attach(msgText)

                if len(image_full_path) > 0:
                    fp = open(image_full_path)
                    msgImage = MIMEImage(fp.read(), image_type)
                    fp.close()
                    # We reference the image in the IMG SRC attribute by
                    # the ID we give it below
                    msgText = MIMEText('<img src="cid:image1">%s' % hyper_txt,
                                       'html')
                    msgAlternative.attach(msgText)

                    # Define the image's ID as referenced above
                    msgImage.add_header('Content-Type', 'image/jpg',
                                        filename=filename + '.jpg')
                    msgImage.add_header('Content-ID', 'image1')
                    msgImage.add_header('Content-Disposition',
                                        'inline',
                                        filename=filename + '.jpg')
                    msg.attach(msgImage)

                # Send email and image attachment
                smtpObj = smtplib.SMTP(smtp_server, port)
                smtpObj.login(username, password)
                smtpObj.sendmail(sent_from, send_to, msg.as_string())
                smtpObj.quit()
                if self.verbose:
                    print("Email sent successfully :)")
                    return True
            except smtplib.SMTPException:
                print("Something wicked happened :(")
                return False
        else:
            print("No email settings!")
            return False

# Check if running stand-alone or imported
if __name__ == '__main__':
    from send_mail import SendEmail
    se = SendEmail(True)
    send_to = raw_input("Type email address to send to: ")
    sent_from = raw_input("Type email address to be sent from: ")
    username = raw_input("Type email account username: ")
    password = raw_input("Type email account password: ")
    smtp_server = raw_input("Type SMTP server: ")
    port = raw_input("Type SMTP port number: ")
    subject = 'Test Email sent using Python'
    message = 'A message to you Rudy!'
    info = se.send_email(send_to,
                         sent_from,
                         username,
                         password,
                         smtp_server,
                         int(port),
                         subject,
                         message)

Output:

python send_mail.py
Type email address to send to:
Type email address to be sent from:
Type email account username: 
Type email account password:
Type SMTP server: 
Type SMTP port number:
Email sent successfully : )
FB Like & Share