diff options
Diffstat (limited to '.venv/lib/python3.12/site-packages/sendgrid/helpers/mail/email.py')
-rw-r--r-- | .venv/lib/python3.12/site-packages/sendgrid/helpers/mail/email.py | 228 |
1 files changed, 228 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/sendgrid/helpers/mail/email.py b/.venv/lib/python3.12/site-packages/sendgrid/helpers/mail/email.py new file mode 100644 index 00000000..aeab26af --- /dev/null +++ b/.venv/lib/python3.12/site-packages/sendgrid/helpers/mail/email.py @@ -0,0 +1,228 @@ +try: + import rfc822 +except ImportError: + import email.utils as rfc822 + +try: + basestring = basestring +except NameError: + # Define basestring when Python >= 3.0 + basestring = str + + +class Email(object): + """An email address with an optional name.""" + + def __init__(self, + email=None, + name=None, + substitutions=None, + subject=None, + p=0, + dynamic_template_data=None): + """Create an Email with the given address and name. + + Either fill the separate name and email fields, or pass all information + in the email parameter (e.g. email="dude Fella <example@example.com>"). + :param email: Email address, or name and address in standard format. + :type email: string, optional + :param name: Name for this sender or recipient. + :type name: string, optional + :param substitutions: String substitutions to be applied to the email. + :type substitutions: list(Substitution), optional + :param subject: Subject for this sender or recipient. + :type subject: string, optional + :param p: p is the Personalization object or Personalization object + index + :type p: Personalization, integer, optional + :param dynamic_template_data: Data for a dynamic transactional template. + :type dynamic_template_data: DynamicTemplateData, optional + """ + self._name = None + self._email = None + self._personalization = p + + if email and not name: + # allows passing emails as "Example Name <example@example.com>" + self.parse_email(email) + else: + # allows backwards compatibility for Email(email, name) + if email is not None: + self.email = email + + if name is not None: + self.name = name + + # Note that these only apply to To Emails (see Personalization.add_to) + # and should be moved but have not been for compatibility. + self._substitutions = substitutions + self._dynamic_template_data = dynamic_template_data + self._subject = subject + + @property + def name(self): + """Name associated with this email. + + :rtype: string + """ + return self._name + + @name.setter + def name(self, value): + """Name associated with this email. + + :param value: Name associated with this email. + :type value: string + """ + if not (value is None or isinstance(value, basestring)): + raise TypeError('name must be of type string.') + + self._name = value + + @property + def email(self): + """Email address. + + See http://tools.ietf.org/html/rfc3696#section-3 and its errata + http://www.rfc-editor.org/errata_search.php?rfc=3696 for information + on valid email addresses. + + :rtype: string + """ + return self._email + + @email.setter + def email(self, value): + """Email address. + + See http://tools.ietf.org/html/rfc3696#section-3 and its errata + http://www.rfc-editor.org/errata_search.php?rfc=3696 for information + on valid email addresses. + + :param value: Email address. + See http://tools.ietf.org/html/rfc3696#section-3 and its errata + http://www.rfc-editor.org/errata_search.php?rfc=3696 for information + on valid email addresses. + :type value: string + """ + self._email = value + + @property + def substitutions(self): + """A list of Substitution objects. These substitutions will apply to + the text and html content of the body of your email, in addition + to the subject and reply-to parameters. The total collective size + of your substitutions may not exceed 10,000 bytes per + personalization object. + + :rtype: list(Substitution) + """ + return self._substitutions + + @substitutions.setter + def substitutions(self, value): + """A list of Substitution objects. These substitutions will apply to + the text and html content of the body of your email, in addition to + the subject and reply-to parameters. The total collective size of + your substitutions may not exceed 10,000 bytes per personalization + object. + + :param value: A list of Substitution objects. These substitutions will + apply to the text and html content of the body of your email, in + addition to the subject and reply-to parameters. The total collective + size of your substitutions may not exceed 10,000 bytes per + personalization object. + :type value: list(Substitution) + """ + self._substitutions = value + + @property + def dynamic_template_data(self): + """Data for a dynamic transactional template. + + :rtype: DynamicTemplateData + """ + return self._dynamic_template_data + + @dynamic_template_data.setter + def dynamic_template_data(self, value): + """Data for a dynamic transactional template. + + :param value: DynamicTemplateData + :type value: DynamicTemplateData + """ + self._dynamic_template_data = value + + @property + def subject(self): + """Subject for this sender or recipient. + + :rtype: string + """ + return self._subject + + @subject.setter + def subject(self, value): + """Subject for this sender or recipient. + + :param value: Subject for this sender or recipient. + :type value: string, optional + """ + self._subject = value + + @property + def personalization(self): + """The Personalization object or Personalization object index + + :rtype: Personalization, integer + """ + return self._personalization + + @personalization.setter + def personalization(self, value): + """The Personalization object or Personalization object index + + :param value: The Personalization object or Personalization object + index + :type value: Personalization, integer + """ + self._personalization = value + + def parse_email(self, email_info): + """Allows passing emails as "Example Name <example@example.com>" + + :param email_info: Allows passing emails as + "Example Name <example@example.com>" + :type email_info: string + """ + name, email = rfc822.parseaddr(email_info) + + # more than likely a string was passed here instead of an email address + if "@" not in email: + name = email + email = None + + if not name: + name = None + + if not email: + email = None + + self.name = name + self.email = email + return name, email + + def get(self): + """ + Get a JSON-ready representation of this Email. + + :returns: This Email, ready for use in a request body. + :rtype: dict + """ + email = {} + if self.name is not None: + email["name"] = self.name + + if self.email is not None: + email["email"] = self.email + return email |