I am trying to email via python. It did work at sometime but now its not working. It is being flagged as SPAM leaving my external servers. Below you see whats causing this. I was told to include the FROM and TO in the header and this should elevate the issue of beign flagged as SPAM
I am unsure where to include this in my code below....ANYONE have any ideas on how to add that? See below Code snip
Content analysis details: (6.7 points, 6.0 required)
pts rule name description
---- ---------------------- --------------------------------------------------
-0.0 T_RP_MATCHES_RCVD Envelope sender domain matches handover relay
domain
-0.0 SPF_PASS SPF: sender matches SPF record
1.2 MISSING_HEADERS Missing To: header
0.0 HTML_MESSAGE BODY: HTML included in message
1.1 MIME_HTML_ONLY BODY: Message only has text/html MIME parts
0.1 MISSING_MID Missing Message-Id: header
1.0 MISSING_FROM Missing From: header
1.4 MISSING_DATE Missing Date: header
1.9 TO_NO_BRKTS_HTML_ONLY To: lacks brackets and HTML only
import arcpy
import os, string
import smtplib, shutil
import email, time
import sys, csv
from email.MIMEMultipart import MIMEMultipart
from email.mime.text import MIMEText
FROMADDR = ["Bxxxs@xxx.com"]
TOADDRS = ["xxx@xxxx.gov"]
# REGION 1 =======
with open('z_Region1.csv', 'rb') as f:
R1reader = csv.reader(f)
R1content = list(R1reader)
R1got = tuple(map(Thread_compile_string, R1content))
# print str(R1got).strip('[]')
# Analyze the Tuple to determine if there are any values
# If so add them to the email body, if not do not add them but add string with date
if len(R1got) != 0:
print('found!')
cols1 = ["<tr>{0}</tr>".format( "<tr></tr>".join(t)) for t in R1got]
rows1 = "<tr>{0}</tr>".format( "<tr></tr>".join(cols1))
htmlR1 = """<HTML>
<head></head>
<body>
<h4>Facilities Reported for Region 1 for {0}</h4>
<table>
{1}
</table>
</body>
</HTML>""".format(CurrentDate, rows1)
if flagR1 == True:
# What do you want the attached file to be named?
filename = "z_Region1.csv"
f = file(filename)
#=== BUILD EMAIL ===
def msgEmail():
msg = MIMEMultipart()
# Attach the records in the body of the email
part4 = MIMEText(htmlR1, 'html')
msg.attach(part4)
attachment = MIMEText(f.read())
attachment.add_header('Content-Disposition', 'attachment', filename=filename)
msg.attach(attachment)
msg['Subject'] = "Region 1 Report " + CurrentDate
server = smtplib.SMTP('smtp1.xxxx.com',25)
server.set_debuglevel(1)
server.ehlo()
server.sendmail(FROMADDR, TOADDRS, msg.as_string())
server.quit()
#=== PROCESS EMAIL ===
getMsgP = msgEmail()
print getMsgP
#=== CLOSE THE FILE BEING ATTACHED ===
f.close()
print ("Region 1 Email Sent")
elif flagR1 == False:
print "R1 None No Rows found"
def msgEmailR1():
msg = MIMEMultipart()
part5 = MIMEText(htmlConformation, 'html')
msg.attach(part5)
#msg.attach(attachment)
msg['Subject'] = "Region 1 Report - no Records processed " + CurrentDate
server = smtplib.SMTP('smtp1.xxxxx.com',25)
server.set_debuglevel(1)
server.ehlo()
server.sendmail(FROMADDR, TOADDRS, msg.as_string())
server.quit()
getMsgP = msgEmailR1()
print getMsgP
print ("Conformation Email Email Sent")
else:
print "R1 Something Else is going on"
#=======================================================
Solved! Go to Solution.
Think I got it...under the msg['Subject'] line ..... simply added
msg['To'] = "xxxx@xxxxx.com"
msg['From'] = "xxxxx@xxxxx.com"
msg['Date'] = CurrentDate
#=== BUILD EMAIL ===
def msgEmail():
msg = MIMEMultipart()
# Attach the records in the body of the email
part4 = MIMEText(htmlR1, 'html')
msg.attach(part4)
msg['To'] = "xxxx@xxxxx.com"
msg['From'] = "xxxx@xxxxx.com"
msg['Date'] = CurrentDate
attachment = MIMEText(f.read())
attachment.add_header('Content-Disposition', 'attachment', filename=filename)
msg.attach(attachment)
msg['Subject'] = "Region 1 Report " + CurrentDate
server = smtplib.SMTP('smtp1.xxxx.com',25)
server.set_debuglevel(1)
server.ehlo()
server.sendmail(FROMADDR, R1TOADDRS, msg.as_string())
server.quit()
Think I got it...under the msg['Subject'] line ..... simply added
msg['To'] = "xxxx@xxxxx.com"
msg['From'] = "xxxxx@xxxxx.com"
msg['Date'] = CurrentDate
#=== BUILD EMAIL ===
def msgEmail():
msg = MIMEMultipart()
# Attach the records in the body of the email
part4 = MIMEText(htmlR1, 'html')
msg.attach(part4)
msg['To'] = "xxxx@xxxxx.com"
msg['From'] = "xxxx@xxxxx.com"
msg['Date'] = CurrentDate
attachment = MIMEText(f.read())
attachment.add_header('Content-Disposition', 'attachment', filename=filename)
msg.attach(attachment)
msg['Subject'] = "Region 1 Report " + CurrentDate
server = smtplib.SMTP('smtp1.xxxx.com',25)
server.set_debuglevel(1)
server.ehlo()
server.sendmail(FROMADDR, R1TOADDRS, msg.as_string())
server.quit()