如何在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
在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,因为它没有加密。
问题出在我使用的端口(465)上,它是SMTP/SSL的端口,而不是纯文本SMTP的端口。切换到端口25,它不再挂起。
相关文章:
- 尝试从C++访问 UWP 的电子邮件邮件类会导致"REGDB_E_CLASSNOTREG类未注册"错误
- 如何使HTML5电子邮件验证正则表达式在C++中工作?
- Qt:使用'mailto:'打开用户的电子邮件客户端失败
- 电子邮件地址中的c++smtp服务器主机名
- 如何使用 c++ (curl) 发送电子邮件
- 在端口 587 (TLS) 上使用 CDO 发送电子邮件时出错
- 预览由Microsoft Outlook 对象库生成的电子邮件
- 如果不有效,如何重复用户输入电子邮件
- 使用REGEX进行电子邮件输入验证C
- 如何从 pjsip 发送电子邮件.是否有任何可用于发送电子邮件的默认方法
- 如何在使用 c++/COM 发送时在电子邮件中插入/嵌入图像文件(.png)
- 使用Regex验证电子邮件和电话字段QT
- 带有 TLS v. 1.2 和 SSL v.3 电子邮件客户端的 Boost.Asio 上下文:ssl3 警报意外消息
- 如何发送带有嵌入图片的电子邮件
- 如何提示用户在C++中输入正确的电子邮件地址格式
- 我在尝试使用 libquickmail 发送电子邮件时收到错误
- C 从电子邮件向量中删除
- 使用 VMIME/libcurl 发送电子邮件,而不是通过服务器(或:SMTP 服务器库)
- 通过 libCURL 发送电子邮件
- 如何在C++中使用libcurl发送电子邮件