寫了個(gè)發(fā)郵件的python代碼:
#
?-*-?coding:?utf-8?-*-
# =================================================
#
# ???描述:????KEmail?發(fā)送郵件類
#
# ???作者:????hechangmin
#
# ???時(shí)間:????2008-05-30?
#
# =================================================
import ?email
import ?mimetypes
from ?email.MIMEMultipart? import ?MIMEMultipart
from ?email.MIMEText? import ?MIMEText
from ?email.MIMEImage? import ?MIMEImage
import ?smtplib
from ?logger? import ?klog
def ?sendmail(paramMap):
????
????smtp? = ?smtplib.SMTP()
????msgRoot? = ?MIMEMultipart( ' related ' )
????msgAlternative? = ?MIMEMultipart( ' alternative ' )
???? if ?paramMap.has_key( " server " )? and ?paramMap.has_key( " user " )? and ?paramMap.has_key( " password " ):
???????? try :
????????????smtp.set_debuglevel( 1 )
????????????smtp.connect(paramMap[ " server " ])
????????????smtp.login(paramMap[ " user " ],?paramMap[ " password " ])
???????? except :
????????????klog.error( " smtp?login?exception! " )
???????????? return ?False
???? else :
????????klog.error( " Parameters?incomplete! " )
???????? return ?False
???? # 測(cè)試發(fā)現(xiàn)?郵件其頭部信息?比如標(biāo)題?發(fā)送地址?還有抄送之類?和stmp發(fā)送的具體信息脫離。
???? if ?(paramMap.has_key( " subject " )? and ?paramMap.has_key( " from " )? and ?paramMap.has_key( " to " ))? == ?False:
????????klog.error( " Parameters?incomplete! " )
???????? return ?False
????
????msgRoot[ ' subject ' ]? = ?paramMap[ " subject " ]
????msgRoot[ ' from ' ]? = ?paramMap[ " from " ]
???? if ?paramMap.has_key( " cc " ):
????????msgRoot[ ' cc ' ]? = ?paramMap[ " cc " ]
????
????msgRoot[ ' to ' ]? = ?paramMap[ " to " ]
????msgRoot.preamble? = ? ' This?is?a?multi-part?message?in?MIME?format. '
????msgRoot.attach(msgAlternative)
????TempAddTo? = ?paramMap[ " to " ]
????
???? if ?paramMap.has_key( " text " ):
????????msgText? = ?MIMEText(paramMap[ " text " ]?,? ' plain ' ,? ' utf-8 ' )
????????msgAlternative.attach(msgText)
???? if ?paramMap.has_key( " html " ):
????????msgText? = ?MIMEText(paramMap[ " html " ],? ' html ' ,? ' utf-8 ' )
????????msgAlternative.attach(msgText)
???? if ?paramMap.has_key( " image " ):
????????fp? = ?open(paramMap[ " image " ],? ' rb ' )
????????msgImage? = ?MIMEImage(fp.read())
????????fp.close()
????????msgImage.add_header( ' Content-ID ' ,? ' <image1> ' )
????????msgRoot.attach(msgImage)
???? if ?paramMap.has_key( " cc " ):
????????TempAddTo? = ?paramMap[ " to " ]? + ? " , " ? + ?paramMap[ " cc " ]
????
???????
???? if ?TempAddTo.find( " , " )? != ? - 1 :
????????FinallyAdd? = ?TempAddTo.split( " , " )
???? else :
????????FinallyAdd? = ?TempAddTo
????????
???? # stmp?發(fā)送郵件.?發(fā)現(xiàn)群發(fā)地址用‘,’相隔的字符串,只有一個(gè)成功,所以改用列表。
????smtp.sendmail(paramMap[ " from " ],?FinallyAdd,?msgRoot.as_string())
????smtp.quit()
???? return ?True
# ===Test?=========================================
if ? __name__ ? == ? ' __main__ ' ?:
????
???? from ?mailconf? import ?mailmap
????sendmail(mailmap)
????
# =================================================
#
# ???描述:????KEmail?發(fā)送郵件類
#
# ???作者:????hechangmin
#
# ???時(shí)間:????2008-05-30?
#
# =================================================
import ?email
import ?mimetypes
from ?email.MIMEMultipart? import ?MIMEMultipart
from ?email.MIMEText? import ?MIMEText
from ?email.MIMEImage? import ?MIMEImage
import ?smtplib
from ?logger? import ?klog
def ?sendmail(paramMap):
????
????smtp? = ?smtplib.SMTP()
????msgRoot? = ?MIMEMultipart( ' related ' )
????msgAlternative? = ?MIMEMultipart( ' alternative ' )
???? if ?paramMap.has_key( " server " )? and ?paramMap.has_key( " user " )? and ?paramMap.has_key( " password " ):
???????? try :
????????????smtp.set_debuglevel( 1 )
????????????smtp.connect(paramMap[ " server " ])
????????????smtp.login(paramMap[ " user " ],?paramMap[ " password " ])
???????? except :
????????????klog.error( " smtp?login?exception! " )
???????????? return ?False
???? else :
????????klog.error( " Parameters?incomplete! " )
???????? return ?False
???? # 測(cè)試發(fā)現(xiàn)?郵件其頭部信息?比如標(biāo)題?發(fā)送地址?還有抄送之類?和stmp發(fā)送的具體信息脫離。
???? if ?(paramMap.has_key( " subject " )? and ?paramMap.has_key( " from " )? and ?paramMap.has_key( " to " ))? == ?False:
????????klog.error( " Parameters?incomplete! " )
???????? return ?False
????
????msgRoot[ ' subject ' ]? = ?paramMap[ " subject " ]
????msgRoot[ ' from ' ]? = ?paramMap[ " from " ]
???? if ?paramMap.has_key( " cc " ):
????????msgRoot[ ' cc ' ]? = ?paramMap[ " cc " ]
????
????msgRoot[ ' to ' ]? = ?paramMap[ " to " ]
????msgRoot.preamble? = ? ' This?is?a?multi-part?message?in?MIME?format. '
????msgRoot.attach(msgAlternative)
????TempAddTo? = ?paramMap[ " to " ]
????
???? if ?paramMap.has_key( " text " ):
????????msgText? = ?MIMEText(paramMap[ " text " ]?,? ' plain ' ,? ' utf-8 ' )
????????msgAlternative.attach(msgText)
???? if ?paramMap.has_key( " html " ):
????????msgText? = ?MIMEText(paramMap[ " html " ],? ' html ' ,? ' utf-8 ' )
????????msgAlternative.attach(msgText)
???? if ?paramMap.has_key( " image " ):
????????fp? = ?open(paramMap[ " image " ],? ' rb ' )
????????msgImage? = ?MIMEImage(fp.read())
????????fp.close()
????????msgImage.add_header( ' Content-ID ' ,? ' <image1> ' )
????????msgRoot.attach(msgImage)
???? if ?paramMap.has_key( " cc " ):
????????TempAddTo? = ?paramMap[ " to " ]? + ? " , " ? + ?paramMap[ " cc " ]
????
???????
???? if ?TempAddTo.find( " , " )? != ? - 1 :
????????FinallyAdd? = ?TempAddTo.split( " , " )
???? else :
????????FinallyAdd? = ?TempAddTo
????????
???? # stmp?發(fā)送郵件.?發(fā)現(xiàn)群發(fā)地址用‘,’相隔的字符串,只有一個(gè)成功,所以改用列表。
????smtp.sendmail(paramMap[ " from " ],?FinallyAdd,?msgRoot.as_string())
????smtp.quit()
???? return ?True
# ===Test?=========================================
if ? __name__ ? == ? ' __main__ ' ?:
????
???? from ?mailconf? import ?mailmap
????sendmail(mailmap)
????
其中日志記錄器,當(dāng)然你可以不用。
而mailmap的內(nèi)容:
mailmap = { }
mailmap['server']?? = 郵件服務(wù)器
mailmap['user']???? = 用戶名
mailmap['password'] = 密碼
mailmap["from"]???? =? 發(fā)郵件人地址
#mailmap["cc"]?????? = 抄送地址,以逗號(hào)分隔
mailmap["to"]?????? = 接收人地址
mailmap["subject"]? = 標(biāo)題
mailmap["text"]???? = 信息內(nèi)容
mailmap["html"]???? = '<font color = red ><b>信息內(nèi)容!??</b></font>'
其中比較有意思的是,發(fā)信信息是可以亂寫的。而真正和stmp有密切關(guān)系的是 :
?smtp.sendmail(paramMap["from"], FinallyAdd, msgRoot.as_string())
也就是上面的什么發(fā)信人地址 ,收信人地址 ,抄送人地址都可以是假的。。。
當(dāng)然愚人節(jié)用用還是比較好玩。對(duì)高手失效。因?yàn)楦呤钟X得奇怪的時(shí)候,會(huì)去看看郵件的原始屬性。。。
哈哈,剛剛我就收到了我夢(mèng)中情人給我的情書
