天天看點

【python發送zabbix報警郵件,SSL版本】mailman.py

【python發送zabbix報警郵件,SSL版本】mailman.py

<code>#!/usr/local/bin/python3</code>

<code>#</code>

<code># via &lt;Nosmo King&gt; @ 20150210</code>

<code># SSL only</code>

<code>'''</code>

<code>用法: </code>

<code>    </code><code>mailman.py "to" "subject" "body" "attachments"</code>

<code>說明:</code>

<code>[-] 1個收件人:</code>

<code>        </code><code>./mailman.py '[email protected]' "test subject" "simple test content"</code>

<code>[-] 多個收件人:</code>

<code>        </code><code>./mailman.py "[email protected];[email protected]" "test again" "another simple test"</code>

<code>[-] 帶附件:</code>

<code>        </code><code>./mailman.py '[email protected]' 'test1' 'test att' '/tmp/a.log' '/tmp/1.log'</code>

<code>--</code>

<code>from</code> <code>email.mime.text </code><code>import</code> <code>MIMEText</code>

<code>from</code> <code>email.mime.base </code><code>import</code> <code>MIMEBase</code>

<code>from</code> <code>email.mime.multipart </code><code>import</code> <code>MIMEMultipart</code>

<code>from</code> <code>email </code><code>import</code> <code>encoders</code>

<code>import</code> <code>smtplib, os, sys, logging, base64</code>

<code># 發件人</code>

<code>email_from_1 </code><code>=</code> <code>{</code><code>'smtp'</code><code>:</code><code>'smtp.126.com'</code><code>, </code><code>'account'</code><code>:</code><code>'[email protected]'</code><code>, </code><code>'password'</code><code>:</code><code>'xxx'</code><code>, </code><code>'nickname'</code><code>:</code><code>'zbx_svr'</code><code>, </code><code>'greeting'</code><code>:</code><code>'Dear Sir'</code><code>}</code>

<code># 發件人,備用</code>

<code>email_from_2 </code><code>=</code> <code>{</code><code>'smtp'</code><code>:</code><code>'smtp.126.com'</code><code>, </code><code>'account'</code><code>:</code><code>'[email protected]'</code><code>, </code><code>'password'</code><code>:</code><code>'xxx'</code><code>, </code><code>'nickname'</code><code>:</code><code>'zbx_svr_bak'</code><code>, </code><code>'greeting'</code><code>:</code><code>'Dear Sir'</code><code>}</code>

<code># +---- logging ---+</code>

<code>logging_file </code><code>=</code> <code>'/tmp/mailman.py.log'</code>

<code>logging.basicConfig(</code>

<code>    </code><code>level </code><code>=</code> <code>logging.DEBUG,</code>

<code>    </code><code>format</code> <code>=</code> <code>'%(asctime)s [%(levelname)s]: %(message)s'</code><code>,</code>

<code>    </code><code>filename </code><code>=</code> <code>logging_file,</code>

<code>    </code><code>filemode </code><code>=</code> <code>'a'</code><code>,</code>

<code>    </code><code>)</code>

<code>def</code> <code>delivering(s_from, s_to):</code>

<code>    </code><code>'''</code>

<code>    </code><code>s_from: (smtp, account, password, nickname, greeting)</code>

<code>    </code><code>s_to: (to, subject, body, attachments)</code>

<code>    </code> 

<code>    </code><code>#+---- logging ---+</code>

<code>    </code><code>print</code><code>(</code><code>"logging to"</code><code>, logging_file)</code>

<code>    </code><code>logging.info(</code><code>'''\</code>

<code>Now delivering..</code>

<code>+------------------------------+</code>

<code>from:    {0} &lt;{1}&gt;</code>

<code>to:      {3}</code>

<code>subject: {4}</code>

<code>content:</code>

<code>&gt;&gt;</code>

<code>{2},</code>

<code>{5}</code>

<code>attachments:</code>

<code>{6}</code>

<code>'''</code><code>.</code><code>format</code><code>(s_from['nickname</code><code>'], s_from['</code><code>account</code><code>'], s_from['</code><code>greeting'],</code>

<code>            </code><code>s_to[</code><code>'to'</code><code>], s_to[</code><code>'subject'</code><code>], s_to[</code><code>'body'</code><code>], s_to[</code><code>'attachments'</code><code>]))</code>

<code> </code> 

<code>    </code><code># email header</code>

<code>    </code><code>m </code><code>=</code> <code>MIMEMultipart()</code>

<code>    </code><code>m[</code><code>'From'</code><code>] </code><code>=</code> <code>'{0} &lt;{1}&gt;'</code><code>.</code><code>format</code><code>(s_from[</code><code>'nickname'</code><code>], s_from[</code><code>'account'</code><code>])</code>

<code>    </code><code>m[</code><code>'To'</code><code>] </code><code>=</code> <code>';'</code><code>.join(s_to[</code><code>'to'</code><code>])</code>

<code>    </code><code>m[</code><code>'Subject'</code><code>] </code><code>=</code> <code>s_to[</code><code>'subject'</code><code>]</code>

<code>    </code><code># email body</code>

<code>    </code><code>content </code><code>=</code> <code>MIMEText(</code><code>'''</code>

<code>{0},</code>

<code>{1}</code>

<code>    </code><code>'''</code><code>.</code><code>format</code><code>(s_from['greeting</code><code>'], s_to['</code><code>body</code><code>']), '</code><code>plain</code><code>', '</code><code>utf</code><code>-</code><code>8</code><code>')</code>

