1

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 = "From@example.com"
you = "TO@example.com"
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 = "From@example.com"
you = "TO@example.com"
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()
cloudjumper2000
  • 31
  • 1
  • 1
  • 7
  • possible duplicate of https://stackoverflow.com/questions/882712/sending-html-email-using-python – Akshay Apr 12 '18 at 21:14
  • First thanks for the response! Looking at the scripts on the link, they are doing esentially the same part I have working. However, I want to take the contents of a outside HTML file import it into the line area on the script above **INSERT HTML FILE CONTENTS HERE...** The import is the part I need assistance with. This content wont be static so I cant just paste it in. – cloudjumper2000 Apr 12 '18 at 21:21

1 Answers1

4

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.

Brad Dre
  • 3,580
  • 2
  • 19
  • 22