Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用SMTP协议和boost库发送电子邮件_C++_Boost_Tcp_Network Programming_Smtp - Fatal编程技术网

C++ 使用SMTP协议和boost库发送电子邮件

C++ 使用SMTP协议和boost库发送电子邮件,c++,boost,tcp,network-programming,smtp,C++,Boost,Tcp,Network Programming,Smtp,我正在尝试使用SMTP协议和boost库发送电子邮件 但由于某些原因,我无法连接到hotmail smtp服务器并向自己发送电子邮件 这是我的代码: 我做错了什么 DNS_RECORD* ppQueryResultsSet = NULL; // dns mx lookup DnsQuery(L"hotmail.com", DNS_TYPE_MX, DNS_QUERY_STANDARD, NULL, &ppQueryResultsSet, NULL);

我正在尝试使用SMTP协议和boost库发送电子邮件 但由于某些原因,我无法连接到hotmail smtp服务器并向自己发送电子邮件

这是我的代码: 我做错了什么

    DNS_RECORD* ppQueryResultsSet = NULL;

    // dns mx lookup
    DnsQuery(L"hotmail.com", DNS_TYPE_MX, DNS_QUERY_STANDARD, NULL, &ppQueryResultsSet, NULL);

    if (ppQueryResultsSet == NULL)
        return false;

    // i am getting the mx servers (i.e: mx3.hotmail.com)
    wcout << "MX Host name: " << ppQueryResultsSet->Data.MX.pNameExchange << endl;
    DnsRecordListFree(ppQueryResultsSet, DnsFreeRecordList);

    string host_name = String_Convertion::WStringToString(ppQueryResultsSet->Data.MX.pNameExchange);

    // setting up socket connection
    boost::asio::io_service io_service;
    tcp::resolver resolver(io_service);
    tcp::resolver::query query(host_name, "25");
    tcp::resolver::iterator endpoint_iterator = resolver.resolve(query), end;
    tcp::socket socket(io_service);

    // connecting to the server
    boost::system::error_code error_code_connect;
    boost::asio::connect(socket, endpoint_iterator, end, error_code_connect);
    if (error_code_connect)
    {
        cout << "Error connecting to SMTP Server" << endl;
        return false;
    }

    boost::system::error_code error;
    std::string temp_buf;
    boost::array<char, 128> buf;
    size_t len;

    // settings the packets to send
    list<string> packets;
    packets.push_back("HELO");
    packets.push_back("MAIL FROM: xxx@xxx.xxx");
    packets.push_back("VRFY xxx@xxx.xxx");
    packets.push_back("RCPT TO: x@hotmail.com"); 
    packets.push_back("DATA");
    packets.push_back("Subject: subject!");
    packets.push_back("hi how are you doing?.");
    packets.push_back("QUIT");
    list<string>::iterator it;
    // iterating to send the packets
    for (it = packets.begin(); it != packets.end(); it++)
    {
        socket.write_some(boost::asio::buffer(*it+"\r\n"));
        len = socket.read_some(boost::asio::buffer(buf), error);
        temp_buf = buf.data();
        temp_buf = temp_buf.substr(0, len);
        cout << temp_buf << endl;
    }
DNS_记录*ppQueryResultsSet=NULL;
//dns mx查找
DnsQuery(L“hotmail.com”、DNS_TYPE_MX、DNS_QUERY_STANDARD、NULL和ppQueryResultsSet、NULL);
if(ppQueryResultsSet==NULL)
返回false;
//我正在获取mx服务器(即:mx3.hotmail.com)

wcout我认为您需要了解一下boost:asio的工作原理。实际上,您正在创建一个服务,但从未调用
run()
。查看聊天示例,注意它生成了一个专门用于执行工作的线程:

boost::thread t(boost::bind(&boost::asio::io_service::run, &io_service));

尽管可能存在其他问题,但在邮件标题和正文之间还需要一个额外的
\r\n


您还需要通过发送一行仅包含
\r\n

的内容来正确终止
数据
部分。是否有响应
VRFY
命令的SMTP服务器?