60 smtp_client(std::string pServer,
unsigned int pPort,std::string pUser,std::string pPassword):
61 mServer(pServer),mPort(pPort),mUserName(pUser),mPassword(pPassword),mSocket(mIOService),mResolver(mIOService)
63 tcp::resolver::query qry(mServer,boost::lexical_cast<std::string>( mPort ));
64 mResolver.async_resolve(qry,boost::bind(&smtp_client::handleResolve,
this,boost::asio::placeholders::error,
65 boost::asio::placeholders::iterator));
67 bool Send(std::string pFrom,std::string pTo,std::string pSubject,std::string pMessage)
78 std::string encodeBase64(std::string pData)
81 size_t sz=pData.size();
85 void handleResolve(
const boost::system::error_code& err,tcp::resolver::iterator endpoint_iterator)
89 tcp::endpoint endpoint=*endpoint_iterator;
90 mSocket.async_connect(endpoint,
91 boost::bind(&smtp_client::handleConnect,
this,boost::asio::placeholders::error,++endpoint_iterator));
96 mErrorMsg= err.message();
99 void writeLine(std::string pData)
101 std::ostream req_strm(&mRequest);
102 req_strm << pData <<
"\r\n";
103 boost::asio::write(mSocket,mRequest);
106 void readLine(std::string& pData)
109 boost::asio::read_until(mSocket, response,
"\r\n");
110 std::istream response_stream(&response);
111 response_stream >> pData;
113 void handleConnect(
const boost::system::error_code& err,tcp::resolver::iterator endpoint_iterator)
117 std::string read_buff;
119 std::ostream req_strm(&mRequest);
120 writeLine(
"EHLO "+mServer);
122 writeLine(
"AUTH LOGIN");
124 writeLine(encodeBase64(mUserName));
126 writeLine(encodeBase64(mPassword));
128 writeLine(
"MAIL FROM:<"+mFrom+
">");
129 writeLine(
"RCPT TO:<"+mTo+
">");
131 writeLine(
"SUBJECT:"+mSubject);
132 writeLine(
"From:"+mFrom);
133 writeLine(
"To:"+mTo);
135 writeLine( mMessage );
136 writeLine(
"\r\n.\r\n");
138 if(read_buff ==
"250")
145 mErrorMsg= err.message();
149 std::string mUserName;
150 std::string mPassword;
153 std::string mSubject;
154 std::string mMessage;
156 boost::asio::io_service mIOService;
157 tcp::resolver mResolver;
159 boost::asio::streambuf mRequest;
160 boost::asio::streambuf mResponse;
162 std::string mErrorMsg;