将 Taiga6 与 Docker 和不需要身份验证的 SMTP 服务器一起使用
Using Taiga6 with Docker and an SMTP Server that does not require authentication
我最近使用了为 Taiga6 提供的 docker 图像 运行 在 Ubuntu 20.04 上使用 docker-compose 的实例。
似乎一切正常,除了我似乎无法正常使用电子邮件。我使用 Gmail 作为我公司的电子邮件,foamfactory.io,但 gmail smtp 中继似乎...充其量是挑剔的。
我决定尝试使用 https://github.com/bokysan/docker-postfix 将简单的 SMTP 中继设置为 docker-compose.yml 文件的一部分。我可以让电子邮件服务器正常启动,当我连接到 taiga-back 容器、安装 cURL 和 运行 以下命令时,它会按预期发送电子邮件:
curl --url 'smtp://taiga-email:25' --mail-from 'taiga-noreply@foamfactory.io' --mail-rcpt 'jaywir3@gmail.com' --upload-file mail.txt --insecure
但是,当我尝试从 Taiga 发送电子邮件(例如,邀请用户)时,出现以下异常:
taiga-back_1 | ERROR:2021-02-10 17:42:49,044: Internal Server Error: /api/v1/memberships/4/resend_invitation
taiga-back_1 | Traceback (most recent call last):
taiga-back_1 | File "/opt/venv/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
taiga-back_1 | response = get_response(request)
taiga-back_1 | File "/opt/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
taiga-back_1 | response = self.process_exception_by_middleware(e, request)
taiga-back_1 | File "/opt/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
taiga-back_1 | response = wrapped_callback(request, *callback_args, **callback_kwargs)
taiga-back_1 | File "/taiga-back/taiga/base/api/viewsets.py", line 104, in view
taiga-back_1 | return self.dispatch(request, *args, **kwargs)
taiga-back_1 | File "/opt/venv/lib/python3.7/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
taiga-back_1 | return view_func(*args, **kwargs)
taiga-back_1 | File "/taiga-back/taiga/base/api/views.py", line 458, in dispatch
taiga-back_1 | response = self.handle_exception(exc)
taiga-back_1 | File "/taiga-back/taiga/base/api/views.py", line 456, in dispatch
taiga-back_1 | response = handler(request, *args, **kwargs)
taiga-back_1 | File "/taiga-back/taiga/projects/api.py", line 1078, in resend_invitation
taiga-back_1 | services.send_invitation(invitation=invitation)
taiga-back_1 | File "/taiga-back/taiga/projects/services/invitations.py", line 32, in send_invitation
taiga-back_1 | email.send()
taiga-back_1 | File "/opt/venv/lib/python3.7/site-packages/django/core/mail/message.py", line 306, in send
taiga-back_1 | return self.get_connection(fail_silently).send_messages([self])
taiga-back_1 | File "/opt/venv/lib/python3.7/site-packages/django/core/mail/backends/smtp.py", line 103, in send_messages
taiga-back_1 | new_conn_created = self.open()
taiga-back_1 | File "/opt/venv/lib/python3.7/site-packages/django/core/mail/backends/smtp.py", line 70, in open
taiga-back_1 | self.connection.login(self.username, self.password)
taiga-back_1 | File "/usr/local/lib/python3.7/smtplib.py", line 697, in login
taiga-back_1 | "SMTP AUTH extension not supported by server.")
taiga-back_1 | smtplib.SMTPNotSupportedError: SMTP AUTH extension not supported by server.
docker-compose.yml
内部的配置如下所示:
EMAIL_BACKEND: "django.core.mail.backends.smtp.EmailBackend"
DEFAULT_FROM_EMAIL: "taiga-noreply@foamfactory.io"
...
services:
taiga-email:
build: ../docker-postfix
environment:
ALLOWED_SENDER_DOMAINS: "foamfactory.io"
RELAYHOST_TLS_LEVEL: "may"
ports:
- "1587:${EMAIL_PORT}"
networks:
- taiga
我之前在提供自己的电子邮件服务的主机上设置了 Taiga v5。我们称此服务器为电子邮件。foamfactory.io。我对其进行了扩充,以便它可以接受来自新主机服务器的连接(我在其上 运行 设置了 taiga6 的 docker 图像)并接收电子邮件。它不使用 TLS,也不需要身份验证(唯一可以通过它转发电子邮件的服务器是 taiga6 docker 容器所在的服务器 运行ning)。
即使使用此解决方案,我仍然收到错误 smtplib.SMTPNotSupportedError:不支持 SMTP AUTH 扩展。我有点无计可施,因为我想使用Taiga6,但是转换到这个新版本需要我发送一封电子邮件邀请,以便我可以验证我想使用的用户帐户。
我想我想知道的是如何在 Django 中禁用 SMTP 身份验证...我希望能够通过非 TLS 连接使用未经身份验证的 SMTP,从特定服务器到另一个特定 SMTP 服务器。
事实证明,问题是基于 IP 的身份验证对于有问题的 SMTP 服务器失败(Django 确实告诉了我这个,但我当时无法正确解释它 - 我以为是是 Django 问题,而不是 postfix/smtp 主机问题)。
解决方案是在我的 SMTP 服务器中添加以下行:
default_transport = smtp
relay_transport = relay
到 /etc/postfix/main.cf
,并验证发送邮件的服务器的 IP 地址是否已添加到 mynetworks
。
(我从 https://serverfault.com/questions/559088/postfix-not-accepting-relay-from-localhost 那里得到了这个想法,在应得的地方给予信用)
我仍然不太清楚为什么当我在管理控制台中设置 SMTP 中继时它不能与 Gmail 一起工作,但是,就我的目的而言,这个解决方案有效。
我最近使用了为 Taiga6 提供的 docker 图像 运行 在 Ubuntu 20.04 上使用 docker-compose 的实例。
似乎一切正常,除了我似乎无法正常使用电子邮件。我使用 Gmail 作为我公司的电子邮件,foamfactory.io,但 gmail smtp 中继似乎...充其量是挑剔的。
我决定尝试使用 https://github.com/bokysan/docker-postfix 将简单的 SMTP 中继设置为 docker-compose.yml 文件的一部分。我可以让电子邮件服务器正常启动,当我连接到 taiga-back 容器、安装 cURL 和 运行 以下命令时,它会按预期发送电子邮件:
curl --url 'smtp://taiga-email:25' --mail-from 'taiga-noreply@foamfactory.io' --mail-rcpt 'jaywir3@gmail.com' --upload-file mail.txt --insecure
但是,当我尝试从 Taiga 发送电子邮件(例如,邀请用户)时,出现以下异常:
taiga-back_1 | ERROR:2021-02-10 17:42:49,044: Internal Server Error: /api/v1/memberships/4/resend_invitation
taiga-back_1 | Traceback (most recent call last):
taiga-back_1 | File "/opt/venv/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
taiga-back_1 | response = get_response(request)
taiga-back_1 | File "/opt/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
taiga-back_1 | response = self.process_exception_by_middleware(e, request)
taiga-back_1 | File "/opt/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
taiga-back_1 | response = wrapped_callback(request, *callback_args, **callback_kwargs)
taiga-back_1 | File "/taiga-back/taiga/base/api/viewsets.py", line 104, in view
taiga-back_1 | return self.dispatch(request, *args, **kwargs)
taiga-back_1 | File "/opt/venv/lib/python3.7/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
taiga-back_1 | return view_func(*args, **kwargs)
taiga-back_1 | File "/taiga-back/taiga/base/api/views.py", line 458, in dispatch
taiga-back_1 | response = self.handle_exception(exc)
taiga-back_1 | File "/taiga-back/taiga/base/api/views.py", line 456, in dispatch
taiga-back_1 | response = handler(request, *args, **kwargs)
taiga-back_1 | File "/taiga-back/taiga/projects/api.py", line 1078, in resend_invitation
taiga-back_1 | services.send_invitation(invitation=invitation)
taiga-back_1 | File "/taiga-back/taiga/projects/services/invitations.py", line 32, in send_invitation
taiga-back_1 | email.send()
taiga-back_1 | File "/opt/venv/lib/python3.7/site-packages/django/core/mail/message.py", line 306, in send
taiga-back_1 | return self.get_connection(fail_silently).send_messages([self])
taiga-back_1 | File "/opt/venv/lib/python3.7/site-packages/django/core/mail/backends/smtp.py", line 103, in send_messages
taiga-back_1 | new_conn_created = self.open()
taiga-back_1 | File "/opt/venv/lib/python3.7/site-packages/django/core/mail/backends/smtp.py", line 70, in open
taiga-back_1 | self.connection.login(self.username, self.password)
taiga-back_1 | File "/usr/local/lib/python3.7/smtplib.py", line 697, in login
taiga-back_1 | "SMTP AUTH extension not supported by server.")
taiga-back_1 | smtplib.SMTPNotSupportedError: SMTP AUTH extension not supported by server.
docker-compose.yml
内部的配置如下所示:
EMAIL_BACKEND: "django.core.mail.backends.smtp.EmailBackend"
DEFAULT_FROM_EMAIL: "taiga-noreply@foamfactory.io"
...
services:
taiga-email:
build: ../docker-postfix
environment:
ALLOWED_SENDER_DOMAINS: "foamfactory.io"
RELAYHOST_TLS_LEVEL: "may"
ports:
- "1587:${EMAIL_PORT}"
networks:
- taiga
我之前在提供自己的电子邮件服务的主机上设置了 Taiga v5。我们称此服务器为电子邮件。foamfactory.io。我对其进行了扩充,以便它可以接受来自新主机服务器的连接(我在其上 运行 设置了 taiga6 的 docker 图像)并接收电子邮件。它不使用 TLS,也不需要身份验证(唯一可以通过它转发电子邮件的服务器是 taiga6 docker 容器所在的服务器 运行ning)。
即使使用此解决方案,我仍然收到错误 smtplib.SMTPNotSupportedError:不支持 SMTP AUTH 扩展。我有点无计可施,因为我想使用Taiga6,但是转换到这个新版本需要我发送一封电子邮件邀请,以便我可以验证我想使用的用户帐户。
我想我想知道的是如何在 Django 中禁用 SMTP 身份验证...我希望能够通过非 TLS 连接使用未经身份验证的 SMTP,从特定服务器到另一个特定 SMTP 服务器。
事实证明,问题是基于 IP 的身份验证对于有问题的 SMTP 服务器失败(Django 确实告诉了我这个,但我当时无法正确解释它 - 我以为是是 Django 问题,而不是 postfix/smtp 主机问题)。
解决方案是在我的 SMTP 服务器中添加以下行:
default_transport = smtp
relay_transport = relay
到 /etc/postfix/main.cf
,并验证发送邮件的服务器的 IP 地址是否已添加到 mynetworks
。
(我从 https://serverfault.com/questions/559088/postfix-not-accepting-relay-from-localhost 那里得到了这个想法,在应得的地方给予信用)
我仍然不太清楚为什么当我在管理控制台中设置 SMTP 中继时它不能与 Gmail 一起工作,但是,就我的目的而言,这个解决方案有效。