亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? smailer.cpp

?? 股票分析系統源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:

    end += "\r\n--" + _boundary + "--\r\n";

    end += ".\r\n";

    return end;
}

std::string MailWrapper::prepareFrom()
{
    std::string from_string;

    from_string = prepareName(_mail_info->getSenderName());
    from_string += getSenderAddress();

    return from_string;
}

std::string MailWrapper::prepareTo()
{
    std::string to_string;

    traverseReceiver();
    while ( hasMoreReceiver() )
    {
        to_string += prepareName(_rcv_itr->first);
        to_string += nextReceiverAddress() + ", ";
    }

    return to_string.substr(0, to_string.length()-2);
}

std::string MailWrapper::prepareDate()
{
    char date_string[MAX_BUFFER_SIZE];

    time_t seconds;
    time(&seconds);
    strftime(date_string, MAX_BUFFER_SIZE, 
             "%a, %d %b %y %H:%M:%S +0800", 
             localtime(&seconds));          // +0800 maybe hard code

    return date_string;
}

std::string MailWrapper::prepareName(const std::string raw_name)
{
    std::string decorated_name;

    if (!raw_name.empty())
    {
        decorated_name  = "\"";
        decorated_name += raw_name;
        decorated_name += "\" ";
    }

    return decorated_name;
}

// Member functions of class MailSender
/////////////////////////////////////

MailSender::MailSender(const std::string server_name, 
                       const std::string user_name, 
                       const std::string user_pwd)
    : _server_name(server_name), _user_name(user_name), 
      _user_pwd(user_pwd), _mail(0)
{
    conn();

    hello();

    if ( !user_name.empty() )
        login();
}

MailSender::~MailSender()
{
    quit();
}

void MailSender::setMail(MailWrapper* mail)
{
    _mail = mail;
}

bool MailSender::sendMail()
{
    if (!_mail)
        return false;

    if (!sendHeader())
    	return false;
    if (!sendContent())
    	return false;
    if (!sendEnd())
    	return false;
    return true;
}

std::string MailSender::getSenderAddress() const
{
    std::string sender = _user_name;
	size_t index = sender.find('@');
	if( index >= 0 && index < sender.length() )
	{
		sender = "<" + sender + ">";
	}
	else
	{
		std::string server = _server_name;
		size_t h = server.find("mail.");
		if( h >= 0 && h < server.length() )
			server = server.substr(5,server.length()-5);
		h = server.find("smtp.");
		if( h >= 0 && h < server.length() )
			server = server.substr(5,server.length()-5);
		sender = sender + "." + server;
		sender = "<" + sender + ">";
	}
    return sender;
}

bool MailSender::conn()
{
    struct hostent* host = gethostbyname(_server_name.c_str());
    if (host == 0)
    {
    	// throw new MailException("Get server infomation error");
    	_err_message = "Get server infomation error";
    	return false;
    }

    _socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

    struct sockaddr_in server_addr;
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = *(ULONG *)host->h_addr_list[0];
    server_addr.sin_port = htons(SERVICE_PORT);

    connect(_socket, (struct sockaddr *)&server_addr, sizeof(server_addr));
    return rcvResponse("220");
}

bool MailSender::hello()
{
    char local_host[MAX_BUFFER_SIZE];
    if ( gethostname(local_host, MAX_BUFFER_SIZE) != 0 )
    {
        // throw new MailException("Get local host name error");
        _err_message = "Get local host name error";
        return false;
    }

    std::string msg;

    msg  = "HELO ";
    msg += std::string(local_host) + "\r\n";
    if(!sendRequest(send_helo_cmd, msg))
    	return false;
    return rcvResponse("250");
}

