请问谁知道 SMTP 服务器身份验证的消息格式和应答?

逸少 2002-04-20 10:12:34
请问谁知道 SMTP 服务器身份验证的消息格式和应答? 最好能贴出一段应答内容.
...全文
619 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluecmy 2002-04-21
  • 打赏
  • 举报
回复
关注
huqiming 2002-04-21
  • 打赏
  • 举报
回复
网上有现成的身份验证的收发邮件代码啊。
linghushaonian 2002-04-20
  • 打赏
  • 举报
回复
上面例子中不就说明了格式了么?Date,From,To,Subject,X-Mailer
逸少 2002-04-20
  • 打赏
  • 举报
回复
下面是我用 Telnet 连接 smtp.263.net 的应答过程(ESMTP),发信的请求被拒绝了.我想知道怎么使我的要求不被拒绝.我写了一个 smtp 程序,但是总是收到 505 错误.现在那些服务器都要求身份验证,我是想知道消息格式,不是关于 Socket 方面的内容.
--------------------------------------------------------------------
EHLO smtp.263.net
250-192.168.30.29
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-AUTH LOGIN
250 8BITMIME
mail from: chzy00@263.net
553 You are not authorized to send mail as <mail from: chzy00@263.net>, authenti cation is required
linghushaonian 2002-04-20
  • 打赏
  • 举报
回复
Date,From,To,Subject,X-Mailer
BOOL CSMTP::Connect()
{
CString sHello;
TCHAR local_host[80];
if(m_bConnected)
return TRUE;
if(!m_wsSMTPServer.Create())
{
m_sError=_T("Unable to creat the socket.");
return FALSE;
}
if(!m_wsSMTPServer.Connect(GetServerHostName(),GetPort()))
{
m_sError=_T("Unable to connect to server");
m_wsSMTPServer.Close();
return FALSE;
}
gethostname(local_host,80);
sHello.Format("HELLO%s\r\n",local_host);
m_wsSMTPServer.Send((LPCTSTR)sHello,sHello.GetLength());
if(!get_response(GENERIC_SUCCESS))
{
m_wsSMTPServer.Close();
return FALSE;
}
m_bConnected=TRUE;
return TRUE;
}
BOOL CSMTP::Disconnect()
{
BOOL ret;
if(!m_bConnected)
return TRUE;
CString sQuit=_T("QUIT\r\n");
m_wsSMTPServer.Send((LPCTSTR)sQuit,sQuit.GetLength());
ret=get_response(QUIT_SUCCESS);
m_wsSMTPServer.Close();
m_bConnected=FALSE;
return ret;
}
BOOL CSMTP::transmit_message(CMailMessage* msg)
{
CString sFrom;
CString sTo;
CString sTemp;
CString sEmail;
ASSERT(msg!=NULL);
if(!m_bConnected)
{
m_sError=_T("Must be connected");
return FALSE;
}
sFrom.Format("MAIL From:<%s>\r\n",(LPCTSTR)msg->m_sFrom);
m_wsSMTPServer.Send((LPCTSTR)sFrom,sFrom.GetLength());
if(!get_response(GENERIC_SUCCESS))
return FALSE;
for(int i=0;i<msg->GetNumRecipients();i++)
{
msg->GetRecipient(sEmail,sTemp,i);
sTo.Format("RCPT TO:<%s>\r\n",(LPCTSTR)sEmail);
m_wsSMTPServer.Send((LPCTSTR)sTo,sTo.GetLength());
get_response(GENERIC_SUCCESS);
}
sTemp="DATA\r\n";
m_wsSMTPServer.Send((LPCTSTR)sTemp,sTemp.GetLength());
if(!get_response(DATA_SUCCESS))
{
return FALSE;
}
m_wsSMTPServer.Send((LPCTSTR)msg->m_sHeader,msg->m_sHeader.GetLength());
sTemp=prepare_body(msg);
m_wsSMTPServer.Send((LPCTSTR)sTemp,sTemp.GetLength());
sTemp="\r\n.\r\n";
m_wsSMTPServer.Send((LPCTSTR)sTemp,sTemp.GetLength());
if(!get_response(GENERIC_SUCCESS))
{
return FALSE;
}
return TRUE;
}
BOOL CSMTP::get_response(UINT response_expected)
{
ASSERT(response_expected>=GENERIC_SUCCESS);
ASSERT(response_expected<LAST_RESPONSE);
CString sResponse;
UINT response;
response_code* pResp;//shortthand
if(m_wsSMTPServer.Receive(response_buf,RESPONSE_BUFFER_SIZE)==SOCKET_ERROR)
{
m_sError=_T("Socket Error");
return FALSE;
}
sResponse=response_buf;
sscanf((LPCTSTR)sResponse.Left(3),"%d",&response);
pResp=&response_table[response_expected];
if(response!=pResp->nResponse)
{
m_sError.Format("%d:%s",response,(LPCTSTR)pResp->sMessage);
return FALSE;
}
return TRUE;
}
逸少 2002-04-20
  • 打赏
  • 举报
回复
身份验证???
逸少 2002-04-20
  • 打赏
  • 举报
回复
老兄,上面的根本就不行,我正是使用的那种方式, 从 Telnet 测试的结果看,MAIL FROM: 命令就失败了,还用什么 RCPT TO: 命令呢?

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