OSError [Errno 101] Сеть недоступна при попытке отправить электронную почту в Django с помощью smtplib на сервере GoDaady
У меня странная проблема. У меня есть приложение Payment на Django, развернутое на GoDaddy. В приложении мне нужно отправлять электронное письмо пользователю, когда его платеж проходит успешно. Я использую библиотеки smtplib
и email
. Я выполнил следующие шаги:
- Создал пароль приложения в аккаунте Google
- Использовал свою электронную почту, пароль приложения,
587
порт иsmtp.gmail.com
сервер
Проблема в том, что он полностью работает на моем локальном хосте, и я получаю электронную почту. Но он не работает на GoDaddy, и я получаю следующую ошибку:
[Errno 101] Network is unreachable
Traceback (most recent call last):
File "/home/g549hesohwxf/public_html/pl_payment_gateway/app/utils.py", line 52, in send_email
with smtplib.SMTP(smtp_server, smtp_port) as server:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/alt/python311/lib64/python3.11/smtplib.py", line 255, in __init__
(code, msg) = self.connect(host, port)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/alt/python311/lib64/python3.11/smtplib.py", line 341, in connect
self.sock = self._get_socket(host, port, self.timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/alt/python311/lib64/python3.11/smtplib.py", line 312, in _get_socket
return socket.create_connection((host, port), timeout,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/alt/python311/lib64/python3.11/socket.py", line 851, in create_connection
raise exceptions[0]
File "/opt/alt/python311/lib64/python3.11/socket.py", line 836, in create_connection
sock.connect(sa)
OSError: [Errno 101] Network is unreachable
Я поискал в Интернете и узнал, что многие хосты блокируют эти порты по умолчанию, чтобы избежать рассылки спама. Я попытался поговорить со службой поддержки GoDaddy. Они сказали следующее:
- GoDaddy не блокирует этот порт .
- Используйте подробную информацию о SMTP-сервере Microsoft Office 365.
Я использовал их собственные данные, а именно smtp.office365.com
, 587
порт и электронную почту, которую я создал на своем домене в GoDaddy. Но я все еще вижу ту же ошибку. Я сообщил об этой проблеме в GoDaddy, и они сказали, что не могут помочь, проблема в моем приложении. Я не могу разобраться в проблеме, так как она прекрасно работает на моем локальном хосте. Еще более странно то, что данные SMTP принадлежат той же учетной записи, которую я использую в предоставленной GoDaddy учетной записи электронной почты, и эта учетная запись работает нормально, и я могу отправлять письма через нее, просто мое приложение Django не может отправлять письма, используя те же данные учетной записи.
Ниже приведен мой код отправки электронной почты:
import logging
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
logger = logging.getLogger()
def send_email(response_status_code, response_dict, order_details):
logger.info("SETTING UP SMTP SERVER...")
smtp_server = 'smtp.office365.com'
smtp_port = 587
smtp_username = 'no-reply@parkinglink.com.au'
smtp_password = [hidden-password]
sender_email = 'no-reply@parkinglink.com.au'
receiver_email = order_details['email']
logger.info("SETTING EMAIL DETAILS...")
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = receiver_email
msg['Subject'] = 'New Booking Creation Status | ParkingLink'
booking_status = "NOT created"
if int(response_status_code) == 200 and str(response_dict["success"]).lower() == "true":
booking_status = "created successfully"
logger.info("WRITING EMAIL BODY...")
email_body = f"""
Dear User,
Your booking was {booking_status}.
Regards,
ParkingLink
"""
logger.info("EMAIL BODY: %s", email_body) # CODE WORKS FINE UP TO THIS STEP
msg.attach(MIMEText(email_body, 'plain'))
try:
logger.info("CONNECTING TO SMTP SERVER...")
with smtplib.SMTP(smtp_server, smtp_port) as server:
logger.info("STARTING TLS...")
server.starttls() # Secure the connection
logger.info("LOGGING INTO EMAIL CLIENT...")
server.login(smtp_username, smtp_password)
logger.info("CREATING NEW EMAIL...")
text = msg.as_string()
logger.info("SENDING EMAIL...")
server.sendmail(sender_email, receiver_email, text)
logger.info("EMAIL SENT SUCCESSFULLY!")
except Exception as e:
logger.info("Failed to send email: %s", e, exc_info=True)
Кто-то также посоветовал мне просто написать следующие детали в settings.py:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 25
и просто используйте класс EmailMessage
для отправки письма. Это устраняет ошибку, но письмо все равно не отправляется.
Может ли кто-нибудь помочь мне, что я делаю не так?