#!/data/setupfiles/python3/bin/python3
#coding:utf-8
'''注释
modified by tophorse in 2021.03.12
1.新增支持ssl协议
added by tophorse in 2018.01.25
description:根据配置SMTP发邮件
'''
import sys
sys.path.append('/data/scripts/')
import os
import time
import datetime
import argparse
import logging  
import logging.handlers
import tophorse3
import json
import smtplib
from email.mime.text import MIMEText
from email.header import Header

try:
  #added by tophorse in 2017.08.27,增加日志输出功能
  filename=__file__.replace('.py','.log');
  handler = logging.handlers.RotatingFileHandler(filename, maxBytes = 1024*1024, backupCount = 5) # 实例化handler;
  #fmt = '%(asctime)s - %(filename)s:%(lineno)s - %(name)s - %(message)s';
  fmt='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s';
  formatter = logging.Formatter(fmt);   # 实例化formatter  
  handler.setFormatter(formatter);     # 为handler添加formatter  
  logger = logging.getLogger('');    # 获取logger  
  logger.addHandler(handler);           # 为logger添加handler  
  logger.setLevel(logging.DEBUG);

  if  __name__=="__main__":
    #声明参数
    parser = argparse.ArgumentParser(description='发送邮件\n命令：python stmpmail.py "test1@qq.com;test2@qq.com" "title" "this is content"');
    parser.add_argument('receivers',action="store",help='接收者邮件,支持多个，格式：test@qq.com;test1@163.com');
    parser.add_argument('title',action="store",help='邮件主题,支持html格式');
    parser.add_argument('content',action="store",help='邮件内容,支持html格式');
    args = parser.parse_args();
    recs=args.receivers;
    title=args.title;
    content=args.content;
    #print recs;
    reclist=recs.split(";");
    #print reclist;
    #sys.exit(0);
    #变量
    jsonpath=__file__.replace('.py','.json');
    #加载配置文件
    jsonlist=tophorse3.getjsonlist(jsonpath);
    #print jsonlist;
    #循环发送邮件，支持配置多个邮件，第一个失败，选择下个
    for hjson in jsonlist:
      #检查状态
      if str(hjson["state"])!="1":
        continue;
      #变量
      sender=str(hjson["sender"]);
      host=str(hjson["host"]);
      port=int(hjson["port"]);
      ssl=bool(hjson["ssl"]);
      user=str(hjson["user"]);
      pwd=str(hjson["pwd"]);
      try:
	#发松
        msg = MIMEText(content, "html", "utf-8");
        msg["From"] = Header(sender, "utf-8");
        msg["To"] =  Header(recs, "utf-8");
        msg["Subject"] = Header(title, 'utf-8')
        if ssl:
          smtpObj = smtplib.SMTP_SSL(host,port);
        else:
          smtpObj = smtplib.SMTP(); 
        smtpObj.connect(host, port);
        if user!="":
          smtpObj.login(user,pwd); 
        smtpObj.sendmail(sender, reclist, msg.as_string());
        print("邮件发送成功");
	#成功跳出
        break;
      except Exception as e1:
        #如果发生错误，就继续用下个配置发送
        logger.error("账号"+user+"有问题，请尽快修改！具体："+str(e1));
        print("配置错误，继续尝试下个--"+str(e1));
        continue;
except Exception as e:
  logger.error(e);
  print(e);