首先來看一下SMTP有所謂的extension,就是ESMTP,提供了強的conversation。
如何分辨server是否支援呢?
在conversation開始時,用ehlo而回傳正常資訊的,就是有支援ESMTP,
否則沒支援的話就用原本的helo來打招呼。
不同於前例使用sendmail()函式來寄送此資訊,而是要在sendmail()之前就得知檔案超過大小才行。
try:
s = smtplib.SMTP(server)
code = s.ehlo()[0]
usesesmtp = 1
if not (200 <= code <= 299):
usesesmtp = 0
code = s.helo()[0]
if not (200 <= code <= 299):
raise SMTPHeloError(code, resp)
此例中先用s.eclo()[0]來得知ehlo測試後的return code,
如果在不在正常範圍內(200~299),再改用s.helo()[0]來進行conversation。
如果真的都不行了,就raise exception來處理。
if usesesmtp and s.has_extn('size'):
print "Maximum message size is", s.esmtp_features['size']
if len(message) > int(s.esmtp_features['size']):
print "Message too large; aborting."
sys.exit(2)
s.sendmail(frmaddr, toaddrs, message)
此段會在server支援esmtp而且server有回傳max size後執行,
可以直接用s.esmtp_features['size']來取得此變數,
如果信件長度過大,則離開程式。
以下是執行結果:
cacaegg@cacabook:~/workspace/NetworkProgram/src/SMTP$ ehlo.py localhost cacaegg@localhost cacaegg@localhost
Maximum message size is 10240000
Message successfully sent to 1 recipient(s)
附件:完整python檔
沒有留言:
張貼留言