mirror of
https://github.com/pacnpal/django-anymail.git
synced 2025-12-21 20:31:06 -05:00
Use specific ESP name in error messages.
Change (e.g.,) "ESP API response 400" to "Mailgun API response 400".
This commit is contained in:
@@ -183,7 +183,8 @@ class AnymailBaseBackend(BaseEmailBackend):
|
||||
# Error if *all* recipients are invalid or refused
|
||||
# (This behavior parallels smtplib.SMTPRecipientsRefused from Django's SMTP EmailBackend)
|
||||
if anymail_status.status.issubset({"invalid", "rejected"}):
|
||||
raise AnymailRecipientsRefused(email_message=message, payload=payload, response=response)
|
||||
raise AnymailRecipientsRefused(email_message=message, payload=payload, response=response,
|
||||
backend=self)
|
||||
|
||||
@property
|
||||
def esp_name(self):
|
||||
|
||||
@@ -85,7 +85,8 @@ class AnymailRequestsBackend(AnymailBaseBackend):
|
||||
parse_recipient_status)
|
||||
"""
|
||||
if response.status_code != 200:
|
||||
raise AnymailRequestsAPIError(email_message=message, payload=payload, response=response)
|
||||
raise AnymailRequestsAPIError(email_message=message, payload=payload, response=response,
|
||||
backend=self)
|
||||
|
||||
def deserialize_json_response(self, response, payload, message):
|
||||
"""Deserialize an ESP API response that's in json.
|
||||
@@ -96,7 +97,8 @@ class AnymailRequestsBackend(AnymailBaseBackend):
|
||||
return response.json()
|
||||
except ValueError:
|
||||
raise AnymailRequestsAPIError("Invalid JSON in %s API response" % self.esp_name,
|
||||
email_message=message, payload=payload, response=response)
|
||||
email_message=message, payload=payload, response=response,
|
||||
backend=self)
|
||||
|
||||
|
||||
class RequestsPayload(BasePayload):
|
||||
|
||||
@@ -46,10 +46,12 @@ class EmailBackend(AnymailRequestsBackend):
|
||||
mailgun_message = parsed_response["message"]
|
||||
except (KeyError, TypeError):
|
||||
raise AnymailRequestsAPIError("Invalid Mailgun API response format",
|
||||
email_message=message, payload=payload, response=response)
|
||||
email_message=message, payload=payload, response=response,
|
||||
backend=self)
|
||||
if not mailgun_message.startswith("Queued"):
|
||||
raise AnymailRequestsAPIError("Unrecognized Mailgun API message '%s'" % mailgun_message,
|
||||
email_message=message, payload=payload, response=response)
|
||||
email_message=message, payload=payload, response=response,
|
||||
backend=self)
|
||||
# Simulate a per-recipient status of "queued":
|
||||
status = AnymailRecipientStatus(message_id=message_id, status="queued")
|
||||
return {recipient.email: status for recipient in payload.all_recipients}
|
||||
|
||||
@@ -42,7 +42,8 @@ class EmailBackend(AnymailRequestsBackend):
|
||||
recipient_status[email] = AnymailRecipientStatus(message_id=message_id, status=status)
|
||||
except (KeyError, TypeError):
|
||||
raise AnymailRequestsAPIError("Invalid Mandrill API response format",
|
||||
email_message=message, payload=payload, response=response)
|
||||
email_message=message, payload=payload, response=response,
|
||||
backend=self)
|
||||
return recipient_status
|
||||
|
||||
|
||||
|
||||
@@ -42,7 +42,8 @@ class EmailBackend(AnymailRequestsBackend):
|
||||
msg = parsed_response["Message"]
|
||||
except (KeyError, TypeError):
|
||||
raise AnymailRequestsAPIError("Invalid Postmark API response format",
|
||||
email_message=message, payload=payload, response=response)
|
||||
email_message=message, payload=payload, response=response,
|
||||
backend=self)
|
||||
|
||||
message_id = parsed_response.get("MessageID", None)
|
||||
rejected_emails = []
|
||||
@@ -51,7 +52,8 @@ class EmailBackend(AnymailRequestsBackend):
|
||||
# Either the From address or at least one recipient was invalid. Email not sent.
|
||||
if "'From' address" in msg:
|
||||
# Normal error
|
||||
raise AnymailRequestsAPIError(email_message=message, payload=payload, response=response)
|
||||
raise AnymailRequestsAPIError(email_message=message, payload=payload, response=response,
|
||||
backend=self)
|
||||
else:
|
||||
# Use AnymailRecipientsRefused logic
|
||||
default_status = 'invalid'
|
||||
@@ -64,7 +66,8 @@ class EmailBackend(AnymailRequestsBackend):
|
||||
default_status = 'sent'
|
||||
rejected_emails = self.parse_inactive_recipients(msg)
|
||||
else:
|
||||
raise AnymailRequestsAPIError(email_message=message, payload=payload, response=response)
|
||||
raise AnymailRequestsAPIError(email_message=message, payload=payload, response=response,
|
||||
backend=self)
|
||||
|
||||
return {
|
||||
recipient.email: AnymailRecipientStatus(
|
||||
|
||||
@@ -55,7 +55,8 @@ class EmailBackend(AnymailRequestsBackend):
|
||||
|
||||
def raise_for_status(self, response, payload, message):
|
||||
if response.status_code < 200 or response.status_code >= 300:
|
||||
raise AnymailRequestsAPIError(email_message=message, payload=payload, response=response)
|
||||
raise AnymailRequestsAPIError(email_message=message, payload=payload, response=response,
|
||||
backend=self)
|
||||
|
||||
def parse_recipient_status(self, response, payload, message):
|
||||
# If we get here, the send call was successful.
|
||||
|
||||
@@ -54,11 +54,13 @@ class EmailBackend(AnymailRequestsBackend):
|
||||
sendgrid_message = parsed_response["message"]
|
||||
except (KeyError, TypeError):
|
||||
raise AnymailRequestsAPIError("Invalid SendGrid API response format",
|
||||
email_message=message, payload=payload, response=response)
|
||||
email_message=message, payload=payload, response=response,
|
||||
backend=self)
|
||||
if sendgrid_message != "success":
|
||||
errors = parsed_response.get("errors", [])
|
||||
raise AnymailRequestsAPIError("SendGrid send failed: '%s'" % "; ".join(errors),
|
||||
email_message=message, payload=payload, response=response)
|
||||
email_message=message, payload=payload, response=response,
|
||||
backend=self)
|
||||
# Simulate a per-recipient status of "queued":
|
||||
status = AnymailRecipientStatus(message_id=payload.message_id, status="queued")
|
||||
return {recipient.email: status for recipient in payload.all_recipients}
|
||||
|
||||
Reference in New Issue
Block a user