【python發送zabbix報警郵件,SSL版本】mailman.py
<code>#!/usr/local/bin/python3</code>
<code>#</code>
<code># via <Nosmo King> @ 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} <{1}></code>
<code>to: {3}</code>
<code>subject: {4}</code>
<code>content:</code>
<code>>></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} <{1}>'</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) < </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 < </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,如需轉載請自行聯系原作者