我想从 C++ 程序发送电子邮件。
我想使用 sendmail 来实现。其实我并不关心如何实现,我只是发现没有一个 smtp 库可以工作...
我通过谷歌找到了实现此目的的方法是这样的:
echo "This will go into the body of the mail." | mail -s "Subject line" [email protected]
问题是,邮件从未到达目的地。现在我发现很奇怪:难道不需要 smtp 服务器 URL 吗?例如 smtp.my-provider.com:25 ?
答案1
Sendmail 将尝试查找您要发送到的域的 MX 记录,因此您不必默认指定 SMTP 服务器的地址或主机名。如果您确实需要强制使用特定地址,可以通过 DNS 或 Sendmail mailertable 文件中的条目来处理。
您首先应该尝试确定原始消息发生了什么。尝试从应用程序发送并运行:
tail -f /var/log/maillog
您还可以使用“mailq”命令直接查看邮件队列。如果该命令返回输出,您可以尝试使用“sendmail -v -q”强制处理该队列。这将揭示错误的性质。
还要检查根用户的电子邮件是否有退回邮件。
答案2
不需要 SMTP 服务器 DNS 名称,因为该mail
命令需要与同一台机器上的本地邮件传输代理 (MTA) 进行通信。对于 Linux,该 MTA 通常是 Sendmail。如果您需要通过 ISP 的邮件服务器路由外发邮件,则 sendmail 配置可能包括 ISP 邮件服务器 (MTA) 的 DNS 名称作为智能主机。
我会检查邮件日志,看看你的外发邮件发生了什么。它可能正在排队等待投递,你可能会在适当的时候收到未送达报告。