cloudjumper2000
cloudjumper2000

Reputation: 31

Send HTML file contents via python email script

Looking for a way to send the contents of a HTML file that is generated once a day using this script below. Running into road blocks getting it to work. I can sent HTML and see it, just not sure how to print out the contents of the file and send it.

File Format is export_MM-DD-YY.html

Id rather have it display the contents of the HTML in the email not the HTML file.

#!/usr/bin/env python3

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

filename = 'name_of_file'

    # Read a file and encode it into base64 format
    fo = open(filename, "rb")
    filecontent = fo.read()
    encodedcontent = base64.b64encode(filecontent)  # base64
    filename = os.path.basename(filename)

# me == my email address
# you == recipient's email address
me = "[email protected]"
you = "[email protected]"
subject = 'Test Subject v5'

# Create message container - the correct MIME type is multipart/alternative.
msg = MIMEMultipart('alternative')
msg['Subject'] = subject
msg['From'] = me
msg['To'] = you

# Create the body of the message (a plain-text and an HTML version).
text = "Hi!\nHow are you?\nHere is the link you wanted:\nhttps://www.python.org"
html = """\

  **INSERT HTML FILE CONTENTS HERE...**

"""

# Record the MIME types of both parts - text/plain and text/html.
part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')

# Attach parts into message container.
# According to RFC 2046, the last part of a multipart message, in this case
# the HTML message, is best and preferred.
msg.attach(part1)
msg.attach(part2)

# Send the message via local SMTP server.
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(config.EMAIL_ADDRESS, config.PASSWORD)

server.sendmail(me,you,msg.as_string())
server.quit()

So I think I got it working but im sure theres more code here than is needed (If anyone sees anything I can clean up?)

#!/usr/bin/env python3

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

raport_file = open('export.html','rb')
alert_msg = MIMEText(raport_file.read(),"html", "utf-8")

# me == my email address
# you == recipient's email address
me = "[email protected]"
you = "[email protected]"
subject = 'Test Subject v5'

# Create message container - the correct MIME type is multipart/alternative.
msg = MIMEMultipart('alternative')
msg['Subject'] = subject
msg['From'] = me
msg['To'] = you

# Create the body of the message (a plain-text and an HTML version).
text = "Hi!\nHow are you?\nHere is the link you wanted:\nhttps://www.python.org"
html = """\

"""

# Record the MIME types of both parts - text/plain and text/html.
part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')

# Attach parts into message container.
# According to RFC 2046, the last part of a multipart message, in this case
# the HTML message, is best and preferred.
msg.attach(part1)
msg.attach(part2)

# Send the message via local SMTP server.
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(config.EMAIL_ADDRESS, config.PASSWORD)

server.sendmail(me,you,alert_msg.as_string())
server.quit()

Upvotes: 1

Views: 12385

Answers (1)

Brad Dre
Brad Dre

Reputation: 3866

You're really close. Three changes:

Don't open the html file in binary mode. Read the file directly into the html string

report_file = open('export.html')
html = report_file.read()

remove the subsequent assignment to html var

html = """\

"""

send the msg object as constructed

server.sendmail(me, you, msg.as_string())

That worked for me. Also keep in mind that by default gmail settings may not allow your script to send mail. If so you'll need to update your settings to allow "insecure" (meaning non-Google) apps to send mail.

Upvotes: 4

Related Questions