博客已迁移,文章新地址
===========================
需求:
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 smtplib import getopt import sys import os from email.MIMEMultipart import MIMEMultipart from email.MIMEBase import MIMEBase from email.MIMEText import MIMEText import email.Encoders as encoders def 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 True def 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