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
<SPAN class="keyword token">import</SPAN> arcpy
<SPAN class="keyword token">import</SPAN> os<SPAN class="punctuation token">,</SPAN> string
<SPAN class="keyword token">import</SPAN> smtplib<SPAN class="punctuation token">,</SPAN> shutil
<SPAN class="keyword token">import</SPAN> email<SPAN class="punctuation token">,</SPAN> time
<SPAN class="keyword token">import</SPAN> sys<SPAN class="punctuation token">,</SPAN> csv
<SPAN class="keyword token">from</SPAN> email<SPAN class="punctuation token">.</SPAN>MIMEMultipart <SPAN class="keyword token">import</SPAN> MIMEMultipart
<SPAN class="keyword token">from</SPAN> email<SPAN class="punctuation token">.</SPAN>mime<SPAN class="punctuation token">.</SPAN>text <SPAN class="keyword token">import</SPAN> MIMEText
FROMADDR <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token"><SPAN>"</SPAN><A class="jive-link-email-small" href="mailto:Bxxxs@xyz.com" rel="nofollow noopener noreferrer" target="_blank">Bxxxs@xyz.com</A><SPAN>"</SPAN></SPAN><SPAN class="punctuation token">]</SPAN>
TOADDRS <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token"><SPAN>"</SPAN><A class="jive-link-email-small" href="mailto:xyz@xyz.gov" rel="nofollow noopener noreferrer" target="_blank">xyz@xyz.gov</A><SPAN>"</SPAN></SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="comment token"># REGION 1 =======</SPAN>
<SPAN class="keyword token">with</SPAN> open<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'z_Region1.csv'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'rb'</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">as</SPAN> f<SPAN class="punctuation token">:</SPAN>
R1reader <SPAN class="operator token">=</SPAN> csv<SPAN class="punctuation token">.</SPAN>reader<SPAN class="punctuation token">(</SPAN>f<SPAN class="punctuation token">)</SPAN>
R1content <SPAN class="operator token">=</SPAN> list<SPAN class="punctuation token">(</SPAN>R1reader<SPAN class="punctuation token">)</SPAN>
R1got <SPAN class="operator token">=</SPAN> tuple<SPAN class="punctuation token">(</SPAN>map<SPAN class="punctuation token">(</SPAN>Thread_compile_string<SPAN class="punctuation token">,</SPAN> R1content<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># print str(R1got).strip('[]')</SPAN>
<SPAN class="comment token"># Analyze the Tuple to determine if there are any values</SPAN>
<SPAN class="comment token"># If so add them to the email body, if not do not add them but add string with date</SPAN>
<SPAN class="keyword token">if</SPAN> len<SPAN class="punctuation token">(</SPAN>R1got<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">!=</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">'found!'</SPAN><SPAN class="punctuation token">)</SPAN>
cols1 <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">"<tr>{0}</tr>"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN> <SPAN class="string token">"<tr></tr>"</SPAN><SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>t<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">for</SPAN> t <SPAN class="keyword token">in</SPAN> R1got<SPAN class="punctuation token">]</SPAN>
rows1 <SPAN class="operator token">=</SPAN> <SPAN class="string token">"<tr>{0}</tr>"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN> <SPAN class="string token">"<tr></tr>"</SPAN><SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>cols1<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
htmlR1 <SPAN class="operator token">=</SPAN> <SPAN class="string token">"""<HTML>
<head></head>
<body>
<h4>Facilities Reported for Region 1 for {0}</h4>
<table>
{1}
</table>
</body>
</HTML>"""</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>CurrentDate<SPAN class="punctuation token">,</SPAN> rows1<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">if</SPAN> flagR1 <SPAN class="operator token">==</SPAN> <SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="comment token"># What do you want the attached file to be named?</SPAN>
filename <SPAN class="operator token">=</SPAN> <SPAN class="string token">"z_Region1.csv"</SPAN>
f <SPAN class="operator token">=</SPAN> file<SPAN class="punctuation token">(</SPAN>filename<SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token">#=== BUILD EMAIL ===</SPAN>
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">msgEmail</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
msg <SPAN class="operator token">=</SPAN> MIMEMultipart<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># Attach the records in the body of the email</SPAN>
part4 <SPAN class="operator token">=</SPAN> MIMEText<SPAN class="punctuation token">(</SPAN>htmlR1<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'html'</SPAN><SPAN class="punctuation token">)</SPAN>
msg<SPAN class="punctuation token">.</SPAN>attach<SPAN class="punctuation token">(</SPAN>part4<SPAN class="punctuation token">)</SPAN>
attachment <SPAN class="operator token">=</SPAN> MIMEText<SPAN class="punctuation token">(</SPAN>f<SPAN class="punctuation token">.</SPAN>read<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
attachment<SPAN class="punctuation token">.</SPAN>add_header<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'Content-Disposition'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'attachment'</SPAN><SPAN class="punctuation token">,</SPAN> filename<SPAN class="operator token">=</SPAN>filename<SPAN class="punctuation token">)</SPAN>
msg<SPAN class="punctuation token">.</SPAN>attach<SPAN class="punctuation token">(</SPAN>attachment<SPAN class="punctuation token">)</SPAN>
msg<SPAN class="punctuation token">[</SPAN><SPAN class="string token">'Subject'</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="string token">"Region 1 Report "</SPAN> <SPAN class="operator token">+</SPAN> CurrentDate
server <SPAN class="operator token">=</SPAN> smtplib<SPAN class="punctuation token">.</SPAN>SMTP<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'smtp1.xyz.com'</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">25</SPAN><SPAN class="punctuation token">)</SPAN>
server<SPAN class="punctuation token">.</SPAN>set_debuglevel<SPAN class="punctuation token">(</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN>
server<SPAN class="punctuation token">.</SPAN>ehlo<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
server<SPAN class="punctuation token">.</SPAN>sendmail<SPAN class="punctuation token">(</SPAN>FROMADDR<SPAN class="punctuation token">,</SPAN> TOADDRS<SPAN class="punctuation token">,</SPAN> msg<SPAN class="punctuation token">.</SPAN>as_string<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
server<SPAN class="punctuation token">.</SPAN>quit<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token">#=== PROCESS EMAIL ===</SPAN>
getMsgP <SPAN class="operator token">=</SPAN> msgEmail<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN> getMsgP
<SPAN class="comment token">#=== CLOSE THE FILE BEING ATTACHED ===</SPAN>
f<SPAN class="punctuation token">.</SPAN>close<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Region 1 Email Sent"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">elif</SPAN> flagR1 <SPAN class="operator token">==</SPAN> <SPAN class="token boolean">False</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">print</SPAN> <SPAN class="string token">"R1 None No Rows found"</SPAN>
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">msgEmailR1</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
msg <SPAN class="operator token">=</SPAN> MIMEMultipart<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
part5 <SPAN class="operator token">=</SPAN> MIMEText<SPAN class="punctuation token">(</SPAN>htmlConformation<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'html'</SPAN><SPAN class="punctuation token">)</SPAN>
msg<SPAN class="punctuation token">.</SPAN>attach<SPAN class="punctuation token">(</SPAN>part5<SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token">#msg.attach(attachment) </SPAN>
msg<SPAN class="punctuation token">[</SPAN><SPAN class="string token">'Subject'</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="string token">"Region 1 Report - no Records processed "</SPAN> <SPAN class="operator token">+</SPAN> CurrentDate
server <SPAN class="operator token">=</SPAN> smtplib<SPAN class="punctuation token">.</SPAN>SMTP<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'smtp1.xyz.com'</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">25</SPAN><SPAN class="punctuation token">)</SPAN>
server<SPAN class="punctuation token">.</SPAN>set_debuglevel<SPAN class="punctuation token">(</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN>
server<SPAN class="punctuation token">.</SPAN>ehlo<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
server<SPAN class="punctuation token">.</SPAN>sendmail<SPAN class="punctuation token">(</SPAN>FROMADDR<SPAN class="punctuation token">,</SPAN> TOADDRS<SPAN class="punctuation token">,</SPAN> msg<SPAN class="punctuation token">.</SPAN>as_string<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
server<SPAN class="punctuation token">.</SPAN>quit<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
getMsgP <SPAN class="operator token">=</SPAN> msgEmailR1<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN> getMsgP
<SPAN class="keyword token">print</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Conformation Email Email Sent"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">print</SPAN> <SPAN class="string token">"R1 Something Else is going on"</SPAN>
<SPAN class="comment token">#=======================================================</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>