I found this on this site: code.activestate.com

My script and the script from the link, differs at the end. My script uses the ehlo and the starttls.

EHLO is the extended Hello, and tells the server that the client might want to use the extended SMTP protocol insted.

STARTTLS is the Start Transport Layer Security, this is an improved security level, and is most useful when sending username and password over the web.

# Send an HTML email with an embedded image and a plain text message for
# email clients that don't want to display the HTML.

from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage

# Define these once; use them twice!
strFrom = '<youremail@gmail.com>'
strTo = '<receipientsemail'

# Create the root message and fill in the from, to, and subject headers
msgRoot = MIMEMultipart('related')
msgRoot['Subject'] = 'Message from Kajsa'
msgRoot['From'] = strFrom
msgRoot['To'] = strTo
msgRoot.preamble = 'This is a multi-part message in MIME format.'

# 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')

msgText = MIMEText('This is the alternative plain text message.')

# We reference the image in the IMG SRC attribute by the ID we give it below
msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<br><img src="cid:image1"><br>Nifty!', 'html')

# This example assumes the image is in the current directory
fp = open('image1.jpg', 'rb')
msgImage = MIMEImage(fp.read())

# Define the image's ID as referenced above
msgImage.add_header('Content-ID', '<image1>')

# Send the email (this example assumes SMTP authentication is required)
import smtplib
smtp = smtplib.SMTP('smtp.gmail.com', 587)
smtp.login('<youremail@gmail.com>', '<yourpassword>')
smtp.sendmail(strFrom, strTo, msgRoot.as_string())