Merge pull request #24656 from ankush/retry_contact

fix: outgoing email account handlng
This commit is contained in:
Ankush Menat 2024-02-01 11:52:07 +05:30 committed by GitHub
commit bedf5ba65e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -131,12 +131,12 @@ class EmailQueue(Document):
def attachments_list(self):
return json.loads(self.attachments) if self.attachments else []
def get_email_account(self):
def get_email_account(self, raise_error=False):
if self.email_account:
return frappe.get_cached_doc("Email Account", self.email_account)
return EmailAccount.find_outgoing(
match_by_email=self.sender, match_by_doctype=self.reference_doctype
match_by_email=self.sender, match_by_doctype=self.reference_doctype, _raise_error=raise_error
)
def is_to_be_sent(self):
@ -158,6 +158,7 @@ class EmailQueue(Document):
return
with SendMailContext(self, smtp_server_instance) as ctx:
ctx.fetch_smtp_server()
message = None
for recipient in self.recipients:
if recipient.is_mail_sent():
@ -233,14 +234,16 @@ class SendMailContext:
smtp_server_instance: SMTPServer = None,
):
self.queue_doc: EmailQueue = queue_doc
self.email_account_doc = queue_doc.get_email_account()
self.smtp_server: SMTPServer = smtp_server_instance or self.email_account_doc.get_smtp_server()
self.smtp_server: SMTPServer = smtp_server_instance
self.sent_to_atleast_one_recipient = any(
rec.recipient for rec in self.queue_doc.recipients if rec.is_mail_sent()
)
def fetch_smtp_server(self):
self.email_account_doc = self.queue_doc.get_email_account(raise_error=True)
if not self.smtp_server:
self.smtp_server = self.email_account_doc.get_smtp_server()
def __enter__(self):
self.queue_doc.update_status(status="Sending", commit=True)
return self
@ -733,7 +736,7 @@ class QueueBuilder:
recipients = list(set([r] + self.final_cc() + self.bcc))
q = EmailQueue.new({**queue_data, **{"recipients": recipients}}, ignore_permissions=True)
if not smtp_server_instance:
email_account = q.get_email_account()
email_account = q.get_email_account(raise_error=True)
smtp_server_instance = email_account.get_smtp_server()
with suppress(Exception):