bool MailSender::login()
{
    std::string msg;

    msg = "AUTH LOGIN\r\n";
    if(!sendRequest(send_auth_cmd, msg))
    	return false;
    if(!rcvResponse("334"))
    	return false;

    msg = MUtils::Base64Helper::encode(_user_name) + "\r\n";
    if(!sendRequest(send_username, msg))
    	return false;
    if(!rcvResponse("334"))
    	return false;

    msg = MUtils::Base64Helper::encode(_user_pwd) + "\r\n";
    if(!sendRequest(send_password, msg))
    	return false;
    return rcvResponse("235");
}

bool MailSender::sendHeader()
{
    std::string msg;

    msg  = "MAIL FROM: ";
    msg += getSenderAddress() + "\r\n";
    if(!sendRequest(send_mail_cmd, msg))
    	return false;
    if(!rcvResponse("250"))
    	return false;

    _mail->traverseReceiver();
    while ( _mail->hasMoreReceiver() )
    {
        msg  = "RCPT TO: ";
        msg += _mail->nextReceiverAddress() + "\r\n";
        if(!sendRequest(send_rcpt_cmd, msg))
        	return false;
        if(!rcvResponse("250"))
        	return false;
    }

    msg  = "DATA\r\n";
    if(!sendRequest(send_data_cmd, msg))
    	return false;
    if(!rcvResponse("354"))
    	return false;

    return sendRequest(send_header, _mail->getHeader());
}

bool MailSender::sendContent()
{
    _mail->traverseContent();
    while ( _mail->hasMoreContent() )
    {
        if(!sendRequest(send_content, _mail->nextContent()))
        	return false;
    }
    return true;
}

bool MailSender::sendEnd()
{
    if(!sendRequest(send_end, _mail->getEnd()))
    	return false;
    return rcvResponse("250");
}

bool MailSender::quit()
{
    if(!sendRequest(send_quit_cmd, "QUIT\r\n"))
    	return false;
    if(!rcvResponse("221"))
    	return false;

    closesocket(_socket);
    return true;
}

bool MailSender::rcvResponse(const std::string expected_response)
{
    int recv_bytes = 0;
    char response_buffer[MAX_BUFFER_SIZE];
    if ( (recv_bytes = recv(_socket, response_buffer, MAX_BUFFER_SIZE, 0)) < 0 )
    {
    	_err_message = ErrorMessage::getInstance().response(expected_response);
    	return false;
        //throw new MailException( 
        //    ErrorMessage::getInstance().response(expected_response)
        //);
    }

    std::string response(response_buffer, recv_bytes);
    std::cout << "[INFO]RECV(" << expected_response << "):" 
              << response << std::endl;
    if ( response.substr(0, 3) != expected_response )
    {
    	_err_message = ErrorMessage::getInstance().response(expected_response);
    	return false;
        //throw new MailException( 
        //    ErrorMessage::getInstance().response(expected_response)
        //);
    }
    return true;
}

bool MailSender::sendRequest(Operaion operation, 
                             const std::string content)
{
    std::cout << "[INFO]SEND:" << content << std::endl;

    if ( send(_socket, content.c_str(), content.length(), 0) < 0 )
    {
    	_err_message = ErrorMessage::getInstance().request(operation);
    	return false;
        //throw new MailException(
        //    ErrorMessage::getInstance().request(operation)
        //);
    }
    return true;
}

// Member functions of class ErrorMessage
/////////////////////////////////////

ErrorMessage& ErrorMessage::getInstance()
{
    static ErrorMessage _instance;
    return _instance;
}

