Python通用发送邮件模块

来源:互联网 发布:西南大学西塔学院 知乎 编辑:程序博客网 时间:2024/04/29 15:58

博客已迁移,文章新地址 

===========================

需求:

1.发送邮件

2.不需要登录任何邮箱等等

3.支持多接收人

4.支持附件

5.支持命令行+方法调用


涉及模块:

smtplib,  email


基于版本:

2.4

使用2.7和3.x的童鞋,需要修改下import信息


源代码:

#!/usr/bin/env python#@author : wklken@yeah.ent#@version : 0.1#@desc: for mail sending.import smtplibimport getoptimport sysimport osfrom email.MIMEMultipart import MIMEMultipartfrom email.MIMEBase import MIMEBasefrom email.MIMEText import MIMETextimport email.Encoders as encodersdef send_mail(mail_from, mail_to, subject, msg_txt, files=[]):    # Create message container - the correct MIME type is multipart/alternative.    msg = MIMEMultipart('alternative')    msg['Subject'] = subject    msg['From'] = mail_from    msg['To'] = mail_to    # Create the body of the message (a plain-text and an HTML version).    #text = msg    html = msg_txt    # Record the MIME types of both parts - text/plain and text/html.    #part1 = MIMEText(text, 'plain')    part2 = MIMEText(html, 'html')    # Attach parts into message container.    # According to RFC 2046, the last part of a multipart message, in this case    # the HTML message, is best and preferred.    #msg.attach(part1)    msg.attach(part2)    #attachment    for f in files:        #octet-stream:binary data        part = MIMEBase('application', 'octet-stream')        part.set_payload(open(f, 'rb').read())        encoders.encode_base64(part)        part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f))        msg.attach(part)    # Send the message via local SMTP server.    s = smtplib.SMTP('localhost')    # sendmail function takes 3 arguments: sender's address, recipient's address    # and message to send - here it is sent as one string.    mailto_list = mail_to.strip().split(",")    if len(mailto_list) > 1:        for mailtoi in mailto_list:            s.sendmail(mail_from, mailtoi.strip(), msg.as_string())    else:        s.sendmail(mail_from, mail_to, msg.as_string())    s.quit()    return Truedef main():    files = []    try:        opts, args = getopt.getopt(sys.argv[1:], "f:t:s:m:a:")        #print sys.argv        for op, value in opts:            if op == "-f":                mail_from = value            elif op == "-t":                mail_to = value            elif op == "-s":                subject = value            elif op == "-m":                msg_txt = value            elif op == "-a":                files = value.split(",")    except getopt.GetoptError:        print(sys.argv[0] + " : params are not defined well!")    print mail_from, mail_to, subject, msg_txt    if files:        send_mail(mail_from, mail_to, subject, msg_txt, files)    else:        send_mail(mail_from, mail_to, subject, msg_txt)if __name__ == "__main__":    main()



The end!

转载请注明出处,Thx!


wklken

Blog:  http://wklken.me

Email: wklken@yeah.net

2012-09-02


原创粉丝点击