Введение
Я размещаю приложение Django с Nginx и Gunicorn в дроплете Digital Ocean (Ubuntu 20.04) с доменным именем. и почту, купленную в NameCheap.
В своих фрагментах кода я буду использовать следующие примеры значений:
domain = example.com
email = info@example.com
droplet ip address = digital_ocean_droplet_ip
Я настроил все, как описано в разделе «Настройка Django с помощью Postgres, Nginx и Gunicorn и защита Nginx с помощью Let's Encrypt».
Все работает как надо. однако, когда мое приложение пытается отправить почту, я получаю следующую ошибку:
gunicorn[97049]: self.connection = self.connection_class(self.host, self.port, **connection_params)
gunicorn[97049]: File "/usr/lib/python3.8/smtplib.py", line 1043, in __init__
gunicorn[97049]: SMTP.__init__(self, host, port, local_hostname, timeout,
gunicorn[97049]: File "/usr/lib/python3.8/smtplib.py", line 255, in __init__
gunicorn[97049]: (code, msg) = self.connect(host, port)
gunicorn[97049]: File "/usr/lib/python3.8/smtplib.py", line 339, in connect
gunicorn[97049]: self.sock = self._get_socket(host, port, self.timeout)
gunicorn[97049]: new_socket = socket.create_connection((host, port), timeout,
gunicorn[97049]: File "/usr/lib/python3.8/smtplib.py", line 1049, in _get_socket
gunicorn[97049]: File "/usr/lib/python3.8/socket.py", line 787, in create_connection
gunicorn[97049]: for res in getaddrinfo(host, port, 0, SOCK_STREAM):
gunicorn[97049]: File "/usr/lib/python3.8/socket.py", line 918, in getaddrinfo
gunicorn[97049]: for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
gunicorn[97049]: socket.gaierror: [Errno -3] Temporary failure in name resolution
socket.gaierror: [Errno -3] Временная ошибка разрешения имен
Django settings.py
ALLOWED_HOSTS = os.environ.get('example.com,www.example.com,digital-ocean-droplet-ip')
EMAIL_BACKEND="django.core.mail.backends.smtp.EmailBackend"
EMAIL_USE_SSL=False
EMAIL_USE_TLS=True
EMAIL_PORT=587
EMAIL_HOST="mail.privateemail.com"
EMAIL_HOST_USER="info@example.com"
EMAIL_HOST_PASSWORD="***"
DEFAULT_FROM_EMAIL="info@example.com"
Djangoviews.py
from django.core.mail import send_mail
# Send confirmation email
send_mail(
# Subject
'Subject',
# Message
'Message',
# Sender
'info@example.com',
# Receiver
[receiver@email.com],
fail_silently=False
)
Записи DNS цифрового океана Документация
Type Hostname Value TTL (seconds)
SRV _autodiscover._tcp.example.com privateemail.com.example.com 43200
CNAME autoconfig.example.com privateemail.com. 43200
CNAME autodiscover.example.com privateemail.com. 43200
CNAME mail.example.com privateemail.com. 43200
TXT example.com v=spf1 include:spf.privateemail.com ~all 3600
MX example.com mx2.privateemail.com. (priority 10) 14400
MX example.com mx1.privateemail.com. (priority 10) 14400
A example.com digital_ocean_droplet_ip 3600
A www.example.com digital_ocean_droplet_ip 3600
NS example.com ns1.digitalocean.com. 1800
NS example.com ns2.digitalocean.com. 1800
NS example.com ns3.digitalocean.com. 1800
Пользовательский DNS NameCheap Документация
ns1.digitalocean.com
ns2.digitalocean.com
ns3.digitalocean.com
Когда я пингую почтовый сервер из дроплета (mail.privateemail.com), я получаю такой результат.
telnet mail.privateemail.com 587
Trying 198.54.122.60...
Connected to mail.privateemail.com.
Escape character is '^]'.
220 PrivateEmail.com prod Mail Node
ehlo privateemail.com
250-mta-14.privateemail.com
250-PIPELINING
250-SIZE 81788928
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-CHUNKING
250 STARTTLS
quit
221 2.0.0 Bye
Connection closed by foreign host.
Вопрос
Есть ли у кого-нибудь идеи, как это исправить, потому что остальная часть приложения работает нормально? У меня такое ощущение, что эта проблема вызвана DNS, но я понятия не имею, как ее исправить, и мне кажется, что я перепробовал почти все.
Надеюсь, кто-нибудь сможет мне помочь, потому что я Я немного растерян и не знаю, как продолжить.. Заранее спасибо!
Я пробовал следующие настройки, но безуспешно:
EMAIL_USE_SSL True, False (with the according ports)
EMAIL_USE_TLS True, False (with the according ports)
EMAIL_PORT 465 port for SSL, 25/587 port for TLS
EMAIL_HOST mail.privateemail.com
mx1.privateemail.com
mx2.privateemail.com
mail.example.com
example.com
digital_ocean_droplet_ip
Подробнее здесь: https://stackoverflow.com/questions/684 ... -name-reso
Функция send_email() Django/Python приводит к ошибке «Временный сбой в разрешении имени». ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение