| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 | from Ansjer.config import ALY_SES_ACCESS_NAME,ALY_SES_ACCESS_PAW,ALY_SES_ACCESS_REPLYTO,AWS_SES_ACCESS_ID,AWS_SES_ACCESS_SECRET,AWS_SES_ACCESS_REGION,SES_COMPANY_EMAILfrom boto3.session import Sessionimport tracebackimport smtplibimport emailfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.mime.image import MIMEImagefrom email.mime.base import MIMEBasefrom email.mime.application import MIMEApplicationfrom email.header import Headerclass SesClassObject:   def __init__(self, *args, **kwargs):        self.access_id = AWS_SES_ACCESS_ID        self.access_secret = AWS_SES_ACCESS_SECRET        self.region_name = AWS_SES_ACCESS_REGION        self.company_email = SES_COMPANY_EMAIL        self.aliyun_username = ALY_SES_ACCESS_NAME        self.aliyun_password = ALY_SES_ACCESS_PAW        self.aliyun_replyto = ALY_SES_ACCESS_REPLYTO        session = Session(            aws_access_key_id=AWS_SES_ACCESS_ID,            aws_secret_access_key=AWS_SES_ACCESS_SECRET,            region_name=AWS_SES_ACCESS_REGION,        )        self.conn = session.client('ses')   # 发送邮箱阿里云的邮箱接口   def alyEmailCode(self,send_address_list=[], subject='', body=''):       print ('我开始发送邮箱咯')       # 发件人地址,通过控制台创建的发件人地址       username = self.aliyun_username       # 发件人密码,通过控制台创建的发件人密码       password = self.aliyun_password       # 自定义的回复地址       replyto = self.aliyun_replyto       # 收件人地址或是地址列表,支持多个收件人,最多30个       # rcptto = '***,***'       # rcptto = '1758730877@qq.com'       rcptto = send_address_list       # 构建alternative结构       msg = MIMEMultipart('alternative')       msg['Subject'] = Header(subject).encode()       msg['From'] = '%s <%s>' % (Header('user_server').encode(), username)       # msg['To'] = rcptto       msg['Reply-to'] = replyto       msg['Message-id'] = email.utils.make_msgid()       msg['Date'] = email.utils.formatdate()       # 构建alternative的text/plain部分       # textplain = MIMEText('自定义TEXT纯文本部分', _subtype='plain', _charset='UTF-8')       # msg.attach(textplain)       texthtml = MIMEText(body, _subtype='html', _charset='UTF-8')       msg.attach(texthtml)       # 发送邮件       try:           client = smtplib.SMTP()           # python 2.7以上版本,若需要使用SSL,可以这样创建client           # client = smtplib.SMTP_SSL()           # SMTP普通端口为25或80           client.connect('smtpdm.aliyun.com', 80)           # client.connect('smtpdm-ap-southeast-2.aliyun.com', 80)           # 开启DEBUG模式           client.set_debuglevel(0)           client.login(username, password)           # 发件人和认证地址必须一致           # 备注:若想取到DATA命令返回值,可参考smtplib的sendmaili封装方法:           #      使用SMTP.mail/SMTP.rcpt/SMTP.data方法           client.sendmail(username, rcptto, msg.as_string())           client.quit()           print('邮件发送成功')           return True       except smtplib.SMTPConnectError as e:           print('邮件发送失败,连接失败:', e.smtp_code, e.smtp_error)           return False       except smtplib.SMTPAuthenticationError as e:           print('邮件发送失败,认证错误:', e.smtp_code, e.smtp_error)           return False       except smtplib.SMTPSenderRefused as e:           print('邮件发送失败,发件人被拒绝:', e.smtp_code, e.smtp_error)           return False       except smtplib.SMTPRecipientsRefused as e:           print('邮件发送失败,收件人被拒绝:', e.smtp_code, e.smtp_error)           return False       except smtplib.SMTPDataError as e:           print('邮件发送失败,数据接收拒绝:', e.smtp_code, e.smtp_error)           return False       except smtplib.SMTPException as e:           print('邮件发送失败, ', e.message)           return False       except Exception as e:           print('邮件发送异常, ', str(e))           return False   def send_email(self, send_address_list=[], subject='', body=''):        try:            response = self.conn.send_email(                # 发送人                Source=self.company_email,                Destination={                    # 收件人                    'ToAddresses': send_address_list                    # 'ToAddresses': [                    #     '1758730877@qq.com',                    # ],                },                Message={                    # 标题                    'Subject': {                        'Data': subject,                        'Charset': 'utf-8'                    },                    'Body': {                        'Html': {                            'Data': body,                            'Charset': 'utf-8'                        }                    }                },            )        except Exception as e:            errorInfo = traceback.format_exc()            print(errorInfo)            self.send_email(send_address_list=[self.company_email], subject='邮件发送错误信息提醒', body='<br>请向开发人员反馈并修改</br>' +'\n错误信息位'+str(errorInfo))        if response['MessageId']:            return True        else:            print(response)            self.send_email(send_address_list=[self.company_email],subject='邮件发送错误信息提醒',body='<br>请向开发人员反馈并修改</br>')            return False
 |