mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 02:42:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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(f"SendGridClient Unexpected error occurred while sending email to {_to}")
 | |
|             raise
 | 
