2011-03-09 28 views
1

我有一個線程化的python腳本,它在局域網上ping了20個節點,並打印出每個節點的狀態:節點處於活動狀態,節點處於關閉狀態等。 我希望將這個輸出發送到我的電子郵件帳戶,因爲我打算讓這個腳本每週運行一次,而且如果我身體上遠離LAN,我不必擔心,我可以檢查我的電子郵件。如何將python腳本的輸出發送到電子郵件地址

語言:PYTHON。操作系統:Linux Mint 10 Julia。謝謝

+0

你在哪個平臺上? –

回答

5

使用smtplib。他們提供的example是相當不錯的。

import smtplib 

def prompt(prompt): 
    return raw_input(prompt).strip() 

fromaddr = prompt("From: ") 
toaddrs = prompt("To: ").split() 
print "Enter message, end with ^D (Unix) or ^Z (Windows):" 

# Add the From: and To: headers at the start! 
msg = ("From: %s\r\nTo: %s\r\n\r\n" 
     % (fromaddr, ", ".join(toaddrs))) 
while 1: 
    try: 
     line = raw_input() 
    except EOFError: 
     break 
    if not line: 
     break 
    msg = msg + line 

print "Message length is " + repr(len(msg)) 

server = smtplib.SMTP('localhost') 
server.set_debuglevel(1) 
server.sendmail(fromaddr, toaddrs, msg) 
server.quit() 
0

您需要SMTP服務器才能發送電子郵件。檢查Python的smtplib

6

如果它每週運行一次,您可能會從crontab運行它?

30 2 * * 5 python yourScript.py | mail -s outputFromScript [email protected] 
+1

你可能想用管道將它(使用「|」)放入郵件中,而不是重定向到一個名爲帶有空格的文件(取決於cron如何解析命令行),除此之外這是一個理智而明智的想法。 – Vatine

+1

@Vatine - 你對管道完全正確,謝謝,修正! – eumiro

+0

酷,我的+1已經給出了,但我給你一個你的評論做這麼快的編輯。 – Vatine

0

看看記錄和logging.config,我用這個之前從腳本收到錯誤消息在後臺運行

http://docs.python.org/library/logging.html

例如

import logging 
import logging.config 

logDir = "./logs/" 

logging.config.fileConfig(logDir+'logging.conf') 
logger = logging.getLogger('email') 

logger.debug('THIS IS A DEBUG MESSAGE') 
logger.error('THIS IS AN ERROR') 

然後logging.conf

[loggers] 
keys=root,email 

[logger_root] 
level=DEBUG 
handlers=rotatingFileHandler 

[logger_email] 
level=ERROR 
handlers=email 
qualname=email 

[formatters] 
keys=emailFormatter,rotatingFormatter 

[formatter_emailFormatter] 
format=%(asctime)s %(name)-12s %(levelname)-8s %(message)s 

[formatter_rotatingFormatter] 
format=%(asctime)s %(name)-12s %(levelname)-8s %(message)s 
datefmt=%m-%d %H:%M 

[handlers] 
keys=email,rotatingFileHandler 

[handler_email] 
class=handlers.SMTPHandler 
level=ERROR 
formatter=emailFormatter 
args=('mail.xxx','[email protected]',['[email protected]',],'ERROR!',('[email protected]','xxx')) 

[handler_rotatingFileHandler] 
class=handlers.RotatingFileHandler 
level=DEBUG 
formatter=rotatingFormatter 
args=('./logs/log.out', 'maxBytes=1000000', 'backupCount=5') 

從上面我會收到「這是一個錯誤」在我的電子郵件。

相關問題