通过 Boost 和 C++ 进行 SMTP 身份验证
smtp auth via boost and c++
我正在使用boost 1.67编写cpp smtp客户端。 当我尝试发送登录数据时,服务器返回身份验证错误,但是当我通过 telnet 手动尝试时,它可以工作。 这是我的代码:
sktSocket.write_some(boost::asio::buffer("AUTH LOGINrn"));
size_t lenTemp = sktSocket.read_some(boost::asio::buffer(chTemp),error);
showResponse(chTemp.data(), lenTemp);
std::string strUse = boost::beast::detail::base64_encode(srvTest.strUser);
sktSocket.write_some(boost::asio::buffer(strUse));
sktSocket.write_some(boost::asio::buffer("rn"));
showText(strUse);
lenTemp = sktSocket.read_some(boost::asio::buffer(chTemp), error);
showResponse(chTemp.data(), lenTemp);
std::string strPass = boost::beast::detail::base64_encode(srvTest.strPasswd);
sktSocket.write_some(boost::asio::buffer(strPass));
sktSocket.write_some(boost::asio::buffer("rn"));
showText(strPass);
size_t lenLogin = sktSocket.read_some(boost::asio::buffer(chLogin), error);
showResponse(chLogin.data(), lenLogin);
当我运行这段代码时,我得到了响应:
535 Inncorrect authentication data
我真的不知道我做错了什么... 提前致谢编辑------------
现在我正在使用自己的实现来编码为 base64,它还返回正确的编码字符串作为 beast,但服务器像以前一样使用 535 重新勺子
unsigned int paddedCharacters = 0;
while (data.size() % 3 != 0)
{
paddedCharacters++;
data.push_back(0x00);
}
// Crazy typedef black magic
typedef insert_linebreaks<base64_from_binary<transform_width<const unsigned char *, 6, 8>>, 76> base64Iterator;
std::string encodedString(
base64Iterator(data.c_str()),
base64Iterator(data.c_str() + (data.size() - paddedCharacters)));
// Add '=' for each padded character used
for (unsigned int i = 0; i < paddedCharacters; i++)
{
encodedString.push_back('=');
}
return encodedString;
你不应该使用 boost::beast::detail::base64_encode
,因为它不是公共接口。detail
命名空间中的任何内容都是不应直接使用的实现细节。事实上,我相信其中有一个错误。尝试使用其他 base64 编码函数。
相关文章:
- LibGit2 SSH身份验证失败
- 为什么 WinInet 在通过 FQDN 连接时无法通过协商自动进行身份验证,但如果通过 IP 连接则成功?
- 如何通过NetHTTPClient在HTTPS中进行身份验证
- 处理身份验证弹出窗口在wxWebView
- 如何测试我的谷歌身份验证器实现?
- 通过 Boost 和 C++ 进行 SMTP 身份验证
- libtorrent是否支持带摘要身份验证的http web种子
- 将Windows身份验证与cpprestsdk一起使用
- OCCI:使用SSL钱包身份验证连接到OracleDB
- 为什么我不能使用外围设备进行身份验证
- 无法使用C++代码向MongoDB进行身份验证
- 模拟的 HTTP 身份验证仅在本地主机上工作
- 使用OpenSSL的SHA 512 HMAC消息身份验证的问题
- Windows 套接字和身份验证构建在包含 Poco-Library 时失败
- 如何对进程进行身份验证
- 如何使用GSOAP初始化服务器上下文以启用简单身份验证(仅服务器身份验证)
- 解析 HTTP 的摘要式身份验证的正确正则表达式模式是什么?
- 在 SSH 上的公钥-私钥身份验证上的 libcurl 实现
- 使用 WinInet 的客户端身份验证(证书 + 私钥)
- 未经身份验证的SMTP服务器到服务器通信