#34783: No module named 'smtp' when trying to send an email
-------------------------------------+-------------------------------------
Reporter: Rami Boutassghount | Owner: nobody
Type: Bug | Status: new
Component: Core (Mail) | Version: 4.2
Severity: Normal | Resolution:
Keywords: mail, smtp, | Triage Stage:
emailbackend | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Description changed by Rami Boutassghount:
Old description:
> I am not sure if it's a bug or not, but I mark it as that since I am just
> following the docs for setting up the Email Backend.
>
> I get the Exception ''ModuleNotFoundError at /password/reset/ No module
> named 'smtp''' when I just try to send an Email using the function
> send_mail.
>
> Here is what I am using:
> * Ubuntu 22.04
> * Python 3.11.4
> * Django 4.2.2
> * EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
>
> An here is the complete traceback.
>
> {{{
> ModuleNotFoundError Traceback (most recent call
> last)
> Cell In[3], line 1
> ----> 1 send_mail("hello", "hi bro, what up?", "[email protected]",
> ["[email protected]"])
>
> File ~/nicecv/venv/lib/python3.11/site-
> packages/django/core/mail/__init__.py:76, in send_mail(subject, message,
> from_email, recipient_list, fail_silently, auth_user, auth_password,
> connection, html_message)
> 54 def send_mail(
> 55 subject,
> 56 message,
> (...)
> 63 html_message=None,
> 64 ):
> 65 """
> 66 Easy wrapper for sending a single message to a recipient
> list. All members
> 67 of the recipient list will see the other recipients in the
> 'To' field.
> (...)
> 74 functionality should use the EmailMessage class directly.
> 75 """
> ---> 76 connection = connection or get_connection(
> 77 username=auth_user,
> 78 password=auth_password,
> 79 fail_silently=fail_silently,
> 80 )
> 81 mail = EmailMultiAlternatives(
> 82 subject, message, from_email, recipient_list,
> connection=connection
> 83 )
> 84 if html_message:
>
> File ~/nicecv/venv/lib/python3.11/site-
> packages/django/core/mail/__init__.py:50, in get_connection(backend,
> fail_silently, **kwds)
> 42 def get_connection(backend=None, fail_silently=False, **kwds):
> 43 """Load an email backend and return an instance of it.
> 44
> 45 If backend is None (default), use settings.EMAIL_BACKEND.
> (...)
> 48 constructor of the backend.
> 49 """
> ---> 50 klass = import_string(backend or settings.EMAIL_BACKEND)
> 51 return klass(fail_silently=fail_silently, **kwds)
>
> File ~/nicecv/venv/lib/python3.11/site-
> packages/django/utils/module_loading.py:30, in import_string(dotted_path)
> 27 raise ImportError("%s doesn't look like a module path" %
> dotted_path) from err
> 29 try:
> ---> 30 return cached_import(module_path, class_name)
> 31 except AttributeError as err:
> 32 raise ImportError(
> 33 'Module "%s" does not define a "%s" attribute/class'
> 34 % (module_path, class_name)
> 35 ) from err
>
> File ~/nicecv/venv/lib/python3.11/site-
> packages/django/utils/module_loading.py:15, in cached_import(module_path,
> class_name)
> 8 def cached_import(module_path, class_name):
> 9 # Check whether module is loaded and fully initialized.
> 10 if not (
> 11 (module := sys.modules.get(module_path))
> 12 and (spec := getattr(module, "__spec__", None))
> 13 and getattr(spec, "_initializing", False) is False
> 14 ):
> ---> 15 module = import_module(module_path)
> 16 return getattr(module, class_name)
>
> File /usr/lib/python3.11/importlib/__init__.py:126, in
> import_module(name, package)
> 124 break
> 125 level += 1
> --> 126 return _bootstrap._gcd_import(name[level:], package, level)
>
> File <frozen importlib._bootstrap>:1204, in _gcd_import(name, package,
> level)
>
> File <frozen importlib._bootstrap>:1176, in _find_and_load(name, import_)
>
> File <frozen importlib._bootstrap>:1126, in _find_and_load_unlocked(name,
> import_)
>
> File <frozen importlib._bootstrap>:241, in _call_with_frames_removed(f,
> *args, **kwds)
>
> File <frozen importlib._bootstrap>:1204, in _gcd_import(name, package,
> level)
>
> File <frozen importlib._bootstrap>:1176, in _find_and_load(name, import_)
>
> File <frozen importlib._bootstrap>:1140, in _find_and_load_unlocked(name,
> import_)
>
> ModuleNotFoundError: No module named 'smtp'
>
> }}}
>
> Thank you for any help!
New description:
I am not sure if it's a bug or not, but I mark it as that since I am just
following the docs for setting up the Email Backend.
I get the Exception ''ModuleNotFoundError at /password/reset/ No module
named 'smtp' '' when I just try to send an Email using the function
send_mail.
Here is what I am using:
* Ubuntu 22.04
* Python 3.11.4
* Django 4.2.2
* EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
An here is the complete traceback.
{{{
ModuleNotFoundError Traceback (most recent call
last)
Cell In[3], line 1
----> 1 send_mail("hello", "hi bro, what up?", "[email protected]",
["[email protected]"])
File ~/nicecv/venv/lib/python3.11/site-
packages/django/core/mail/__init__.py:76, in send_mail(subject, message,
from_email, recipient_list, fail_silently, auth_user, auth_password,
connection, html_message)
54 def send_mail(
55 subject,
56 message,
(...)
63 html_message=None,
64 ):
65 """
66 Easy wrapper for sending a single message to a recipient list.
All members
67 of the recipient list will see the other recipients in the
'To' field.
(...)
74 functionality should use the EmailMessage class directly.
75 """
---> 76 connection = connection or get_connection(
77 username=auth_user,
78 password=auth_password,
79 fail_silently=fail_silently,
80 )
81 mail = EmailMultiAlternatives(
82 subject, message, from_email, recipient_list,
connection=connection
83 )
84 if html_message:
File ~/nicecv/venv/lib/python3.11/site-
packages/django/core/mail/__init__.py:50, in get_connection(backend,
fail_silently, **kwds)
42 def get_connection(backend=None, fail_silently=False, **kwds):
43 """Load an email backend and return an instance of it.
44
45 If backend is None (default), use settings.EMAIL_BACKEND.
(...)
48 constructor of the backend.
49 """
---> 50 klass = import_string(backend or settings.EMAIL_BACKEND)
51 return klass(fail_silently=fail_silently, **kwds)
File ~/nicecv/venv/lib/python3.11/site-
packages/django/utils/module_loading.py:30, in import_string(dotted_path)
27 raise ImportError("%s doesn't look like a module path" %
dotted_path) from err
29 try:
---> 30 return cached_import(module_path, class_name)
31 except AttributeError as err:
32 raise ImportError(
33 'Module "%s" does not define a "%s" attribute/class'
34 % (module_path, class_name)
35 ) from err
File ~/nicecv/venv/lib/python3.11/site-
packages/django/utils/module_loading.py:15, in cached_import(module_path,
class_name)
8 def cached_import(module_path, class_name):
9 # Check whether module is loaded and fully initialized.
10 if not (
11 (module := sys.modules.get(module_path))
12 and (spec := getattr(module, "__spec__", None))
13 and getattr(spec, "_initializing", False) is False
14 ):
---> 15 module = import_module(module_path)
16 return getattr(module, class_name)
File /usr/lib/python3.11/importlib/__init__.py:126, in import_module(name,
package)
124 break
125 level += 1
--> 126 return _bootstrap._gcd_import(name[level:], package, level)
File <frozen importlib._bootstrap>:1204, in _gcd_import(name, package,
level)
File <frozen importlib._bootstrap>:1176, in _find_and_load(name, import_)
File <frozen importlib._bootstrap>:1126, in _find_and_load_unlocked(name,
import_)
File <frozen importlib._bootstrap>:241, in _call_with_frames_removed(f,
*args, **kwds)
File <frozen importlib._bootstrap>:1204, in _gcd_import(name, package,
level)
File <frozen importlib._bootstrap>:1176, in _find_and_load(name, import_)
File <frozen importlib._bootstrap>:1140, in _find_and_load_unlocked(name,
import_)
ModuleNotFoundError: No module named 'smtp'
}}}
Thank you for any help!
--
--
Ticket URL: <https://code.djangoproject.com/ticket/34783#comment:1>
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/0107018a074619df-8caea887-9a2c-4f93-9a3e-4471caa3d7a2-000000%40eu-central-1.amazonses.com.