问题描述
我应该做一个演示,我需要在提供给我的服务器机器上使用 docker 进行部署,该机器已经设置了 sendmail
。
所以如果我ssh
然后跑
echo "Subject: sendmail test" | sendmail -v <my_email>@gmail.com
我实际上收到了一封电子邮件,它有效。
如果我进入容器并从它的 shell 运行它,上面的命令也有效。因此,容器可以与主机的 sendmail
正常通信。
现在我的问题是我不确定我应该如何制作在容器中运行的 django 应用程序,使用主机的 sendmail
来发送一些电子邮件。 >
我已阅读与我的问题类似的 this 问题。我尝试了第一个建议,即使用 localhost
作为 EMAIL_HOST
,但我没有收到任何电子邮件。
我尝试设置 EMAIL_HOST_USER=localhost
,没有密码,但我收到错误 smtplib.SMTPException: STARTTLS extension not supported by server.
,从我读到的内容来看,这意味着 I do not need to login
我想避免添加答案中提到的 suggested package,因为在生产部署中他们可能不会使用 sendmail
并且在技术说明上,如果我将该软件包安装为后端映像将在容器内存在的路径中查找 sendmail 二进制文件。所以它不会使用主机的 sendmail
我的 django 应用目前正在使用以下电子邮件相关设置:
EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend
EMAIL_HOST=localhost
EMAIL_USE_TLS=False
EMAIL_USE_SSL=False
EMAIL_PORT=587
DEFAULT_FROM_EMAIL=webmaster@localhost
EMAIL_HOST_USER=
EMAIL_HOST_PASSWORD=
我使用端口 587
因为当我运行时
$ sudo netstat -nlp | grep :587
我明白了:
tcp 0 0 127.0.0.1:587 0.0.0.0:* LISTEN 3261/sendmail: MTA:
所以我知道 sendmail
在该端口上运行。
这是我的 docker-compose.yml
文件。为了让我的生活更轻松,而且由于这是一个演示,我将所有服务的 network_mode
设置为 host
:
version: '3.8'
services:
frontend:
container_name: frontend
image: frontend-dev-demo:latest
network_mode: host
stdin_open: true
depends_on:
- backend
backend:
container_name: backend
image: backend-dev-demo:latest
network_mode: host
env_file:
- ./.env.demo
volumes:
- ~/Docker/volumes/backend/media:/backend/media/
- ~/Docker/volumes/backend/static:/backend/static/
command: >
sh -c "pipenv run python manage.py collectstatic --noinput &&
pipenv run python manage.py migrate &&
pipenv run python manage.py loaddata initial_data.json &&
pipenv run python manage.py runserver 0.0.0.0:8000"
stdin_open: true
depends_on:
- db
db:
container_name: db
image: postgres:12.6-alpine
network_mode: host
volumes:
- ~/Docker/volumes/backend/database:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=database
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)