我正在尝试使用支持网络的 Arduino 来检测房子周围的一些东西。例如,我希望烘干机完成后给我发短信。因此,在 Linux 机器上拥有一个本地邮件服务器非常有用,Arduino 可以使用 SMTP 命令与之通信(未加密)。服务器将 Arduino 生成的消息转发到[电子邮件受保护],最终导致我收到短信。我永远不需要使用该服务器接收电子邮件,并且我不想让 Arduino 在我的本地网络之外进行通信。
是否可以在没有域名的情况下设置这样的邮件转发器?
答案1
Arduinos都可以向外部发送邮件没有(直接)互联网使用权。
为此,您需要:
- 在端口 25 中设置电子邮件中继,例如 postfix,在具有 Internet 访问权限的盒子中,授权您的内部网络或 arduino 网络(如果它们是单独的 LAN/VLAN)
- 在代码中使用 API 从 Arduino 发送邮件,这些邮件基于通过 TCP 与端口 25 进行通信,而不是通过 sendmail API。通过 IP 指定中继/代理机器作为 SMTP 中继。 (
smtplib
例如python
,如果给定 SMTP 地址) - 将 FROM 地址指定为外部存在域的地址,或者更罕见的是,根据您正在通话的服务器,使用现有电子邮件;否则,反垃圾邮件措施将删除电子邮件。 (这一点很重要,我从开发商那里得到的票往往就是因为这个)。电子邮件的域名不必是您自己的,但如果是您自己的域名,则会获得更少的垃圾邮件点。
如果将来您需要设置其他更强大的 Linux 机器(即树莓派或克隆),ssmtp
也是一个很好且非常轻量级的服务,能够使用更高效的 sendmail API 来转发电子邮件从无法直接访问互联网的盒子中(这就是我正在使用的)。
实际上,困难的部分不是处理arduinos在没有互联网连接的情况下发送电子邮件;而是处理它。这是由于 SMTP 服务器和/或您的家庭 ISP 可能采取的反垃圾邮件和安全措施。例如,在世界某些地区,ISP 通常会阻止家庭客户的 25/TCP 端口 (SMTP)。如果涉及到这一点,我建议提出另一个补充问题。
答案2
编写一个小“代理”脚本。
例如运行的东西,netcat
或者socat
使用侦听您的 arduinos 连接到的内部网络接口的端口。socat
然后将其提供给例如 shell 脚本,该脚本使用批处理邮件客户端通过 mms.att.net 为从 arduinos 收到的每个“电报”发送邮件。
如果您不需要退回任何东西,可能很简单:
nc -k -l 8888 | while read sender telegram ; do echo $sender sent: $telegram ; done
然后将调用替换echo
为类似的内容mail -s $sender $telegram <other_options>
。如果想要/需要的话,添加一些“错误处理”。
如果你必须在arduinos上使用SMTP命令来发送(而不是通过TCP连接的原始文本),那么你必须expect
在arduinos发送MAIL FROM: ....
RCPT TO: ....
等之后用eg来配置一些东西来回答正确的事情。