无法在docker容器中使用stmp-Python发送电子邮件,如何修复



无法在远程服务器上的docker容器中发送电子邮件,我可以在我的电脑上用相同的代码发送电子邮件,它可以工作,但在远程服务器中不工作,即使只是创建一个脚本,它也会被卡住,没有错误

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders

def send_yandex_email(credentials: dict, file_path: str, file_name: str):
try:
mail_content = credentials["email_content"]
sender_address = credentials["sender_address"]
sender_pass = credentials["sender_pass"]
receiver_address = credentials["receiver_address"]
#Setup the MIME
message = MIMEMultipart()
message['From'] = sender_address
message['To'] = receiver_address
message['Subject'] = credentials["email_subject"]
#The subject line
message.attach(MIMEText(mail_content, 'html'))
with open(file_path, "rb") as attachment:
payload = MIMEBase("application", "octet-stream")
payload.set_payload(attachment.read())
encoders.encode_base64(payload) #encode the attachment
payload.add_header('Content-Disposition', 'attachment', filename=file_name)
message.attach(payload)
session = smtplib.SMTP_SSL('smtp.yandex.com', 465)
session.login(sender_address, sender_pass) #login with mail_id and password
text = message.as_string()
session.sendmail(sender_address, credentials['receiver_address'].split(','), text)
session.quit()
except Exception as e:
return e
send_yandex_email(_INVOICE_CREDENTIALS,'./zczx.jpg', 'zczx');

Docker文件

FROM python:3.9.5
COPY ./gmcrm /app/src
COPY ./ssl /app/ssl
COPY ./poetry.lock /app
COPY ./pyproject.toml /app
WORKDIR /app
RUN pip3 install poetry
RUN poetry config virtualenvs.create false
RUN poetry install --no-dev --no-interaction --no-ansi
RUN pip3 install gunicorn uvloop httptools
EXPOSE 8080
WORKDIR /app/src
ENV ACCESS_LOG=${ACCESS_LOG:-/proc/1/fd/1}
ENV ERROR_LOG=${ERROR_LOG:-/proc/1/fd/2}
ENTRYPOINT /usr/local/bin/gunicorn 
-b 0.0.0.0:8080 
-w 4 
-k uvicorn.workers.UvicornWorker main:app 
--keyfile=/app/ssl/example.kz.key 
--certfile=/app/ssl/example.crt 
--chdir /app/src 
--access-logfile "$ACCESS_LOG" 
--error-logfile "$ERROR_LOG"

DockerCompose

services:
gmcrm:
build:
context: .
dockerfile: Dockerfile
restart: always
volumes:
- ./gmcrm:/app/src
environment:
- PORT=8080
ports:
- 8080:8080
networks:
- gmcrm_network
nginx:
build:
context: .
dockerfile: Dockerfile-Nginx
depends_on:
- gmcrm
networks:
- gmcrm_network
restart: always
ports:
- 80:80
- 443:443
networks:
gmcrm_network:
driver: bridge

Linode默认情况下会阻止传出邮件。请参阅此处的文档

如果遇到SMTP问题,请始终参阅基于云的服务器提供商的文档。

最新更新