| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | 
							- import logging
 - from typing import Optional
 - 
 - import resend
 - from flask import Flask
 - 
 - from configs import dify_config
 - 
 - 
 - class Mail:
 -     def __init__(self):
 -         self._client = None
 -         self._default_send_from = None
 - 
 -     def is_inited(self) -> bool:
 -         return self._client is not None
 - 
 -     def init_app(self, app: Flask):
 -         mail_type = dify_config.MAIL_TYPE
 -         if not mail_type:
 -             logging.warning("MAIL_TYPE is not set")
 -             return
 - 
 -         if dify_config.MAIL_DEFAULT_SEND_FROM:
 -             self._default_send_from = dify_config.MAIL_DEFAULT_SEND_FROM
 - 
 -         match mail_type:
 -             case "resend":
 -                 api_key = dify_config.RESEND_API_KEY
 -                 if not api_key:
 -                     raise ValueError("RESEND_API_KEY is not set")
 - 
 -                 api_url = dify_config.RESEND_API_URL
 -                 if api_url:
 -                     resend.api_url = api_url
 - 
 -                 resend.api_key = api_key
 -                 self._client = resend.Emails
 -             case "smtp":
 -                 from libs.smtp import SMTPClient
 - 
 -                 if not dify_config.SMTP_SERVER or not dify_config.SMTP_PORT:
 -                     raise ValueError("SMTP_SERVER and SMTP_PORT are required for smtp mail type")
 -                 if not dify_config.SMTP_USE_TLS and dify_config.SMTP_OPPORTUNISTIC_TLS:
 -                     raise ValueError("SMTP_OPPORTUNISTIC_TLS is not supported without enabling SMTP_USE_TLS")
 -                 self._client = SMTPClient(
 -                     server=dify_config.SMTP_SERVER,
 -                     port=dify_config.SMTP_PORT,
 -                     username=dify_config.SMTP_USERNAME,
 -                     password=dify_config.SMTP_PASSWORD,
 -                     _from=dify_config.MAIL_DEFAULT_SEND_FROM,
 -                     use_tls=dify_config.SMTP_USE_TLS,
 -                     opportunistic_tls=dify_config.SMTP_OPPORTUNISTIC_TLS,
 -                 )
 -             case _:
 -                 raise ValueError("Unsupported mail type {}".format(mail_type))
 - 
 -     def send(self, to: str, subject: str, html: str, from_: Optional[str] = None):
 -         if not self._client:
 -             raise ValueError("Mail client is not initialized")
 - 
 -         if not from_ and self._default_send_from:
 -             from_ = self._default_send_from
 - 
 -         if not from_:
 -             raise ValueError("mail from is not set")
 - 
 -         if not to:
 -             raise ValueError("mail to is not set")
 - 
 -         if not subject:
 -             raise ValueError("mail subject is not set")
 - 
 -         if not html:
 -             raise ValueError("mail html is not set")
 - 
 -         self._client.send(
 -             {
 -                 "from": from_,
 -                 "to": to,
 -                 "subject": subject,
 -                 "html": html,
 -             }
 -         )
 - 
 - 
 - def init_app(app: Flask):
 -     mail.init_app(app)
 - 
 - 
 - mail = Mail()
 
 
  |