首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以使用aiosmtpd SMTP服务器接收但不能发送电子邮件。

可以使用aiosmtpd SMTP服务器接收但不能发送电子邮件。
EN

Stack Overflow用户
提问于 2022-07-29 01:15:21
回答 1查看 146关注 0票数 0

我已经使用aiosmtpd安装了本地SMTP服务器,在设置适当的DNS记录后,我在这里接收电子邮件:

代码语言:javascript
复制
mail.mydomain.com   A   1 minute    1.2.3.4
mydomain.com    MX  1 minute    10 mail.mydomain.com.

仅在命令行中运行aiosmtpd就足以接收电子邮件:

python.exe -m smtpd -c DebuggingServer -n 0.0.0.0:25

现在的问题是发送电子邮件,不管出于什么原因,这些邮件似乎不起作用。我以这种方式创造了SPF的记录:

代码语言:javascript
复制
mydomain.com    TXT 1 minute    "v=spf1 a mx include: mydomain.com ~all"

我也试过这样做:

代码语言:javascript
复制
mydomain.com    TXT 1 minute    "v=spf1 ip4:1.2.3.4 ~all"

在SMTP服务器运行时,我使用此代码发送电子邮件:

代码语言:javascript
复制
import smtplib

sender = 'from@mydomain.com'
receivers = ['to@mydomain.com']

message = """From: From Person <from@mydomain.com>
To: To Person <to@mydomain.com>
Subject: SMTP e-mail test

This is a test e-mail message.
"""

try:
   smtpObj = smtplib.SMTP('127.0.0.1')
   smtpObj.sendmail(sender, receivers, message)
   print ("Successfully sent email")
except smtplib.SMTPException:
   print ("Error: unable to send email")

我试图添加我的@gmail.com电子邮件地址作为目的地,但我没有得到任何东西。

我可以看到电子邮件被发送到SMTP服务器,但我没有收到电子邮件:

代码语言:javascript
复制
---------- MESSAGE FOLLOWS ----------
b'From: From Person <from@mydomain.com>'
b'To: To Person <to@mydomain.com>'
b'Subject: SMTP e-mail test'
b'X-Peer: 127.0.0.1'
b''
b'This is a test e-mail message.'
------------ END MESSAGE ------------

知道我做错什么了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-29 14:55:34

通常,电子邮件从连接到邮件传输代理(MTA)的电子邮件客户端在互联网上发送,后者将电子邮件转发给邮件传递代理(MDAs),后者存储电子邮件供收件人阅读。也就是说,GMail既可以为用户提供MTA,也可以将GMail用户的电子邮件转发到远程邮件服务器,也可以作为接收预定发送到用户邮箱的邮件的MDA。电子邮件使用SMTP协议在服务器之间传输,aiosmtpd是SMTP协议服务器端的实现,而内置smtplib模块是客户端的实现。

当您在其默认配置中运行aiosmtpd时,它只是一个愚蠢的SMTP服务器,接收电子邮件并将其吐出终端,而不中继或存储它们。也就是说,aiosmtpd本身并不是MTA或MDA,除非您编写实现电子邮件存储的代码(例如使用“邮箱”内置模块),或者编写实现邮件中继的代码。

当您使用SMTP客户端smtplib.SMTP()连接到127.0.0.1时,您只需连接到aiosmtpd,它不会对您给它的电子邮件做任何有趣的事情(除非您添加了一些有趣的代码)。

如果您想向远程电子邮件提供者发送电子邮件,例如GMail,那么您需要将电子邮件提交到固定的MTA,或者您需要自己使用DNS查找实现中继机制。

  • 如果您只需要一个简单的MTA将电子邮件转发到远程主机,那么您就不需要aiosmtpd或任何其他类型的
  • 编程-- postfix是一个很好的选择。进一步阅读:aiosmtpd is not an MTA

如果希望自己实现中继机制,则需要查找收件人地址(例如

  • )的MX记录,然后指示smtplib.SMTP连接到MX记录中指定的主机。但是,我不建议尝试这样做,因为有许多陷阱和案例需要考虑。例如,如果有多个MX记录或根本没有MX记录,该怎么办。此外,远程SMTP服务器可能没有响应,也可能使用4xx或5xx错误代码进行响应,在这种情况下,您需要采取适当的操作并在以后重试.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73160671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档