我最近使用了为Taiga6提供的docker镜像,在Ubuntu20.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。我们将此服务器命名为email.foamfactory.io。我对其进行了扩充,以便它可以接受来自新主机服务器的连接(我在该主机服务器上运行taiga6的docker镜像)并接收电子邮件。它不使用TLS,也不需要身份验证(唯一可以通过它转发电子邮件的服务器是运行taiga6 docker容器的服务器)。
即使使用这个解决方案,我仍然得到错误smtplib.SMTPNotSupportedError: SMTP AUTH extension not supported。我有点手足无措,因为我想使用Taiga6,但转换到这个新版本需要我发送电子邮件邀请,以便我可以验证我想要使用的用户帐户。
我想我想知道的是如何在Django中禁用SMTP身份验证...我希望能够在非TLS连接上使用未经身份验证的SMTP,从一个特定的服务器到另一个特定的SMTP服务器。
发布于 2021-02-13 01:21:05
事实证明,问题是基于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一起工作,但是,就我的目的而言,这个解决方案是有效的。
https://stackoverflow.com/questions/66161722
复制相似问题