请教EMAIL问题,很简单的。先给1分,有人回答再给29分(因为可用用不多)。

FlyingSch 2002-07-22 12:29:12
首选连上smtp.163.net
lstrcpy(lpBuffer,"HELO jkf@163.net\r\n");
if (send(sock,lpBuffer,lstrlen(lpBuffer),0)==SOCKET_ERROR)
{
WSACleanup();
return;
}
recv(sock,lpBuffer2,sizeof(lpBuffer2),0);
服务器返回220,显然这是错误信息的返回,请问高手这是为什么。
我对STMP的通信语法不是很熟悉
...全文
36 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
aixiaobai 2002-07-25
  • 打赏
  • 举报
回复
哎呀,
怎么那么多啊,
给两分意思一下就可以了啊,
我发现了一个免去认证的方法,
明天用留言告诉你啊。
aixiaobai 2002-07-24
  • 打赏
  • 举报
回复
据我了解,一些服务器设置了认证,
是因为防止垃圾邮件的发送,
SMTP服务器要求必须是本服务器的用户,
所以如果你是它的用户,
就可以进行认证,
你可以去使用免费的MFC类CSMTPConnection(http://www.naughter.com/smtp.html),
但如果你不是用户,
那我就没有办法了,
如果你发现办法了,一定要告诉我,呵呵
FlyingSch 2002-07-23
  • 打赏
  • 举报
回复
请问高手向需要SMTP认证的服务器发送邮件应该在我的代码加上
什么呢才行呢?成万分感谢。
FlyingSch 2002-07-22
  • 打赏
  • 举报
回复
全代码如下:
WSADATA wsaData;
char lpBuffer[MAX_PATH*2];
SOCKADDR_IN addrIn;
SOCKET sock;
CString strMsg;

if (WSAStartup(2,&wsaData)!=0)
return;
sock=socket(AF_INET,SOCK_STREAM,0);
if (sock==INVALID_SOCKET)
{
WSACleanup();
return;
}
PHOSTENT pHostent=::gethostbyname("smtp.163.net");
addrIn.sin_addr= *((in_addr*)(pHostent->h_addr_list[0]));
addrIn.sin_family=AF_INET;
addrIn.sin_port =htons(25);
if (connect(sock,(sockaddr*) &addrIn,sizeof(addrIn))==SOCKET_ERROR)
{
WSACleanup();
return;
}
lstrcpy(lpBuffer,"HELO schhome@163.net\r\n");
if (send(sock,lpBuffer,lstrlen(lpBuffer),0)==SOCKET_ERROR)
{
WSACleanup();
return;
}
if (EmailCheckResponse(sock,HELLO_CHECK,strMsg)==FALSE)
{
MessageBox(strMsg);
//EmailCheckResponse函数检测到服务器返回220,返回FALSE

}
aixiaobai 2002-07-22
  • 打赏
  • 举报
回复
今天晚上我已经试验过你的程序,
没有问题,
除了connect少了一个)外,
我想使无意的。
完全可以发送成功,
但有些服务器需要SMTP认证,
例如371,sohu的,
你可以在每个send后加一个
recv语句,接收返回值,
再跟踪调试,
其中写的很清楚了,
我试了信箱www.huyou.com完全可以的
aixiaobai 2002-07-22
  • 打赏
  • 举报
回复
程序没有任何问题,
但是163.net需要SMTP认证,
所以,在
lstrcpy(lpBuffer,"MAIL From:<schhome@163.net>\r\n");
send(sock,lpBuffer,lstrlen(lpBuffer),0);
这一步时已经返回553错误了

你可以先telnet上163的SMTP服务器的25号端口,
直接敲入这些命令来测试。
FlyingSch 2002-07-22
  • 打赏
  • 举报
回复
WSADATA wsaData;
char lpBuffer[MAX_PATH*2];
SOCKADDR_IN addrIn;
SOCKET sock;
CString strMsg;

if (WSAStartup((WORD)2,&wsaData)!=0)
return;
sock=socket(AF_INET,SOCK_STREAM,0);
if (sock==INVALID_SOCKET)
{
WSACleanup();
return;
}
PHOSTENT pHostent=::gethostbyname("smtp.163.net");
addrIn.sin_addr= *((in_addr*)(pHostent->h_addr_list[0]));
addrIn.sin_family=AF_INET;
addrIn.sin_port =htons(25);
connect(sock,(sockaddr*) &addrIn,sizeof(addrIn);

lstrcpy(lpBuffer,"HELO schhome@163.net\r\n");
send(sock,lpBuffer,lstrlen(lpBuffer),0);

lstrcpy(lpBuffer,"MAIL From:<schhome@163.net>\r\n");
send(sock,lpBuffer,lstrlen(lpBuffer),0);

lstrcpy(lpBuffer,"RCPT TO:<schhome@163.net>\r\n");
send(sock,lpBuffer,lstrlen(lpBuffer),0);

lstrcpy(lpBuffer,"DATA\r\n");
send(sock,lpBuffer,lstrlen(lpBuffer),0);

lstrcpy(lpBuffer,"SUBJECT:test\r\n");
send(sock,lpBuffer,lstrlen(lpBuffer),0);

lstrcpy(lpBuffer,"test message\r\n");
send(sock,lpBuffer,lstrlen(lpBuffer),0);

lstrcpy(lpBuffer,".\r\n");
send(sock,lpBuffer,lstrlen(lpBuffer),0);

lstrcpy(lpBuffer,"QUIT \r\n");
send(sock,lpBuffer,lstrlen(lpBuffer),0);

::closesocket(sock);
MessageBox("finished");
//结果用FoxMail收不到邮件
aixiaobai 2002-07-22
  • 打赏
  • 举报
回复
220并不是错误码,
是SMTP服务器的返回码,
表示已经准备好,
准备发信
流程是这样的:
connect服务器,
收到220返回码,
HELO ...

16,471

社区成员

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

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

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