mirror of
https://github.com/simple-login/app.git
synced 2024-09-20 15:05:59 +08:00
use async in email handler
This commit is contained in:
parent
eb0e327402
commit
4d7cd09847
|
@ -31,6 +31,7 @@ It should contain the following info:
|
|||
|
||||
"""
|
||||
import argparse
|
||||
import asyncio
|
||||
import email
|
||||
import os
|
||||
import time
|
||||
|
@ -1711,7 +1712,7 @@ def should_ignore(mail_from: str, rcpt_tos: List[str]) -> bool:
|
|||
return False
|
||||
|
||||
|
||||
def handle(envelope: Envelope) -> str:
|
||||
async def handle(envelope: Envelope) -> str:
|
||||
"""Return SMTP status"""
|
||||
|
||||
# sanitize mail_from, rcpt_tos
|
||||
|
@ -1934,7 +1935,7 @@ def handle(envelope: Envelope) -> str:
|
|||
class MailHandler:
|
||||
async def handle_DATA(self, server, session, envelope: Envelope):
|
||||
try:
|
||||
ret = self._handle(envelope)
|
||||
ret = await self._handle(envelope)
|
||||
return ret
|
||||
except Exception:
|
||||
LOG.e(
|
||||
|
@ -1945,7 +1946,7 @@ class MailHandler:
|
|||
return status.E404
|
||||
|
||||
@newrelic.agent.background_task(application=newrelic_app)
|
||||
def _handle(self, envelope: Envelope):
|
||||
async def _handle(self, envelope: Envelope):
|
||||
start = time.time()
|
||||
|
||||
# generate a different message_id to keep track of an email lifecycle
|
||||
|
@ -1958,23 +1959,21 @@ class MailHandler:
|
|||
envelope.rcpt_tos,
|
||||
)
|
||||
|
||||
app = new_app()
|
||||
with app.app_context():
|
||||
ret = handle(envelope)
|
||||
elapsed = time.time() - start
|
||||
LOG.i(
|
||||
"Finish mail from %s, rctp tos %s, takes %s seconds <<===",
|
||||
envelope.mail_from,
|
||||
envelope.rcpt_tos,
|
||||
elapsed,
|
||||
)
|
||||
newrelic.agent.record_custom_metric(
|
||||
"Custom/email_handler_time", elapsed, newrelic_app
|
||||
)
|
||||
newrelic.agent.record_custom_metric(
|
||||
"Custom/number_incoming_email", 1, newrelic_app
|
||||
)
|
||||
return ret
|
||||
ret = await handle(envelope)
|
||||
elapsed = time.time() - start
|
||||
LOG.i(
|
||||
"Finish mail from %s, rctp tos %s, takes %s seconds <<===",
|
||||
envelope.mail_from,
|
||||
envelope.rcpt_tos,
|
||||
elapsed,
|
||||
)
|
||||
newrelic.agent.record_custom_metric(
|
||||
"Custom/email_handler_time", elapsed, newrelic_app
|
||||
)
|
||||
newrelic.agent.record_custom_metric(
|
||||
"Custom/number_incoming_email", 1, newrelic_app
|
||||
)
|
||||
return ret
|
||||
|
||||
|
||||
def main(port: int):
|
||||
|
|
Loading…
Reference in a new issue