| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | 
							- import logging
 - 
 - import sendgrid  # type: ignore
 - from python_http_client.exceptions import ForbiddenError, UnauthorizedError
 - from sendgrid.helpers.mail import Content, Email, Mail, To  # type: ignore
 - 
 - logger = logging.getLogger(__name__)
 - 
 - 
 - class SendGridClient:
 -     def __init__(self, sendgrid_api_key: str, _from: str):
 -         self.sendgrid_api_key = sendgrid_api_key
 -         self._from = _from
 - 
 -     def send(self, mail: dict):
 -         logger.debug("Sending email with SendGrid")
 - 
 -         try:
 -             _to = mail["to"]
 - 
 -             if not _to:
 -                 raise ValueError("SendGridClient: Cannot send email: recipient address is missing.")
 - 
 -             sg = sendgrid.SendGridAPIClient(api_key=self.sendgrid_api_key)
 -             from_email = Email(self._from)
 -             to_email = To(_to)
 -             subject = mail["subject"]
 -             content = Content("text/html", mail["html"])
 -             sg_mail = Mail(from_email, to_email, subject, content)
 -             mail_json = sg_mail.get()
 -             response = sg.client.mail.send.post(request_body=mail_json)  # ty: ignore [call-non-callable]
 -             logger.debug(response.status_code)
 -             logger.debug(response.body)
 -             logger.debug(response.headers)
 - 
 -         except TimeoutError:
 -             logger.exception("SendGridClient Timeout occurred while sending email")
 -             raise
 -         except (UnauthorizedError, ForbiddenError):
 -             logger.exception(
 -                 "SendGridClient Authentication failed. "
 -                 "Verify that your credentials and the 'from' email address are correct"
 -             )
 -             raise
 -         except Exception:
 -             logger.exception("SendGridClient Unexpected error occurred while sending email to %s", _to)
 -             raise
 
 
  |