寫(xiě)了個(gè)發(fā)郵件的python代碼:
#
?-*-?coding:?utf-8?-*-
#
=================================================
#
#
???描述:????KEmail?發(fā)送郵件類(lèi)
#
#
???作者:????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ā)送地址?還有抄送之類(lèi)?和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']???? = 用戶(hù)名
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ā)信信息是可以亂寫(xiě)的。而真正和stmp有密切關(guān)系的是 :
?smtp.sendmail(paramMap["from"], FinallyAdd, msgRoot.as_string())
也就是上面的什么發(fā)信人地址 ,收信人地址 ,抄送人地址都可以是假的。。。
當(dāng)然愚人節(jié)用用還是比較好玩。對(duì)高手失效。因?yàn)楦呤钟X(jué)得奇怪的時(shí)候,會(huì)去看看郵件的原始屬性。。。
哈哈,剛剛我就收到了我夢(mèng)中情人給我的情書(shū)

。。。太yy了。改天通知所有同事到樓下集合。我想應(yīng)該有不少人會(huì)上當(dāng)。
posted on 2008-06-05 13:25
-274°C 閱讀(5709)
評(píng)論(3) 編輯 收藏 所屬分類(lèi):
python