ErrorMessage::ErrorMessage()
{
    _request_errmsg_map[MailSender::send_helo_cmd] = "Send HELO cmd error";
    _request_errmsg_map[MailSender::send_auth_cmd] = "Send AUTH cmd error";
    _request_errmsg_map[MailSender::send_username] = "Send user name error";
    _request_errmsg_map[MailSender::send_password] = "Send user password error";
    _request_errmsg_map[MailSender::send_mail_cmd] = "Send MAIL FROM cmd error";
    _request_errmsg_map[MailSender::send_rcpt_cmd] = "Send RCPT TO cmd error";
    _request_errmsg_map[MailSender::send_data_cmd] = "Send DATA cmd error";
    _request_errmsg_map[MailSender::send_header  ] = "Send mail header error";
    _request_errmsg_map[MailSender::send_content ] = "Send mail content error";
    _request_errmsg_map[MailSender::send_end     ] = "Send mail end error";
    _request_errmsg_map[MailSender::send_quit_cmd] = "Send QUIT cmd error";

    _respons_errmsg_map["220"] = "Server connect error";
    _respons_errmsg_map["250"] = "General server error";
    _respons_errmsg_map["334"] = "Server authentication error";
    _respons_errmsg_map["235"] = "Password error";
    _respons_errmsg_map["354"] = "Server not ready for data";
    _respons_errmsg_map["221"] = "Server didn't terminate session";
}

std::string ErrorMessage::request(MailSender::Operaion request_operation)
{
    return _request_errmsg_map[request_operation];
}

