#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.