All notable changes to this project will be documented in this file.
Library - Feature
- PR #1073: geolocation setter in sendgrid-python for GDPR compliance. Thanks to @manisha1997!
Library - Test
Library - Feature
- PR #1062: Add reply_to_list functionality. Thanks to @thepuzzlemaster!
- PR #1059: Add Python 3.11 to the testing. Thanks to @cclauss!
Library - Miscellaneous
- PR #1065: Create GitHub Action to lint Python code. Thanks to @cclauss!
- PR #1064: Upgrade GitHub Action test-and-deploy.yml. Thanks to @cclauss!
- PR #1063: Upgrade GitHub Action pr-lint.yml. Thanks to @cclauss!
Library - Test
Library - Docs
- PR #1055: Modify README.md in alignment with SendGrid Support. Thanks to @garethpaul!
- PR #1052: Fix link that has drifted. Thanks to @jonathanberger!
Library - Chore
- PR #1048: Update mail_example.py. Thanks to @vmesel!
- PR #1049: push Datadog Release Metric upon deploy success. Thanks to @eshanholtz!
- PR #1050: fix flask dependency test issues. Thanks to @eshanholtz!
Library - Chore
- PR #1044: drop pytest which was not being used. Thanks to @childish-sambino!
- PR #1043: upgrade supported language versions. Thanks to @childish-sambino!
- PR #1041: add gh release to workflow. Thanks to @shwetha-manvinkurke!
- PR #1039: merge test and deploy workflows. Thanks to @Hunga1!
Library - Docs
Library - Chore
- PR #1031: Remove unused import from distutils. Thanks to @tirkarthi!
Library - Docs
- PR #1032: remove leading spaces on error handling example. Thanks to @thinkingserious!
Library - Test
- PR #1029: split up unit and integ tests. Thanks to @childish-sambino!
Library - Chore
- PR #1027: migrate to GitHub Actions. Thanks to @JenniferMah!
Library - Chore
Library - Feature
Library - Chore
- PR #1016: pin starkbank-ecdsa version. Thanks to @eshanholtz!
- PR #1015: pin starkbank-ecdsa version. Thanks to @eshanholtz!
Library - Docs
- PR #1013: improve signed event webhook validation docs. Thanks to @shwetha-manvinkurke!
Library - Chore
- PR #1007: test against v3.9. Thanks to @shwetha-manvinkurke!
Library - Chore
- PR #1003: get rid of reply_to in mail helper. Thanks to @shwetha-manvinkurke!
Library - Feature
Library - Chore
- PR #994: remove logic adding quotes to names containing , and ;. Thanks to @JenniferMah!
Library - Docs
Library - Feature
- PR #983: add v3 bypass filters. Thanks to @anarayanan604!
Library - Docs
Library - Fix
- PR #971: replace names in BatchId docstrings. Thanks to @bennylope!
Library - Feature
Library - Feature
- PR #945: Support for AMP HTML Email. Thanks to @modernwarfareuplink!
Library - Docs
- PR #962: Sending HTML email example is broken. Thanks to @mikeckennedy!
Library - Docs
- PR #955: fixed typo in sendgrid/helpers/mail/file_content.py. Thanks to @razvandimescu!
Library - Docs
- PR #936: correct attachment example. Thanks to @Arbitrage0!
Library - Chore
- PR #929: update GitHub branch references to use HEAD. Thanks to @thinkingserious!
Library - Docs
- PR #926: remove last references of "whitelabel". Thanks to @childish-sambino!
Library - Chore
- PR #925: migrate to new default sendgrid-oai branch. Thanks to @eshanholtz!
Library - Fix
- PR #921: allow general email type for to_emails. Thanks to @eshanholtz!
Library - Fix
Library - Docs
- PR #915: document change in top-level dependencies. Thanks to @honzajavorek!
Library - Fix
- PR #914: add dependency to install requires. Thanks to @eshanholtz!
Library - Docs
Library - Feature
- PR #908: add support for dynamic template data to Email class. Thanks to @childish-sambino!
- PR #901: verify signature from event webhook. Thanks to @eshanholtz!
Library - Fix
- PR #904: revert "feat: Add equality to Email". Thanks to @childish-sambino!
Library - Docs
- PR #895: Fixed Subject typo. Thanks to @dmitry-krasilnikov!
Library - Docs
- PR #893: Update readme supported versions. Thanks to @PaulMcMillan!
Library - Fix
- PR #888: migrate to common prism setup. Thanks to @childish-sambino!
Library - Feature
- PR #882: add support for Twilio Email. Thanks to @childish-sambino!
Library - Fix
- PR #881: correct the User-Agent casing. Thanks to @childish-sambino!
Library - Docs
- PR #880: support verbiage for login issues. Thanks to @adamchasetaylor!
Library - Docs
- PR #878: fix code snippet in README. Thanks to @neerajgupta2407!
- PR #734: Further Remove "Whitelabel" References. Thanks to @crweiner!
- PR #714: Give preference to 'to' after visible. Thanks to @agarwalrounak!
- PR #669: Fixed links in examples. Thanks to @pktrieu!
- PR #706: Fix grammatical errors. Thanks to @vinayak42!
- PR #682: Updated link to direct to #L9. Thanks to @vinayak42!
Library - Feature
- PR #739: Add equality to Email. Thanks to @mcintyre94!
Library - Chore
Library - Chore
- PR #844: Clean up sendgrid.py. Thanks to @Aman-am!
- PR #870: add Python 3.8 to Travis. Thanks to @childish-sambino!
Library - Fix
- PR #872: add config.yml file to pypi distribution files. Thanks to @eshanholtz!
Library - Fix
Library - Docs
- PR #865: baseline all the templated markdown docs. Thanks to @childish-sambino!
Library - Chore
- PR #853: clean up imports. Thanks to @DucarrougeR!
- PR #862: prep the repo for automated releasing. Thanks to @eshanholtz!
Library - Fix
- PR #863: improve make test command. Thanks to @eshanholtz!
- Bumped dependency on python-http-client to v3.2.1
- PR #807: Get version from version.py instead of version.txt. (BIG thanks to @lipis)
- PR #808: API key permissions mention in USAGE.md. (BIG thanks to @int-ua)
- PR #763: Updated Error Message Section. (BIG thanks to @FFX01)
- PR #818: Handle new API in the helper example. (BIG thanks to @enugentdt)
- PR #839: Fix for ganalytics json builder.
- PR #794: Update type requirements used for multiple objects (BIG thanks to @jphilipsen05)
- PR #797: API Key typo
- PR #792: Fixes #790: TypeError "name must be of type string" regression when name is Unicode string (BIG thanks to @johnpkennedy)
- PR #785: Link for 'Transactional Templates' in use_cases README.md broken (BIG thanks to @nguyenpk)
- Twilio SendGrid branding
- Twilio SMS example
- Updated CLA process
- The
Mail
helper signature has changed. - Setting up a
SendGridAPIClient
has changed.
Please see the use cases documentation for implemenation details.
This refactor was based on this issue. BIG thanks to all of those who participated in shaping this release.
In particular, BIG THANKS to: @yothinix @jeffoneill @elbuo8 @Jakobovski @andriisoldatenko @dibyadas @belfazt @iandouglas @mehronkugler
- PR #727: Use raw-string notation for regex to avoid invalid escape sequence (BIG thanks to @)
- PR #715: Correct attribution links formating (BIG thanks to @hugovk)
- PR #640: Changes suggested by grammarly (BIG thanks to @xeon-zolt)
- PR #697: PEP8 Fixes and String Formatting Enhancement (BIG thanks to @vkmrishad)
- PR #647: TROUBLESHOOTING.md broken link fix (BIG thanks to @arshadkazmi42)
- PR #638: Fixed syntax errors in Kitchen sink Python example code (BIG thanks to @vinayak42)
- PR #687: Remove references to "Whitelabel" (BIG thanks to @crweiner)
- PR #690: Corrected links in CoC (BIG thanks to @bhavinjawade)
- PR #656: Fix helper mail_example redirection link (BIG thanks to @joshuadeguzman)
- PR #636: Fix broken link for mail example (BIG thanks to @mattjegan)
- PR #630: Update requirements.txt (BIG thanks to @rahulkumaran)
- PR #628: Update job description in README (BIG thanks to @Jeremyyang920)
- PR #618: Quote names containing comma or semicolon (BIG thanks to @cmccandless)
- PR #613: Fix typos (BIG thanks to @Bharat123rox)
- PR #616: Fix typos (BIG thanks to @hugovk)
- PR #619: Fix format of dependency pytest (BIG thanks to @cmccandless)
- PR #611: Fix broken link (BIG thanks to @themousepotato)
- PR #488: Fix similar code issue in mail.py helper (BIG thanks to @adiman9)
- PR #496: Fix issues in sendgrid/helpers/mail/mail.py (BIG thanks to @galihmelon)
- PR #510: Fix similar code issue in sendgrid/helpers/mail/mail.py (BIG thanks to @nanspro)
- PR #524: Fix main failure on travis (relating to ASM raise-assertion). (BIG thanks to @extemporalgenome)
- PR #666: Created First-timers.md File (BIG thanks to @jaykay12)
- PR #655: Update USAGE.md (BIG thanks to @ChatPion)
- PR #665: Add use case for generation of Plain Text Content from HTML (BIG thanks to @cmccandless)
- PR #718: Update prerequisites (BIG thanks to @Rishabh04-02)
- PR #722: Updated README.md (BIG thanks to @rahulpuroht)
- PR #711: Cleanup Dockerfiles (BIG thanks to @rawkode)
- PR #709: Cleanup Env Documentation (BIG thanks to @rawkode)
- PR #631: Allow creation of Mail from EmailMessage (BIG thanks to @cmccandless)
- PR #683: Create README.md for mail_example.py (BIG thanks to @tulikavijay)
- PR #663: Converted README to reStructuredText and version as plain text file (BIG thanks to @StrikerRUS)
- PR #643: Add test to increase test coverage on config.py (BIG thanks to @zkan)
- PR #692: Add unit tests for spam check (BIG thanks to @pyasi)
- PR #637: Add support for Python 3.7 (BIG thanks to @hugovk)
- PR #626: Drop support for EOL Python 2.6 and 3.0-3.3 (BIG thanks to @hugovk)
- PR #486: Refactor sengrid get method of Mail class (BIG thanks to @Prashant-Surya)
- PR #493: Refactor personalization.py (BIG thanks to @defaults)
- PR #509: Refactor mail.py (BIG thanks to @palash16)
- PR #512: Refactor mail.py (BIG thanks to @extemporalgenome)
- PR #585: Fix typo in
mail_example.py
. Big thanks to Anurag Anand for the PR! - PR #583: Fix
Personalization.substitutions
setter. Trying to set substitutions directly rather than with add_substitution was causing an infinite regress. Big thanks to Richard Nias for the PR!
- PR #384: Adds how to set up domain whitelabel and how to view email statistics. Big thanks to Aditya Tandon for the PR!
- PR #427: Increase config.py coverage. Big thanks to Jeferson Daniel for the PR!
- PR #423: Update config.py with better file handling. Big thanks to Ajitesh Rai for the PR!
- PR #449: Add a .env_sample file and Update README.md. Big thanks to trangttt for the PR!
- PR #463: Add code climate.
- PR #455: Use with context manager and a few PEP8 changes. Big thanks to Tim for the PR!
- PR #470: Modularize lengthy method. Big thanks to Suprith Kumar Suvarneshwar for the PR!
- PR #425: Add tests for sendgrid.py apikey and api_key setters. Big thanks to Krista LaFentres for the PR!
- PR #446: Added PULL_REQUEST_TEMPLATE. Big thanks to Aleksandr Sobolev for the PR!
- PR #472: Moved mail helper classes into separate files. Big thanks to Milos Pejanovic for the PR!
- PR #481: Documented the new error handling functionality from python-http-client. Big thanks to Manjiri Tapaswi for the PR!
- PR #418: Add test for apps.py. Big thanks to Sinan Comert for the PR!
- PR #438: Update docstrings/pydoc/help. Big thanks to Gabriel Krell for the PR!
- PR #413: Error-checking in Mail helper/ASM. Big thanks to Gabriel Krell for the PR!
- PR #518: Announcement about Data Platform Engineer posting. Big thanks to Marghodk for the PR!
- PR #479: Add Project tests. Big thanks to Peter Hampton for the PR!
- PR #480: Test to check year in LICENSE.txt. Big thanks to Navin Pai for the PR!
- PR #476: Add tests for Send.py. Big thanks to Artiem K. for the PR!
- PR #366: Add AWS app tutorial to USE_CASES.md. Big thanks to Mike Vanbuskirk for the PR!
- PR #365: Write tutorial to deploy simple Django app on Heroku. Big thanks to Kan Ouivirach for the PR!
- PR #526: Include code reviews section. Big thanks to Jared Scott for the PR!
- PR #414: Provide utf-8 as encoding explicitly when opening text files. Big thanks to Ruslan Shestopalyuk for the PR!
- PR #537: Add unit testing support to .codeclimate.yml. Big thanks to Prashu Chaudhary for the PR!
- PR #554: Ensure params are applied independently. Big thanks to Nino Milenovic for the PR!
- PR #557: Client cleanup. Big thanks to Slam for the PR!
- PR #569: Make Mail helper parameters truly optional. Big thanks to Ian Beck for the PR!
- PR #415: Typos. Big thanks to Mohd Huzaifa Faruqui for the PR!
- PR #421: Typos. Big thanks to Abhishek Bhatt for the PR!
- PR #432: Typos. Big thanks to Gaurav Arora for the PR!
- PR #431: Typos. Big thanks to Gaurav Arora for the PR!
- PR #430: Attempt to sync before executing the shell command. Big thanks to Aditya Narayan for the PR!
- PR #429: Typos. Big thanks to daluntw for the PR!
- PR #492: Updated date-range in the LICENSE file. Big thanks to Dhruv Srivastava for the PR!
- PR #482: Typos. Big thanks to Karan Samani for the PR!
- PR #504: Fix .codeclimate.yml. Big thanks to Matt Bernier for the PR!
- PR #505: Remove unnecessary GitHub PR templates. Big thanks to Alex for the PR!
- PR #494: Remove unused import in register.py. Big thanks to Alexis Rivera De La Torre for the PR!
- PR #469: Removed the trailing white spaces. Big thanks to Siddaram Halli for the PR!
- PR #484: Python style fixes. Big thanks to Gabriel Krell for the PR!
- PR #508: Typos. Big thanks to Saksham Gupta for the PR!
- PR #353: Typos. Big thanks to Yothin M for the PR!
- PR #564: Typos. Big thanks to Chao for the PR!
- PR #424: Updating version 2.7.8 to 2.7.11 to match the version in pyenv install instruction. Big thanks to Krista LaFentres for the PR!
- PR #454: Requests to send mail with both plain text and HTML content fail if the HTML content is specified first. Big thanks to Ryan D'souza for the PR!
- PR #466: Fixed PEP8 issues. Big thanks to Piotr Szwarc for the PR!
- PR #522: Typos. Big thanks to Abhishek J for the PR!
- PR #514: Fix method_complexity issue in sendgrid/helpers/mail/ganalytics.py. Big thanks to Chetan Kumar for the PR!
- PR #515: Typos. Big thanks to Mohd Ali Rizwi for the PR!
- PR #519: Typos. Big thanks to Aashish Gaba for the PR!
- PR #532: Typos. Big thanks to ~ for the PR!
- PR #533: Fix shadowed builtins,
id
->id_
. Big thanks to ~ for the PR! - PR #581: Typos. Big thanks to Silvia Botros for the PR!
- PR #513: Typos. Big thanks to thepriefy for the PR!
- PR #538: Fix bug in get_mock_personalization_dict(). Big thanks to PierreMonico for the PR!
- PR #543: Typos. Big thanks to Matthieu Bonnefoy for the PR!
- Pull #348: Allows users to submit rfc822 formatted email addresses
- Big thanks to Matt Bernier for the pull request!
- Pull #364: Install prism with non superuser account
- Big thanks to meahow for the pull request!
- Pull #335: Permit unicode string values with Substitution helper
- Big thanks to Mehron Kugler for the pull request!
- Pull #338: Allow the
__str__
method for theMail
object return anString
instead of aNoneType
- Solves #292: The
__str__
method of theMail
class, doesn't actually return anything - Big thanks to belfazt for the pull request!
- Pull #337, fixes issue #366
- On install, some experienced:
ValueError: ("Expected ',' or end-of-list in", 'python-http-client ==3.0.*', 'at', '*')
- The breaking change actually happened in version 4.2.1, where I mistakenly applied a patch version bump. See issues #328 and #321 for details.
- This version (5.0.0) replaces error handling via HTTPError from urllib in favor of custom error handling via the HTTPError class as was the case in version 4.2.0.
- Issue #321: Installing 4.2.0 installs the wrong version of python-http-client
- Big thanks to w- for the heads up!
- Pull #318 Add ability to reset request headers on client attribute
- Big thanks to w- for the pull request!
- Pull #314 Add ability to impersonate subuser
- Big thanks to w- for the pull request!
- Pull #244 refactor helpers using property getter/setter
- Big thanks to Denis Vlasov for the pull request!
- The changes break the implementation of the Mail Helper
Mail()
class set_from()
is now the propertyfrom_email
set_subject()
is now the propertysubject
set_template_id()
is now the propertytemplate_id
set_send_at()
is now the propertysend_at
set_batch_id()
is now the propertybatch_id
set_asm()
is now the propertyasm
set_ip_pool_name()
is now the propertyip_pool_name
set_mail_settings()
is now the propertymail_settings
set_tracking_settings()
is now the propertytracking_settings
set_reply_to()
is now the propertyreply_to
personalization.set_send_at()
is now the propertypersonalization.send_at
personalization.set_subject()
is now the propertypersonalization.subject
attachment.set_content()
is now the propertyattachment.content
attachment.set_type()
is now the propertyattachment.type
attachment.set_filename()
is now the propertyattachment.filename
attachment.set_disposition()
is now the propertyattachment.disposition
attachment.set_content_id()
is now the propertyattachment.content_id
mail_settings.set_bcc_settings()
is now the propertymail_settings.bcc_settings
mail_settings.set_bypass_list_management()
is now the propertymail_settings.bypass_list_management
mail_settings.set_footer_settings()
is now the propertymail_settings.footer_settings
mail_settings.set_sandbox_mode()
is now the propertymail_settings.sandbox_mode
mail_settings.set_spam_check()
is now the propertymail_settings.spam_check
tracking_settings.set_click_tracking()
is now the propertyclick_tracking
tracking_settings.set_open_tracking()
is now the propertyopen_tracking
tracking_settings.set_subscription_tracking()
is now the propertysubscription_tracking
tracking_settings.set_ganalytics()
is now the propertyganalytics
- Pull #300 Exclude test package
- Big thanks to Iryna Shcherbina for the pull request!
- Pull #250 Improve code quality
- Big thanks to Andrii Soldatenko for the pull request!
- Pull #243 Update deprecated Heroku command
- Big thanks to Roberto Ortega for the pull request!
- Pull #240 Add six to requirements.txt
- Big thanks to Wataru Sato for the pull request!
- Pull #246 Typo 'user' for 'usr'
- Big thanks to Mike Ralphson for the pull request!
- Pull #234 Substitutions allow non-strings for values
- Big thanks to ittus for the pull request!
- Pull #233: Allow dict to be passed to add_headers
- Big thanks to Navin Pai for the pull request!
- Pull #215
- Support larger files. Note that there is a 20MB maximum.
- Pull #213
- Naming inconsistency, we now standardized on
file_name
- Support for use of
iteritems
in Python 3
- Pull #212
- Allow for custom Inbound Parse config.yml
- Pull #211
- Within sendgrid/helpers/inbound/parse.py - moved doc strings to be under function definitions
- broke up def attachments(...) into two individual private functions, so it's a bit less cumbersome and can be individually tested better
- Big thanks to Christopher Li for the pull request!
- Table of Contents in the README
- Added a USE_CASES.md section, with the first use case example for transactional templates
- pep8 formatting
- include Heroku config files in PyPi
- Helper code for our Inbound Parse webhook
- Release 3.1.9 was botched (sorry!), so the apikey/api_key fix 3.1.9 was supposed to address is now in this release
- Issue #197: api_key / apikey attribute logic incorrect
- Thanks to johguse for reporting the bug
- Troubleshooting section
- Solves issue 195
- The variable apikey and api_key are now interchangeable to help support those migrating from v2
- Thanks to Ian Douglas for the feedback!
- README updates
- Update introduction blurb to include information regarding our forward path
- Update the v3 /mail/send example to include non-helper usage
- Update the generic v3 example to include non-fluent interface usage
- Update docs, unit tests and examples to include Sender ID
- Fixed logic errors related to issue #189
- Dependency update to fix issue #186
- Tests now mocked automatically against prism
- Issue 185: Getting HTTP Error 406 when getting bounces
- Examples, USAGE.md and Unit Tests with updated content and new endpoints
- Breaking change to support the v3 Web API
- New HTTP client
- v3 Mail Send helper
- you can now pass a path to your .env file to the SendGridAPIClient
- you can now pass an apikey to the SendGridAPIClient, per issue #168. Thanks Matt!
- fix .rst formatting for PyPi
- breaking change is only for the Web API v3 endpoints
- we now have support for all Web API v3 endpoints
- a call to GET api_keys after a call to DELETE api_keys would throw an error.
- the timeout value is no longer hard coded.
- smtpi-sendgrid dependency is now 0.3.1, the latest version: 161. Thanks Kevin Brown!
- Can't install normally 155
- Fix "HTTP 406 Not Acceptable Errors" 149
- Global Stats [GET]
- Template Engine documentation
- SMTPAPI documentation
- API Keys documentation for [POST, PATCH, DELETE]
- Fix "Mail uses old-style class again" 144
- Fix timeout via URLError 104
- Minor Refactor and README update
- ASM Global Suppressions [POST]
- ASM Global Suppressions [DELETE]
- Suppression Unsubscribes [GET]
- Global Suppressions [GET]
- Include MIT.LICENSE in release tarball
- Removed unsupported endpoint
- Added Unsubscribe Groups [POST]
- Global Suppressions [GET]
- Refactored tests and added Tox support
- Framework for Web API v3 endpoints
- Web API v3 endpoints: apikeys, ASM groups and ASM suppressions
- Python 3 Fix #126
- Reply To header now supports friendly name #110
- Upgrade Mail to new-style class, on Python 2.x.
- Classifiers for compatible python versions
- Support for API keys
- Add new method for ASM Group ID via #98
- Add CHANGELOG.md