| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445 | 
                        - 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
 - 
 - 
 - 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):
 -         logging.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"])
 -             mail = Mail(from_email, to_email, subject, content)
 -             mail_json = mail.get()  # type: ignore
 -             response = sg.client.mail.send.post(request_body=mail_json)
 -             logging.debug(response.status_code)
 -             logging.debug(response.body)
 -             logging.debug(response.headers)
 - 
 -         except TimeoutError as e:
 -             logging.exception("SendGridClient Timeout occurred while sending email")
 -             raise
 -         except (UnauthorizedError, ForbiddenError) as e:
 -             logging.exception(
 -                 "SendGridClient Authentication failed. "
 -                 "Verify that your credentials and the 'from' email address are correct"
 -             )
 -             raise
 -         except Exception as e:
 -             logging.exception("SendGridClient Unexpected error occurred while sending email to %s", _to)
 -             raise
 
 
  |