瀏覽代碼

V2邮箱注册获取验证码新增Amazon SES发送邮件

zhangdongming 1 年之前
父節點
當前提交
2172fabf8c
共有 3 個文件被更改,包括 69 次插入10 次删除
  1. 9 0
      Ansjer/config.py
  2. 21 8
      Controller/UserController.py
  3. 39 2
      Object/AWS/S3Email.py

+ 9 - 0
Ansjer/config.py

@@ -494,3 +494,12 @@ DX_TECH_URL = 'https://oapi.eiotclub.com'
 DX_TECH_APP_KEY = '19b92a9a5e56429e97f271855ce731b2'
 # 鼎芯接口secret
 DX_TECH_SECRET = '6627548e7cfe4044add7ea72ae3391e0'
+
+
+# amazon电子邮件
+SES_SENDER = 'rdpublic@ansjer.com'  # 邮箱名
+SES_SENDERNAME = 'rdpublic@ansjer.com'
+SES_USERNAME_SMTP = 'AKIA2E67UIMD6MOSFKXW'  # 带有邮件权限的 IAM 帐号
+SES_PASSWORD_SMTP = 'BHuQ6EQTtFK4qh46o9omO9ZzO3NXzjk/JCWLXnVFmqzM'  # 带有邮件权限的 IAM 密码
+SES_PORT = '587'
+SES_HOST = 'email-smtp.us-east-1.amazonaws.com'

+ 21 - 8
Controller/UserController.py

@@ -40,6 +40,7 @@ from Object.UVerifyObject import UVerifyObject
 from Service.CommonService import CommonService
 from Service.ModelService import ModelService
 from Service.TemplateService import TemplateService
+from Object.AWS.S3Email import S3Email
 
 
 # 获取验证码
@@ -872,15 +873,9 @@ class v2authCodeView(TemplateView):
             # 设置随机数缓存生命周期
             send_data = TemplateService.email_message(type='register_code', language=response.lang)
             start_time = time.time()
-            ses = SesClassObject()
-            # 发送邮件
-            send_res = ses.alyEmailCode(
-                send_address_list=[email],
-                subject=send_data['title'],
-                body=send_data['body'].replace("{username}", email).replace("{captcha}", str(identifyingCode))
-            )
+            send_res = self.send_email(send_data, email, identifyingCode)  # 发送验证码到用户邮箱
             end_time = time.time()
-            LOGGER.info('阿里云邮箱发送验证码执行时间: {:.3f} 秒,email:{}'.format((end_time - start_time), email))
+            LOGGER.info('{}阿里云邮箱发送验证码执行时间: {:.3f} 秒,email:{}'.format(CONFIG_INFO, (end_time - start_time), email))
             if send_res is not True:
                 return response.json(44)
             # 单个邮箱验证码有效期5分钟
@@ -893,6 +888,24 @@ class v2authCodeView(TemplateView):
             LOGGER.info('aliyun_emailCode error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             return response.json(0)
 
+    @classmethod
+    def send_email(cls, send_data, user_email, identifyingCode):
+        ses = SesClassObject()
+        body = send_data['body'].replace("{username}", user_email).replace("{captcha}", str(identifyingCode))
+        title = send_data['title']
+        if CONFIG_INFO == CONFIG_EUR:
+            send_res = S3Email().send_email(send_data['title'], send_data['body'].replace("{username}", user_email)
+                                            .replace("{captcha}", str(identifyingCode)), user_email)
+            return send_res
+        # 发送邮件
+        send_res = ses.alyEmailCode(
+            send_address_list=[user_email],
+            subject=title,
+            body=body
+        )
+        return send_res
+
+
     def phoneCode(self, phone, response, sign_name):
         dataValid = DataValid()
         if dataValid.mobile_validate(phone) is not True:

+ 39 - 2
Object/AWS/S3Email.py

@@ -2,11 +2,12 @@ import smtplib
 import email.utils
 from email.mime.multipart import MIMEMultipart
 from email.mime.text import MIMEText
+from Ansjer.config import SES_SENDER, SES_SENDERNAME, SES_USERNAME_SMTP, SES_PASSWORD_SMTP, SES_PORT, SES_HOST
 
-class S3Email:
 
+class S3Email:
 
-   def faEmail(self, sys_msg_text ,username):
+    def faEmail(self, sys_msg_text, username):
         SENDER = 'rdpublic@ansjer.com'  # 邮箱名
         SENDERNAME = 'rdpublic@ansjer.com'
         USERNAME_SMTP = 'AKIA2E67UIMD6MOSFKXW'  # 带有邮件权限的 IAM 帐号
@@ -45,3 +46,39 @@ class S3Email:
             print("Error: ", e)
         else:
             print("Email sent!")
+
+    @staticmethod
+    def send_email(title, data, username):
+        """
+        发送亚马逊SES电子邮件
+        @param title: 标题
+        @param data: 内容
+        @param username: 发送到邮箱
+        @return: 成功 | 失败
+        """
+        SUBJECT = title
+        BODY_TEXT = (title
+                     )
+        BODY_HTML = data
+
+        msg = MIMEMultipart('alternative')
+        msg['Subject'] = SUBJECT
+        msg['From'] = email.utils.formataddr((SES_SENDERNAME, SES_SENDER))
+        msg['To'] = username
+        part1 = MIMEText(BODY_TEXT, 'plain')
+        part2 = MIMEText(BODY_HTML, 'html')
+        msg.attach(part1)
+        msg.attach(part2)
+
+        try:
+            server = smtplib.SMTP(SES_HOST, SES_PORT)
+            server.ehlo()
+            server.starttls()
+            server.ehlo()
+            server.login(SES_USERNAME_SMTP, SES_PASSWORD_SMTP)
+            server.sendmail(SES_SENDER, username, msg.as_string())
+            server.close()
+            return True
+        except Exception as e:
+            print(repr(e))
+            return False