Je sais qu'il y a 20 questions similaires aux miennes, mais cela fait maintenant plus d'une journée que je tente d'obtenir un courrier électronique pour travailler avec Django.
Je reçois cette erreur: [Errno 111] Connection refused
lorsque j'essaie d'envoyer un courrier électronique
C’est là que je crée le courrier électronique et que je tente de l’envoyer à mon avis:
try:
msg = EmailMessage(subject, message, from_email, [receiver])
msg.content_subtype = "html"
msg.send()
Mon fichier de paramètres est le suivant:
EMAIL_Host = "localhost"
DEFAULT_FROM_EMAIL = "[email protected]"
EMAIL_PORT = 25
EMAIL_BACKEND = "Django.core.mail.backends.smtp.EmailBackend"
J'ai essayé d'envoyer des tests en utilisant python -m smtpd -n -c DebuggingServer localhost:1025
et j'ai eu du succès, mais quand il s'agit de le faire pour de vrai, pas de succès.
Lorsque j'essaie de faire un send_mail depuis le shell, j'obtiens cette trace:
>>> from Django.core.mail import send_mail
>>> send_mail('Test', 'Test', '[email protected]', ['[email protected]'])
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.6/dist-packages/Django/core/mail/__init__.py", line 61, in send_mail
connection=connection).send()
File "/usr/local/lib/python2.6/dist-packages/Django/core/mail/message.py", line 251, in send
return self.get_connection(fail_silently).send_messages([self])
File "/usr/local/lib/python2.6/dist-packages/Django/core/mail/backends/smtp.py", line 79, in send_messages
new_conn_created = self.open()
File "/usr/local/lib/python2.6/dist-packages/Django/core/mail/backends/smtp.py", line 42, in open
local_hostname=DNS_NAME.get_fqdn())
File "/usr/lib/python2.6/smtplib.py", line 239, in __init__
(code, msg) = self.connect(Host, port)
File "/usr/lib/python2.6/smtplib.py", line 295, in connect
self.sock = self._get_socket(Host, port, self.timeout)
File "/usr/lib/python2.6/smtplib.py", line 273, in _get_socket
return socket.create_connection((port, Host), timeout)
File "/usr/lib/python2.6/socket.py", line 561, in create_connection
raise error, msg
error: [Errno 111] Connection refused
Je semble juste ne pas être aller nulle part avec cela. Toute aide ou conseil serait très apprécié. Merci
De plus, s'il y a autre chose que vous aimeriez voir, commentez-le.
Essayez-vous d'utiliser un compte Gmail? Peut-être essayez-vous alors:
EMAIL_Host = 'smtp.gmail.com'
EMAIL_Host_USER = '[email protected]'
EMAIL_Host_PASSWORD = 'your-password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
Puis essayez test (Django <1.4) en
python manage.py Shell
>>> from Django.core.mail import send_mail
>>> send_mail('test email', 'hello world', to=['[email protected]'])
Et si vous utilisez Django 1.4, utilisez ceci:
python manage.py Shell
>>> from Django.core.mail import send_mail
>>> send_mail('test email', 'hello world', '[email protected]', ['[email protected]'])
Si vous n'utilisez pas de compte Gmail et que vous rencontrez toujours des problèmes, essayez simplement d'ajouter les EMAIL_Host_USER
et EMAIL_Host_PASSWORD
à ce que vous avez .. .. Si vous avez toujours des problèmes, votre réseau vous bloque peut-être. Pare-feu sur votre système d'exploitation ou votre routeur.
Merci à knite pour la syntaxe mise à jour. Envoyez-lui un +1 et merci à pranavk de m'avoir informé du changement de syntaxe dans Django 1.4
2-Step Verification
, cliquez sur Settings
(s'il n'existe aucun lien de paramètres, vous pouvez en créer un nouveau. Vous pouvez ignorer les étapes 3 et 4).App-specific passwords
.Manage your application specific passwords
.Application-specific passwords
, entrez un nom descriptif pour l'application que vous souhaitez autoriser, tel que "Django gmail", puis cliquez sur le bouton Generate application-specific password
.smbumqjiurmqrywn
EMAIL_Host = 'smtp.gmail.com'
EMAIL_Host_USER = '[email protected]'
EMAIL_Host_PASSWORD = 'Application spectific password(for eg: smbumqjiurmqrywn)'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
python manage.py Shell
>>> from Django.core.mail import send_mail
>>> send_mail('Test', 'This is a test', '[email protected]', ['[email protected]'],
fail_silently=False)
@mongoose_za a une excellente réponse, mais la syntaxe est un peu différente dans Django 1.4+.
Au lieu de:
send_mail('test email', 'hello world', to=['[email protected]'])
utilisation
send_mail('test email', 'hello world', '[email protected]', ['[email protected]'])
Les quatre premiers arguments sont obligatoires: subject, message, from_email et recipient_list.
Je voudrais éviter d'utiliser GMail. Cela fonctionnera pour quelques courriels, mais après cela, vous constaterez peut-être que tous vos courriels sont rejetés ou stockés dans une boîte de spam. J'ai utilisé le service "SES" d'Amazon avec Django-SES pour résoudre ce problème.
Dans settings.py, utilisez smtp en tant que backend et pas de console
EMAIL_BACKEND = 'Django.core.mail.backends.smtp.EmailBackend'
placez les paramètres minimaux suivants dans le fichier settings.py ou local_settings.py sur votre serveur.
EMAIL_Host = 'localhost'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
au lieu d'utiliser smtp.gmail.com qui impose beaucoup de limitations, vous pouvez avoir votre propre serveur de messagerie.
vous pouvez le faire en installant votre propre serveur de messagerie:
Sudo apt-get install sendmail