#35514: Dictionary based EMAIL_PROVIDERS settings
-----------------------------+--------------------------------------
     Reporter:  Jacob Rief   |                    Owner:  Jacob Rief
         Type:  New feature  |                   Status:  assigned
    Component:  Core (Mail)  |                  Version:  dev
     Severity:  Normal       |               Resolution:
     Keywords:               |             Triage Stage:  Accepted
    Has patch:  0            |      Needs documentation:  0
  Needs tests:  0            |  Patch needs improvement:  0
Easy pickings:  0            |                    UI/UX:  0
-----------------------------+--------------------------------------
Comment (by Mike Edmunds):

 [[https://github.com/anymail/django-anymail django-anymail] maintainer
 here]

 I'm excited to see this getting traction. There are several common, real-
 world use cases for it.

 For the setting name, I'd suggest `EMAIL_BACKENDS`, since it configures
 email backends, and a lot of existing docs and tutorials talk about
 "backends." Also, `EMAIL_PROVIDERS` and `EMAILS` could imply configuration
 for both sending ''and receiving'' email. (But I don't feel that
 strongly.)

 Handful of questions:

 1) Are these settings provided as kwargs to the backend's constructor
 (with the names lowercased)? E.g., with:

 {{{#!python
 EMAIL_PROVIDERS = {
     "default": {
         "BACKEND": "django.core.mail.backends.smtp.EmailBackend",
         "HOST": "smtp-relay.gmail.com",
         "USER": "a...@example.com",
         "PASSWORD": env["GMAIL_APP_PASSWORD"],
     },
     "transactional": {
         "BACKEND": "anymail.backends.mailgun.EmailBackend",
         "API_KEY": env["MAILGUN_API_KEY"],
         "SENDER_DOMAIN": "app.example.com",
     },
 }
 }}}

 am I assuming correctly that a request for the "transactional" provider
 would end up creating:

 {{{#!python
 connection = anymail.backends.mailgun.EmailBackend(
     api_key="...",
     sender_domain="app.example.com",
     # (and no host, user, or password args)
 )
 }}}

 2) How does a caller request a particular provider? Is there a new
 argument to `send_mail` and friends? (`name="..."`? `provider="..."`?)

 3) It would be helpful if the logging `AdminEmailHandler` and
 `mail_managers` could be easily configured to use a different provider
 than django.contrib.auth. E.g., maybe admin/manager email uses
 `EMAIL_PROVIDERS["admin"]` if present. (It's fairly common to want
 internal SMTP for admin notifications, but a transactional email service
 provider for password resets. And usually you want the transactional ESP
 to be the default.)

 In general, for third-party libraries that send email, do you envision
 them adding a new setting to select an email provider
 (`ALLAUTH_EMAIL_PROVIDER = "transactional"`)? Or maybe django-allauth
 would want to try `provider="allauth"` first and fall back to
 `provider="default"`? Or…?

 4) Is `DEFAULT_FROM_EMAIL` affected by this at all? There's an argument
 the default from_email will often need to vary by provider, but that might
 require changes to all email backends. The simplest answer is no, it's a
 global default across all providers. (Ditto `SERVER_EMAIL` for
 admin/manager notifications.)

 Again, I'm glad to see this proposal moving forward, and happy to test
 with django-anymail when the time comes. (Anymail backends
 [https://anymail.dev/en/stable/installation/#anymail-settings-
 
reference:~:text=override%20most%20settings%20on%20a%20per%2Dinstance%20basis%20by%20providing%20keyword%20args%20where%20the%20instance%20is%20initialized
 already support constructor kwargs] for their settings, so if I'm
 understanding the first item correctly, it should "just work.")
-- 
Ticket URL: <https://code.djangoproject.com/ticket/35514#comment:4>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/0107019003dc391e-e8c64550-a031-4ec6-b8de-09cfc0274263-000000%40eu-central-1.amazonses.com.

Reply via email to