<code>    </code><code>m.attach(content)</code>

<code>    </code><code># email attachments</code>

<code>    </code><code>for</code> <code>filename </code><code>in</code> <code>s_to[</code><code>'attachments'</code><code>]:</code>

<code>        </code><code>with </code><code>open</code><code>(filename, </code><code>'rb'</code><code>) as f:</code>

<code>            </code><code>addon </code><code>=</code> <code>MIMEBase(</code><code>'application'</code><code>, </code><code>'octet-stream'</code><code>)</code>

<code>            </code><code>addon.set_payload(f.read())</code>

<code>            </code><code>encoders.encode_base64(addon)</code>

<code>            </code><code>addon.add_header(</code><code>'Content-Disposition'</code><code>, 'attachment; \</code>

<code>                    </code><code>filename</code><code>=</code><code>"{0}"</code><code>'.</code><code>format</code><code>(os.path.basename(filename)))</code>

<code>            </code><code>m.attach(addon)</code>

<code>    </code><code># send email</code>

<code>    </code><code>svr </code><code>=</code> <code>smtplib.SMTP()</code>

<code>    </code><code>try</code><code>:</code>

<code>        </code><code>svr.connect(s_from[</code><code>'smtp'</code><code>])</code>

<code>        </code><code>svr.ehlo()</code>

<code>        </code><code>svr.starttls()</code>

<code>        </code><code>#svr.set_debuglevel(1)</code>

<code>        </code><code>svr.login(s_from[</code><code>'account'</code><code>], s_from[</code><code>'password'</code><code>])</code>

<code>        </code><code>svr.sendmail(s_from[</code><code>'account'</code><code>], s_to[</code><code>'to'</code><code>], m.as_string())</code>

<code>        </code><code>retval </code><code>=</code> <code>0</code>

<code>    </code><code>except</code> <code>KeyboardInterrupt:</code>

<code>        </code><code>print</code><code>(</code><code>'[*] operation aborted!'</code><code>)</code>

<code>        </code><code>retval </code><code>=</code> <code>-</code><code>1</code>

<code>    </code><code>except</code> <code>Exception as err:</code>

<code>        </code><code>print</code><code>(</code><code>'[*] delivering err: {0}'</code><code>.</code><code>format</code><code>(err), </code><code>file</code><code>=</code><code>sys.stderr)</code>

<code>        </code><code>#+---- logging ---+</code>

<code>        </code><code>logging.warning(</code><code>'delivering: {0}'</code><code>.</code><code>format</code><code>(err))</code>

<code>        </code><code>retval </code><code>=</code> <code>-</code><code>2</code>

<code>    </code><code>finally</code><code>:</code>

<code>        </code><code>svr.quit()</code>

<code>    </code><code>logging.info(</code><code>"mailman code: {0}"</code><code>.</code><code>format</code><code>(retval))</code>

<code>    </code><code>return</code> <code>retval</code>

<code>def</code> <code>usage():</code>

<code>    </code><code>print</code><code>(__doc__)</code>

<code>    </code><code>sys.exit(</code><code>2</code><code>)</code>

<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>

<code>    </code><code>if</code> <code>len</code><code>(sys.argv) &lt; </code><code>4</code><code>:</code>

<code>        </code><code>usage()</code>

<code>    </code><code>email_to </code><code>=</code> <code>{}</code>

<code>    </code><code>email_to[</code><code>'to'</code><code>] </code><code>=</code> <code>sys.argv[</code><code>1</code><code>].split(</code><code>';'</code><code>)</code>

<code>    </code><code>email_to[</code><code>'subject'</code><code>] </code><code>=</code> <code>sys.argv[</code><code>2</code><code>]</code>

<code>    </code><code>email_to[</code><code>'body'</code><code>] </code><code>=</code> <code>sys.argv[</code><code>3</code><code>]</code>

<code>    </code><code>email_to[</code><code>'attachments'</code><code>] </code><code>=</code> <code>sys.argv[</code><code>4</code><code>:]</code>

<code>        </code><code>retval </code><code>=</code> <code>delivering(email_from_1, email_to)</code>

<code>        </code><code>if</code> <code>retval &lt; </code><code>0</code><code>:</code>

<code>            </code><code>tips </code><code>=</code> <code>"try again, using backup account to deliver.."</code>

<code>            </code><code>print</code><code>(tips)</code>

<code>            </code><code>#+---- logging ---+</code>

<code>            </code><code>logging.info(tips)</code>

<code>            </code><code>retval </code><code>=</code> <code>delivering(email_from_2, email_to)</code>

<code>        </code><code>msg </code><code>=</code> <code>'Mail delivering: '</code>

<code>        </code><code>msg </code><code>+</code><code>=</code> <code>'Failed!'</code> <code>if</code> <code>retval </code><code>else</code> <code>'Successful!'</code>

<code>        </code><code>print</code><code>(msg)</code>

<code>        </code><code>logging.info(msg)</code>

<code>        </code><code>print</code><code>(</code><code>'[*] main err: {0}'</code><code>.</code><code>format</code><code>(err), </code><code>file</code><code>=</code><code>sys.stderr)</code>

<code>        </code><code># logging</code>

<code>        </code><code>logging.warning(</code><code>'{0}'</code><code>.</code><code>format</code><code>(err))</code>

本文轉自 pcnk 51CTO部落格,原文連結:http://blog.51cto.com/nosmoking/1594759,如需轉載請自行聯系原作者