std::string ErrorMessage::response(const std::string expected_response)
{
    return _respons_errmsg_map[expected_response];
}

} // namespace SMailer

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕高清不卡| 99久久精品国产毛片| 中文字幕一区二区三区视频 | 2021久久国产精品不只是精品| 91福利在线免费观看| 91丝袜美腿高跟国产极品老师 | 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 91精品婷婷国产综合久久竹菊| 在线欧美日韩国产| 色综合 综合色| 欧洲精品在线观看| 欧美影院一区二区| 欧美日韩视频一区二区| 欧美理论在线播放| 91精品久久久久久蜜臀| 日韩一区二区在线观看视频| 日韩一区二区三区在线| 日韩午夜激情视频| 欧美精品一区二区三区蜜臀| 久久久91精品国产一区二区三区| 久久免费国产精品| 日本一区二区三区高清不卡| 亚洲视频在线观看一区| 亚洲精品国产一区二区精华液| 国产成人精品三级麻豆| 国产成人a级片| 91麻豆文化传媒在线观看| 91网上在线视频| 69精品人人人人| 欧美电视剧在线看免费| 国产精品午夜久久| 亚洲资源在线观看| 老汉av免费一区二区三区| 国产一二三精品| 欧美在线看片a免费观看| 欧美一区二区三区免费| 国产欧美综合在线| 亚洲一二三级电影| 久久www免费人成看片高清| 成人午夜私人影院| 欧美日韩国产在线播放网站| 久久久亚洲高清| 亚洲精品国久久99热| 久久精品国产一区二区| 不卡高清视频专区| 91精品国产美女浴室洗澡无遮挡| 国产肉丝袜一区二区| 亚洲日本一区二区三区| 免费成人在线观看| 欧美国产一区二区| 香蕉乱码成人久久天堂爱免费| 国精产品一区一区三区mba桃花 | 欧美成人免费网站| 亚洲色图.com| 国产一区二区三区国产| 色八戒一区二区三区| 久久婷婷久久一区二区三区| 亚洲国产日韩在线一区模特| 成人国产精品免费观看视频| 日韩欧美自拍偷拍| 亚洲国产综合在线| 北条麻妃一区二区三区| 精品乱人伦小说| 午夜视频在线观看一区二区三区 | 国产精品全国免费观看高清| 开心九九激情九九欧美日韩精美视频电影 | 成人av网址在线观看| 欧美成人一区二区三区| 亚洲国产一区二区三区青草影视| 成人99免费视频| 久久久久久99精品| 麻豆精品国产91久久久久久| 欧美日韩午夜在线| 依依成人精品视频| 色一情一乱一乱一91av| 中文字幕日韩精品一区| 国产.欧美.日韩| 国产欧美一区二区精品秋霞影院| 精品一区二区国语对白| 7777精品伊人久久久大香线蕉的| 亚洲成人免费在线观看| 欧美自拍偷拍一区| 一区二区三区在线观看视频| 91蜜桃视频在线| 亚洲一二三级电影| 欧美日韩国产另类不卡| 亚洲国产一区二区三区青草影视| 91久久精品网| 亚洲第一福利一区| 欧美在线视频不卡| 首页亚洲欧美制服丝腿| 欧美一区二区三区视频免费 | 激情综合网最新| 亚洲精品一区二区三区影院| 国产一区二区福利| 中文字幕av一区二区三区高| 97久久精品人人做人人爽| 亚洲欧美日韩国产一区二区三区| 色综合视频一区二区三区高清| 亚洲视频免费在线| 91豆麻精品91久久久久久| 亚洲线精品一区二区三区八戒| 欧美日韩国产一级| 久久99热这里只有精品| 欧美国产欧美综合| 在线免费不卡视频| 亚洲h在线观看| 欧美zozozo| 96av麻豆蜜桃一区二区| 亚洲精品国产一区二区精华液| 538在线一区二区精品国产| 久久se这里有精品| 亚洲品质自拍视频网站| 678五月天丁香亚洲综合网| 国内一区二区在线| 一区二区在线看| 精品国产亚洲在线| 色视频成人在线观看免| 精品一区二区三区影院在线午夜 | 日韩一区二区在线看片| 顶级嫩模精品视频在线看| 亚洲一二三级电影| 久久精品免视看| 欧美视频完全免费看| 国产麻豆精品95视频| 亚洲国产成人高清精品| 久久久久久久久久久黄色| 欧美亚洲国产一卡| 精品一区二区免费| 亚洲午夜国产一区99re久久| 久久精品一二三| 在线播放中文字幕一区| 成人av资源下载| 久久国产剧场电影| 亚洲一区二区三区四区不卡| 国产女同互慰高潮91漫画| 7777精品伊人久久久大香线蕉| 99精品欧美一区二区蜜桃免费| 国产在线精品一区二区三区不卡| 亚洲午夜久久久久久久久电影院 | 欧美一区二区三区的| 91在线精品一区二区三区| 国产丝袜美腿一区二区三区| 成人在线视频一区二区| 亚洲成在线观看| 欧美精品123区| 一二三区精品福利视频| 成人自拍视频在线观看| 成人性生交大片免费看中文| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 久久er99热精品一区二区| 国产精品1区二区.| 国产精品一二三区在线| 亚洲黄色录像片| 亚洲一区二区三区四区五区黄| 亚洲aaa精品| 国内国产精品久久| 成人小视频在线| 欧美视频你懂的| 精品国产伦理网| 亚洲欧美日韩系列| 日本成人超碰在线观看| 国产91色综合久久免费分享| 欧美私人免费视频| wwwwww.欧美系列| 一区二区三区波多野结衣在线观看| 视频在线观看一区| 成人毛片在线观看| 在线综合视频播放| 自拍偷拍国产精品| 精品一区免费av| 欧美天堂一区二区三区| 国产婷婷色一区二区三区在线| 亚洲成av人片在www色猫咪| 国产高清无密码一区二区三区| 欧美日韩高清影院| 国产成人午夜视频| 99久久精品国产精品久久| 7777精品伊人久久久大香线蕉经典版下载 | 成人激情免费视频| 欧美电影在哪看比较好| 综合网在线视频| 国模少妇一区二区三区| 欧美日韩免费高清一区色橹橹| 国产精品国产三级国产普通话蜜臀 | 99精品久久只有精品| 久久久久久97三级| 日韩国产精品久久久久久亚洲| 色综合天天综合给合国产| 久久久久久久久久美女| 奇米四色…亚洲| 欧美日韩国产一二三| 亚洲欧美日韩中文字幕一区二区三区 | 国产999精品久久| 欧美一区二区美女| 一区二区三区在线不卡| 99久久精品国产麻豆演员表| 中文字幕人成不卡一区| 国产成人鲁色资源国产91色综| 久久女同性恋中文字幕|