扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:信息产业部电子第二十二研究所青 来源:yesky 2007年11月16日
关键字:
R:220 sina.com Simple Mail Transfer Service Ready S:HELLO sohu.com R:250 sina.com S:MAIL FROM:<langrui@sohu.com> R:250 OK S:RCPT TO:<renping@sina.com> R:250 OK S:DATA R:354 Start mail input;end with "<CRLF>.<CRLF>" S:…… R:250 OK S:QUIT R:221 sina.com Service closing transmission channel |
//邮件头准备 strTemp = _T( "From: " ) + m_strFrom; file://发件人地址 add_header_line( (LPCTSTR)strTemp ); strTemp = _T( "To: " ) + m_strTo; file://收件人地址 add_header_line( (LPCTSTR)strTemp ); m_tDateTime = m_tDateTime.GetCurrentTime();//发送时间 strTemp = _T( "Data: " ); strTemp += m_tDateTime.Format( "%a, %d %b %y %H:%M:%S %Z" ); add_header_line( (LPCTSTR)strTemp ); strTemp = _T( "Subject: " ) + m_strSubject; file://主题 add_header_line( (LPCTSTR)strTemp ); file://邮件头结束 m_strHeader += _T( "\r\n" ); file://邮件体准备 if( m_strBody.Right( 2 ) != _T( "\r\n" ) ) file://确认最后以回车换行结束 m_strBody += _T( "\r\n" ); |
BOOL CSMTP::get_response( UINT response_expected )//输入参数为希望的应答码 { …… // m_wsSMTPServer为CSocket的类对象,调用Receive()将应答码接收到缓存 // response_buf中 m_wsSMTPServer.Receive( response_buf, RESPONSE_BUFFER_SIZE ) sResponse = response_buf; sscanf( (LPCTSTR)sResponse.Left( 3 ), _T( "%d" ), &response ); pResp = &response_table[ response_expected ]; file://检验收到的应答码是否是所希望得到的 if( response != pResp->nResponse ) { ……//不相等的话进行错误处理 return FALSE; } return TRUE; } |
//格式化并发送HELLO命令,并接收、验证服务器应答码 gethostname( local_host, 80 ); sHello.Format( _T( "HELO %s\r\n" ), local_host ); m_wsSMTPServer.Send( (LPCTSTR)sHello, sHello.GetLength() ); if( !get_response( GENERIC_SUCCESS ) ) file://检验应答码是否为250 { …… return FALSE; } file://格式化并发送MAIL命令,并接收、验证服务器应答码 sFrom.Format( _T( "MAIL From: <%s>\r\n" ), (LPCTSTR)msg->m_strFrom ); m_wsSMTPServer.Send( (LPCTSTR)sFrom, sFrom.GetLength() ); if( !get_response( GENERIC_SUCCESS ) ) file://检验应答码是否为250 return FALSE; file://格式化并发送RCPT命令,并接收、验证服务器应答码 sEmail=(LPCTSTR)msg->m_strTo; sTo.Format( _T( "RCPT TO: <%s>\r\n" ), (LPCTSTR)sEmail ); m_wsSMTPServer.Send( (LPCTSTR)sTo, sTo.GetLength() ); if(!get_response( GENERIC_SUCCESS )) file://检验应答码是否为250 return FALSE; file://格式化并发送DATA命令,并接收、验证服务器应答码 sTemp = _T( "DATA\r\n" ); m_wsSMTPServer.Send( (LPCTSTR)sTemp, sTemp.GetLength() ); if( !get_response( DATA_SUCCESS ) ) file://检验应答码是否为354 return FALSE; file://发送根据RFC 822文档规定格式化过的邮件头 m_wsSMTPServer.Send( (LPCTSTR)msg->m_strHeader, msg->m_strHeader.GetLength() ); …… file://发送根据RFC 822文档规定格式化过的邮件体 sTemp = msg->m_strBody; if( sTemp.Left( 3 ) == _T( ".\r\n" ) ) sTemp = _T( "." ) + sTemp; while( (nPos = sTemp.Find( szBad )) > -1 ) { sCooked = sTemp.Mid( nStart, nPos ); sCooked += szGood; sTemp = sCooked + sTemp.Right( sTemp.GetLength() - (nPos + nBadLength) ); } m_wsSMTPServer.Send( (LPCTSTR)sTemp, sTemp.GetLength() ); file://发送内容数据结束标志"<CRLF>.<CRLF>",并检验返回应答码 sTemp = _T( "\r\n.\r\n" ); m_wsSMTPServer.Send( (LPCTSTR)sTemp, sTemp.GetLength() ); if( !get_response( GENERIC_SUCCESS ) )// 检验应答码是否为250 return FALSE; |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者