热情软件屋

 

为何无法成功发送电子邮件


编号:QA004110
建立日期: 2001年4月15日 最后修改日期:2001年4月15日
所属类别:

Zhao Lei:
    操作系统:windows98
    编程工具:vc++6.0
    问题:如下代码为何无法成功发送电子邮件?
     CString string1,string2;
     ////////////////////////////////
     //-----------------------------
     //connect
     CSocket socket;
     socket.Create();
     socket.Connect("smtp.263.net",25);
     //-----------------------------
     //send mail order
     string1="MAIL From: <aboywaitinggirl@263.net>\r\n";
     socket.Send(string1,string1.GetLength());
     //-----------------------------
     //send rcpt order
     string1="RCPT TO: <aboywaitinggirl@263.net>\r\n";
     socket.Send(string1,string1.GetLength());
     //-----------------------------
     //send data order
     string1="DATA\r\n";
     socket.Send(string1,string1.GetLength());
     //----------------------------
     //send header
     //............................
     //寄信人地址
     string1="寄信人地址: ;
     //............................
     //收信人地址
     信人地址: sFriendly<sEamil(to)>,sFriendly<sEmail>\r\n";
     string2="收信人地址: ABoyWaitingGirl@263.net<ABoyWaitingGirl@263.net>\r\n";
     string1+=string2;
     //............................
     //日期
     CTime m_tDateTime;
     m_tDateTime = m_tDateTime.GetCurrentTime();
     string2= _T( "日期: " );
     string2+= m_tDateTime.Format( "%a, %d %b %y %H:%M:%S %Z" );
     string2+="\r\n";
     string1+=string2;
     //............................
     //主题
     string2="主题:无\r\n";
     string1+=string2;
     socket.Send(string1,string1.GetLength());
     //----------------------------
     //send body
     string1="Received?\r\n";
     socket.Send(string1,string1.GetLength());
     //----------------------------
     //tell the server this is the end of the mail
     string1="\r\n.\r\n";
     socket.Send(string1,string1.GetLength());
     //-----------------------------
     //Close the socket
     socket.Close();
     pointer->MessageBox("OK");
     ////////////////////////////////

回答:

    这是SMTP协议的问题,请参照以下内容:
    步骤:
    1.用'HELO 用户名\r\n'向服务发出请求,(注:如果是需要验证的SMTP服务器,应用'EHLO 用户名\r\n'.
    2.检查服务器返回信息是否OK(注:如果是多行返回的话,前面若干行均由'-'字符打头,最后一行没有此字符,另外,对不同的命令,表示成功的前缀并不相同,这一点上SMTP协议不如POP协议的“+OK”,“-ERR”方便。需要自己调试摸索)。以后每个都应检查是否成功。
    3.如果需要验证,则发出验证命令,服务器会在返回的信息中告诉你用什么类型的验证方法。
    4.MAIL FROM:<邮件地址>\r\n
    5.RCPT TO:<邮件地址>\r\n 可以重复若干个不同的地址。
    6.DATA\r\n
    7.发数据。。。
    8.发数据"\r\n.\r\n"告诉服务器数据发送结束。(不要忘记)。
    9.QUIT\r\n
    注意:你的套接字应创建成阻塞式,否则在第7步会出现数据发丢的情况,因为非阻塞式的套接字只是将数据先发给WSOCK.DLL再由WSOCK.dll发出去。
    我有自己写的源代码。
    (主持人注:你应该按照上面介绍的步骤检查服务器的返回信息,事实上你的问题是263的服务器需要身份认证,参考QA003775 "怎样增加smtp身份认证功能"。)

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio