# coding=utf-8
from email.mime.text import MIMEText
from email.header import Header
from smtplib import SMTP
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.encoders import encode_base64
import traceback
import os, random, sys, requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
from mail_content_text import MailContentText


# https://blog.csdn.net/chuxu8314/article/details/100618710
# https://blog.csdn.net/Angry_Mills/article/details/79067270


class EmailUtil(object):
    host_server = 'smtp.exmail.qq.com'
    sender_email = 'data_service@elab-plus.com'
    pwd = 'elab@123A'
    send_name = 'elab'
    receiver = ['1285211525@qq.com', 'lijm@elab-plus.com', 'xuanxc@elab-plus.com']

    # 线上
    # url_online = "http://dm-api.elab-plus.cn/elab-marketing-sms//mail/sendEmailForReport"
    url_online = "http://101.132.43.32:5303/mail/sendEmailForReport"

    # 开发环境
    url_dev = "http://43.254.221.77:5555/elab-marketing-sms//mail/sendEmailForReport"  # 接口地址

    # 测试环境
    url_test = "http://gatewaytest.elab-plus.com/elab-marketing-sms//mail/sendEmailForReport"

    # 本地
    url_local = "http://localhost:5303/mail/sendEmailForReport"

    url = url_online

    # 消息头数据
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36',
        'Referer': url,
    }

    def __init__(self):
        pass

    def send_mail(self,
                  mail_title,
                  content,
                  receivers,
                  mail_excel
                  ):
        try:
            smtp = SMTP(self.host_server, 25)
            smtp.set_debuglevel(1)
            smtp.ehlo(self.host_server)
            smtp.login(self.sender_email, self.pwd)
            msg = MIMEMultipart('related')
            msg['From'] = self.send_name
            msg['Subject'] = Header(mail_title, 'gbk')
            msgAlternative = MIMEMultipart('alternative')
            msg.attach(msgAlternative)
            if content:
                textApart = MIMEText(content)
                msg.attach(textApart)
            if mail_excel:
                part = MIMEBase('application', "vnd.ms-excel")
                with open(mail_excel, 'rb') as fp:
                    part.set_payload(fp.read())
                    encode_base64(part)
                    print(os.path.split(mail_excel)[1])
                    part.add_header('Content-Disposition', 'attachment', filename=('gbk', '', os.path.split(mail_excel)[1]))
                    msg.attach(part)
            for receiver in receivers:
                msg['To'] = receiver
                try:
                    smtp.sendmail(self.sender_email, receiver, msg.as_string())
                except Exception as e:
                    print(str(e))
                    smtp.sendmail(self.sender_email, receiver, msg.as_string())
                print('Success!')
        except Exception as e:
            print('Error:{}'.format(str(e)))
            traceback.print_exc()

    def send_mail_by_admin(self,
                            mail_title,
                            content,
                            receiver,
                            mail_excel,
                            file_name,
                            mail_excel_1=None,
                            file_name_1=None
                           ):

        if mail_excel_1 is not None:
            with open(mail_excel, 'rb') as f:
                with open(mail_excel_1, 'rb') as ff:
                    m = MultipartEncoder(
                        fields={
                            "enclosure": ('file', f, 'application/octet-stream'),
                            "enclosure1": ('file', ff, 'application/octet-stream'),
                            "mailAddressee": receiver,
                            "mailContent": content,
                            "mailEnclosureName": file_name,
                            "mailEnclosureName1": file_name_1,
                            "mailTitle": mail_title,
                            "mailType": "text/html",
                            "time": ""
                        }
                    )
                    self.headers['Content-Type'] = m.content_type
                    r = requests.post(self.url, data=m, verify=False, headers=self.headers)
                    if r and r.json()['success']:
                        return True
        else:
            with open(mail_excel, 'rb') as f:
                m = MultipartEncoder(
                    fields={
                        "enclosure": ('file', f, 'application/octet-stream'),
                        "mailAddressee": receiver,
                        "enclosure1": 'null',
                        "mailContent": content,
                        "mailEnclosureName": file_name,
                        "mailEnclosureName1": 'null',
                        "mailTitle": mail_title,
                        "mailType": "text/html",
                        "time": ""
                    }
                )
                self.headers['Content-Type'] = m.content_type
                r = requests.post(self.url, data=m, verify=False, headers=self.headers)
                if r and r.json()['success']:
                    return True

    def send_test(self):
        send_email = EmailUtil()
        send_email.send_mail('elab_test', '11', ['1285211525@qq.com'],
                             mail_excel=r'D:\elab-code\elab_mvp\resources\行为与模块分值汇总.xlsx')


if __name__ == '__main__':
    send_email = EmailUtil()
    result = send_email.send_mail_by_admin('移动案场订阅日报', MailContentText.text_1.format(1, 2, 3, 4, 5, 6, 7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30, 31, 32, 33, 34, 35, 36),
                                           '1285211525@qq.com',
                                           r'D:\elab-code\elab_mvp\resources\建业项目卡片信息合档-补id(1)(1).xlsx',
                                           '建业项目卡片信息合档-补id(1)(1).xlsx',
                                           r'D:\elab-code\elab_mvp\resources\tongce1.xlsx',
                                           'tongce1.xlsx')
    print(result)