Контактная форма мезонина вызывает ошибку «преждевременно закрытый» вверх по течению - PullRequest
0 голосов
/ 01 июня 2018

Мой сайт использует Mezzanine 4.2.3 с Django-Oscar 1.5.2 и Django 1.10.8, работающими на Ubuntu 16.04 на Digitalocean.Когда я использую контактную форму Mezzanine на демонстрационной странице, созданной с помощью createdb, и с моего собственного компьютера, она успешно отправляет электронные письма.Но когда я тестирую его на моей дроплете Digitalocean под управлением Ubuntu 16.04, я получаю неверный шлюз 502.

Журнал ошибок nginx записывает эту ошибку: *13 upstream prematurely closed connection while reading response header from upstream, client: [an IP I can't identify], server: [my website url], request: "POST /contact/ HTTP/1.1", upstream: "http://unix:/home/my-django-app/my-django-app.sock:/contact/", host: "[my website url]", referrer: "[my website url]/contact/".Число варьируется между *1, *7 и *13, но текст тот же.

Я гуглил это и нашел различные возможные решения:

  • Увеличение времени ожидания для nginx proxy_pass .Это включало добавление proxy_connect_timeout 75s; и proxy_read_timeout 300s; в конфигурацию nginx, а затем добавление --timeout 300 в gunicorn.Это привело к фактической ошибке времени ожидания: *21 upstream timed out (110: Connection timed out) while reading response header from upstream,

  • Раскомментирование precedence ::ffff:0:0/96 100 в /etc/gai.conf..

  • Разрешить порт 587 в UFW.Это не должно иметь значения, потому что если я использую gmail, то это должен быть порт на стороне Google, не так ли?Я делаю это только потому, что вижу различные решения (наиболее неразрешенные), говорящие о необходимости разблокировать этот порт.

  • Заставить nginx прослушивать порт 587: server {listen 80; listen 587; ... list 443 ssl; ...}.

При прослушивании nginx через порт 587 sudo netstat -tulnp | grep 587 показывает:

tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      12815/nginx -g daem

Мои настройки электронной почты выглядят нормально:

EMAIL_USE_TLS = True
EMAIL_HOST = "smtp.gmail.com"
EMAIL_HOST_USER = "!#%%&&*%^#$^*%@gmail.com"
EMAIL_HOST_PASSWORD = "^*#^@#$%&@$%%#$"
EMAIL_PORT = 587
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"

Я пробовал SSL с портом465 тоже.Он работал с моей локальной копией, но не на сервере.То же сообщение об ошибке 502.

Я думаю, что «upstream» означает gunicorn, поэтому я установил для него журнал ошибок, но все, что он записывал, были коды состояния 200 и 302 при загрузке страницы.Ничего не регистрировалось, когда произошло 502.

У меня нет идей.Чего мне не хватает?

Обновление 3 июня 2018 года:

$ telnet smtp.gmail.com 587
Trying 108.177.96.109...
Trying 108.177.96.108...
Trying 2a00:1450:4013:c01::6c...
telnet: Unable to connect to remote host: Network is unreachable

Пробовал это тоже с 465 и 25.Означает ли это, что Digitalocean блокирует соединение?Есть прецедент .

1 Ответ

0 голосов
/ 04 июня 2018

Да, Digitalocean блокирует SMTP.Их ответ на мой электронный адрес:

Чтобы помочь с ограничением услуг SMTP для вашей учетной записи, не могли бы вы сообщить нам следующее:

  1. Ваше имя.
  2. Какому бизнесу или частному лицу вы собираетесь отправлять почту от имени, а также на их веб-сайт (если таковой существует).
  3. Какого рода почту вы собираетесь отправлять (сброс пароля, рассылка новостей), маркетинговая почта, транзакционная почта, такая как подтверждение заказа).
  4. Если вы отправляете от имени компании или лица, не являющегося вами, каковы ваши отношения с этой компанией или частным лицом.

Кроме того, поскольку мы являемся американской компанией, я хотел бы убедиться, что вы понимаете, что мы требуем, чтобы все пользователи нашей сети следовали обоим требованиям CAN-SPAM (https://www.ftc.gov/tips-advice/business-center/guidance/can-spam-act-compliance-guide-business)действовать в отношении любой нетранзакционной почты, отправленной любому подписчику в любой точке мира, а также в отношении CASL (http://fightspam.gc.ca/eic/site/030.nsf/eng/home) для любой электронной почты, которую вы отправляете любым подписчикам в Канаде.

ДобавитьКроме того, существуют дополнительные ограничения на отправку электронной почты пользователям в Европе, созданным как самим ЕС, так и его странами-членами, и мы рекомендуем вам изучить и следовать всем соответствующим рекомендациям для стран любых ваших европейских подписчиков.

Я ответил на них, и они ответили:

Спасибо за предоставленную вами информацию.

Мы просмотрели информацию и удалили блок SMTP из вашегоаккаунт.

Просто для повторения - мы требуем, чтобы наши подписчики следовали закону CAN-SPAM для всей электронной почты, а CASL - для любой электронной почты, отправляемой абоненту в Канаде.

Если вы этого не сделаетеи мы получаем жалобы о нарушениях, мы можем отозвать доступ к SMTP по своему усмотрению без дальнейшего предупреждения.

...