如何使用curl发送电子邮件(C ++)

时间:2015-11-24 14:35:53

标签: c++ curl

我正在尝试使用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

2 个答案:

答案 0 :(得分:1)

在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,因为它没有加密。

答案 1 :(得分:0)

问题在于我使用的端口(465),它是SMTP / SSL的端口,而不是纯文本SMTP。 切换到端口25,它不再挂起。