#python #django #sendmail
Вопрос:
Я пытаюсь отправить себе настоящее электронное письмо со своего веб-сайта, используя send_mail. Я использовал localhost и следующую команду cmd,
python -m smtpd -n -c DebuggingServer localhost:1025
для того, чтобы проверить это. Он перехватывает без проблем, но я ничего не вижу в своем почтовом ящике.
Мой провайдер электронной почты работает с SSL, поэтому я переключил его на True и включил «доступ к почтовому ящику с помощью почтовых клиентов» в настройках моей почты.
Вот это settings.py файл:
EMAIL_HOST = '178.68.164.41' # My current ip address EMAIL_PORT = '465' # Port of the email host EMAIL_HOST_USER = 's...6@rambler.ru' # Here is my actual email EMAIL_HOST_PASSWORD = '.....' # Here is my actual password from my email login EMAIL_USE_TLS = False EMAIL_USE_SSL = True
Вот это views.py файл:
from django.shortcuts import render from django.core.mail import send_mail from .forms import ContactForm def contact(request): form = ContactForm if request.method == 'POST': message_name = request.POST.get('name') message_email = request.POST.get('email') message = request.POST.get('message') send_mail(message_name, message, message_email, ['s****6@rambler.ru']) return render(request, 'contact.html', {'form': form})
Вот исключение:
Internal Server Error: /contact/ Traceback (most recent call last): File "C:Users1AppDataLocalProgramsPythonPython38libsite-packagesdjangocorehandlersexception.py", line 47, in inner response = get_response(request) File "C:Users1AppDataLocalProgramsPythonPython38libsite-packagesdjangocorehandlersbase.py", line 181, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:Users1PycharmProjectsStasProjectsales_projectcontactviews.py", line 12, in contact send_mail(message_name, message, message_email, ['sta6006@rambler.ru']) File "C:Users1AppDataLocalProgramsPythonPython38libsite-packagesdjangocoremail__init__.py", line 61, in send_mail return mail.send() File "C:Users1AppDataLocalProgramsPythonPython38libsite-packagesdjangocoremailmessage.py", line 284, in send return self.get_connection(fail_silently).send_messages([self]) File "C:Users1AppDataLocalProgramsPythonPython38libsite-packagesdjangocoremailbackendssmtp.py", line 102, in send_messages new_conn_created = self.open() File "C:Users1AppDataLocalProgramsPythonPython38libsite-packagesdjangocoremailbackendssmtp.py", line 62, in open self.connection = self.connection_class(self.host, self.port, **connection_params) File "C:Users1AppDataLocalProgramsPythonPython38libsmtplib.py", line 1043, in __init__ SMTP.__init__(self, host, port, local_hostname, timeout, File "C:Users1AppDataLocalProgramsPythonPython38libsmtplib.py", line 255, in __init__ (code, msg) = self.connect(host, port) File "C:Users1AppDataLocalProgramsPythonPython38libsmtplib.py", line 339, in connect self.sock = self._get_socket(host, port, self.timeout) File "C:Users1AppDataLocalProgramsPythonPython38libsmtplib.py", line 1051, in _get_socket new_socket = self.context.wrap_socket(new_socket, File "C:Users1AppDataLocalProgramsPythonPython38libssl.py", line 500, in wrap_socket return self.sslsocket_class._create( File "C:Users1AppDataLocalProgramsPythonPython38libssl.py", line 1040, in _create self.do_handshake() File "C:Users1AppDataLocalProgramsPythonPython38libssl.py", line 1309, in do_handshake self._sslobj.do_handshake() Exception Type: ConnectionResetError at /contact/ Exception Value: [WinError 10054] Remote host forcibly terminated existing connection
Комментарии:
1. Порт 465 предназначен специально для протокола TLS, но для MAIL_USE_TLS установлено значение false. Вы должны использовать порт 587 с параметром MAIL_USE_TLS, равным True.
2. @TimRoberts я сделал это, и теперь там написано
SMTPConnectError at /contact/ (421, b'Cannot connect to SMTP server 178.68.174.185 (178.68.174.185:587), connect error 10061')
3. Хм, так что, возможно, ваш почтовый сервер отстает от стандартов. Итак, вернитесь к 465, но попробуйте оставить MAIL_USE_TLS в True.
4. @TimRoberts это либо «принудительно прекращено», либо «неожиданно закрыто» таким образом
5. Ваш комментарий в строке EMAIL_HOST гласит «Мой текущий ip-адрес». Это буквально правда? Потому что это должен быть хост или адрес вашего почтового сервера.