浏览代码

add DKIM signature for domain that is dkim verified

Son NK 5 年之前
父节点
当前提交
c62bfb292a
共有 1 个文件被更改,包括 13 次插入4 次删除
  1. 13 4
      email_handler.py

+ 13 - 4
email_handler.py

@@ -47,7 +47,7 @@ from app.email_utils import (
 )
 from app.extensions import db
 from app.log import LOG
-from app.models import GenEmail, ForwardEmail, ForwardEmailLog
+from app.models import GenEmail, ForwardEmail, ForwardEmailLog, CustomDomain
 from app.utils import random_string
 from server import create_app
 
@@ -207,6 +207,12 @@ class MailHandler:
         forward_email = ForwardEmail.get_by(reply_email=reply_email)
         alias: str = forward_email.gen_email.email
 
+        # alias must end with EMAIL_DOMAIN or custom-domain
+        alias_domain = alias[alias.find("@") + 1 :]
+        if alias_domain != EMAIL_DOMAIN:
+            if not CustomDomain.get_by(domain=alias_domain):
+                return "550 alias unknown by SimpleLogin"
+
         user_email = forward_email.gen_email.user.email
         if envelope.mail_from != user_email:
             LOG.error(
@@ -248,10 +254,13 @@ class MailHandler:
             envelope.rcpt_options,
         )
 
-        # todo: add DKIM-Signature for custom domain
-        # add DKIM-Signature for non-custom-domain alias
-        if alias.endswith(EMAIL_DOMAIN):
+        if alias_domain == EMAIL_DOMAIN:
             add_dkim_signature(msg, EMAIL_DOMAIN)
+        # add DKIM-Signature for non-custom-domain alias
+        else:
+            custom_domain: CustomDomain = CustomDomain.get_by(domain=alias_domain)
+            if custom_domain.dkim_verified:
+                add_dkim_signature(msg, EMAIL_DOMAIN)
 
         msg_raw = msg.as_string().encode()
         smtp.sendmail(