怎么实现呀?
  我查书上说  用smtp协议发送邮件用pop协议接收邮件,用socket套接字,链接服务器的地址,比如说host=::gethostbyname(set.m_severadd.GetBuffer(1)); //从服务器名获取主机地址
addr.sin_addr.S_un.S_addr=inet_addr(host->h_addr_list[0]);
我输入的是  smtp.163.com但是得不到163的邮件服务器的ip地址,我直接改为smtp.163.com的ip地址时 成功连接了 邮件服务器。这是怎么回事?还有就是成功连接到服务器端后,单击发送按钮还是不能发送邮件,下面是发送按钮的函数
void CMyDlg::OnSendmail() 
{
char buf[4];
CString data="Data: Tue,04 Feb 2009 21:18:03+0800\r\n";
CString sender="MAIL FROM:";
CString recver="RCPT TO:";
CString subject="Subject:";
CString s2,r,s1,mailtext;
GetDlgItem(IDC_SENDER)->GetWindowText(s2);
GetDlgItem(IDC_SUBJECT)->GetWindowText(s1);
GetDlgItem(IDC_RECVER)->GetWindowText(r);
GetDlgItem(IDC_MAILTEXT)->GetWindowText(mailtext);
sender+=s2;
recver+=r;
subject+=s1;    CString sendmail;
sendmail+="HELO";
sendmail+=sender;
sendmail+=recver;
sendmail+="DATA\r\n";
sendmail+=subject;
sendmail+=mailtext;
sendmail+="QUIT\r\n";
sendmail+="\0";
send(s,sendmail,sizeof(sendmail),0);
recv(s,buf,4,0);
if(buf!=NULL)
{
if(atoi(buf)==250)
{
::SendMessage(statu,SB_SETTEXT,0,(long)"邮件发送成功");
}
else
{
::SendMessage(statu,SB_SETTEXT,0,(long)"邮件发送失败");
} }
else
{
::SendMessage(statu,SB_SETTEXT,0,(long)"邮件正在发送");
}
}请各路神仙给看看,小弟不胜感激

解决方案 »

  1.   

    (1) 从哪里抄来的代码,没有前因后果的。
    send() 函数做了什么?
    (2) 不要依赖163的smtp,为了防止垃圾邮件,现在的商业邮件商基本都不支持smtp,就是支持也需要证书等复杂机制,不是你这么简陋的socket层的程序能做到的。
      

  2.   

    host=::gethostbyname(set.m_severadd.GetBuffer(1)); //从服务器名获取主机地址
    这个为什么得到的是Buffer(1) 而不是0呢?你吧代码贴全了 
    发送命令依次是 
    HELO
    AUTHLOGIN
    MAIL FROM: 
    RCPT TO: 
    DATA你少了 AUTHLOGIN这个环节 都没有登录当然无法发送了
    而且每发送一个命令 需要读取缓冲区 判断是否成功
    你去wikipedia上面找个 spec看看吧