Python通用发送邮件模块

openkk 12年前

需求:

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()
转自:http://blog.csdn.net/wklken/article/details/7935220