如何在 C++ 中使用 libcurl 发送电子邮件
How to send an email with libcurl in C++
我正在尝试使用 libcurl 7.42.1 从 C++ 发送电子邮件。
我已经尝试了他们的示例程序 (http://curl.haxx.se/libcurl/c/smtp-mail.html),它可以构建、运行,但不起作用。
我尝试使用命令行 curl 来做同样的事情,但它表现出与 c++ 中的 libcurl 完全相同的行为(见下文)。
它挂起一段时间然后退出并出现错误(“响应读取失败”)。
我使用 wireshark 分析了数据包交换,我可以看到一旦建立了 TCP 连接(SYN、SYN-ACK、ACK),我的端点就不再发送任何数据包(它应该开始 SMTP 对话)。
我做错了什么?
这是我使用的命令:
curl --url "smtp://smtp.mail.yahoo.com:465" --mail-from "test-curl" --mail-rcpt "bog2k3@gmail.com" --user "*****@yahoo.com:*****" --upload-file test.txt --verbose
问题出在我使用的端口 (465),它是 SMTP/SSL 的端口,而不是纯文本 SMTP。
切换到端口25,它不再挂了。
在 SMTP 中,发送的第一条消息来自服务器,告诉客户端它已准备就绪。但是,您使用端口 465。所以我怀疑服务器使用的实际协议是 SMTPS,它基本上是在 TLS 层上的 SMPT,而在 TLS 中,它是客户端发起通信。这意味着服务器和客户端都在等待另一方开始通话,直到一方超时。
修复应该很简单,只需指定 smtps 协议:
curl --url "smtps://smtp.mail.yahoo.com:465" --mail-from "test-curl" --mail-rcpt "bog2k3@gmail.com" --user "*****@yahoo.com:*****" --upload-file test.txt --verbose
相应的示例程序在这里:
http://curl.haxx.se/libcurl/c/smtp-ssl.html
我真的不建议只在端口 25 上使用 SMTP,因为它没有加密。
我正在尝试使用 libcurl 7.42.1 从 C++ 发送电子邮件。
我已经尝试了他们的示例程序 (http://curl.haxx.se/libcurl/c/smtp-mail.html),它可以构建、运行,但不起作用。
我尝试使用命令行 curl 来做同样的事情,但它表现出与 c++ 中的 libcurl 完全相同的行为(见下文)。 它挂起一段时间然后退出并出现错误(“响应读取失败”)。
我使用 wireshark 分析了数据包交换,我可以看到一旦建立了 TCP 连接(SYN、SYN-ACK、ACK),我的端点就不再发送任何数据包(它应该开始 SMTP 对话)。
我做错了什么?
这是我使用的命令:
curl --url "smtp://smtp.mail.yahoo.com:465" --mail-from "test-curl" --mail-rcpt "bog2k3@gmail.com" --user "*****@yahoo.com:*****" --upload-file test.txt --verbose
问题出在我使用的端口 (465),它是 SMTP/SSL 的端口,而不是纯文本 SMTP。 切换到端口25,它不再挂了。
在 SMTP 中,发送的第一条消息来自服务器,告诉客户端它已准备就绪。但是,您使用端口 465。所以我怀疑服务器使用的实际协议是 SMTPS,它基本上是在 TLS 层上的 SMPT,而在 TLS 中,它是客户端发起通信。这意味着服务器和客户端都在等待另一方开始通话,直到一方超时。
修复应该很简单,只需指定 smtps 协议:
curl --url "smtps://smtp.mail.yahoo.com:465" --mail-from "test-curl" --mail-rcpt "bog2k3@gmail.com" --user "*****@yahoo.com:*****" --upload-file test.txt --verbose
相应的示例程序在这里:
http://curl.haxx.se/libcurl/c/smtp-ssl.html
我真的不建议只在端口 25 上使用 SMTP,因为它没有加密。