有关SMTP认证的问题

wangyoucao2003 2007-04-16 11:05:17
正在做一个有关SMTP协议的程序,可是当发送MAIL命令时,却返回553错误说是authentication is required,但我翻查RFC821没有相关的说明啊。到底怎么回事?好像有前辈说是要验证,那么相关的命令是什么?谢谢
...全文
347 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanxing_c 2008-09-09
  • 打赏
  • 举报
回复
up
caitian6 2007-05-12
  • 打赏
  • 举报
回复
up
wangyoucao2003 2007-04-18
  • 打赏
  • 举报
回复
cocogkx 你的代码我运行了下,但是不知道为什么返回了错误:
aa.obj : error LNK2001: unresolved external symbol __imp__send@16
aa.obj : error LNK2001: unresolved external symbol __imp__recv@16
aa.obj : error LNK2001: unresolved external symbol __imp__connect@12
aa.obj : error LNK2001: unresolved external symbol __imp__htons@4
aa.obj : error LNK2001: unresolved external symbol __imp__inet_addr@4
aa.obj : error LNK2001: unresolved external symbol __imp__socket@12
aa.obj : error LNK2001: unresolved external symbol __imp__WSACleanup@0
aa.obj : error LNK2001: unresolved external symbol __imp__WSAStartup@8
Debug/xia.exe : fatal error LNK1120: 8 unresolved externals
Error executing link.exe.
可能是那些文件没有连接?
wangyoucao2003 2007-04-18
  • 打赏
  • 举报
回复
我发送了AUTH命令到服务器的,但是返回了错误码535。我不知道我用户名加密后是不是正确的。xiaoxiaoxiaxia是我的用户名。加密后是eGlhb3hpYW94aWF4aWE=。现在不能确定是正确的还是错误的
danscort2000 2007-04-17
  • 打赏
  • 举报
回复
auth 指令
自己查一下吧,是采用BASE 64编码的
现在基本没有OPEN SMTP了,所以在发送邮件前必须使用AUTH登录到服务器
cocogkx 2007-04-17
  • 打赏
  • 举报
回复
代码如下
//注意加载ws2_32.lib


#include <Winsock2.h>
#include <stdio.h>
#include <iostream.h>
#include <string.h>
#define BUFFER_BLOCK_SIZE 409600


static char basis_64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

char * base64_encode(const unsigned char *value, int vlen);




char *base64_encode(const char *value, int vlen) {
unsigned char oval = 0 ;
char *result = (char *)malloc((vlen * 4) / 3 + 5) ;
char *out = result;
while (vlen >= 3) {
*out++ = basis_64[value[0] >> 2];
*out++ = basis_64[((value[0] << 4) & 0x30) | (value[1] >> 4)];
*out++ = basis_64[((value[1] << 2) & 0x3C) | (value[2] >> 6)];
*out++ = basis_64[value[2] & 0x3F];
value += 3;
vlen -= 3;
}
if (vlen > 0) {
*out++ = basis_64[value[0] >> 2];
oval = (value[0] << 4) & 0x30 ;
if (vlen > 1) oval |= value[1] >> 4;
*out++ = basis_64[oval];
*out++ = (vlen < 2) ? '=' : basis_64[(value[1] << 2) & 0x3C];
*out++ = '=';
}
*out = '\0';
return result;
}


int main()
{

char buffer[BUFFER_BLOCK_SIZE];
char name[]="此处换成你的姓名";
char encodename[13];
strcpy(encodename,base64_encode(name,strlen(name)));
char pass[]="此处换成你的密码";
char encodepass[13];
strcpy(encodepass,base64_encode(pass,strlen(pass)));
char login[]="auth login";
char from[]="mail from: <此处换成你的邮箱>";
char to[]="rcpt to: weiyanwu@21cn.com";
char data[]="data";
char message[]="Hello,Nice to meet you!\r\n.\r\n";
char quit[]="quit";
SOCKADDR_IN addrSrv;

WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return 0;
}


if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return 0;
}


for(int i=0;i<2;i++)
{

SOCKET sock=socket(AF_INET,SOCK_STREAM,0);

addrSrv.sin_addr.S_un.S_addr=inet_addr("此处换成你的SMTP邮箱服务器的IP");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(25);





connect(sock,(const sockaddr*)&addrSrv,sizeof(sockaddr));

//1. welcome words
SOCKET retCode=recv(sock,buffer,BUFFER_BLOCK_SIZE,0);
buffer[retCode]='\0';
cout<<buffer;

//2. EHLO
sprintf(buffer,"HELO 127.0.0.1\r\n");
cout<<buffer;
send(sock,buffer,strlen(buffer),0);
retCode=recv(sock,buffer,BUFFER_BLOCK_SIZE,0);
buffer[retCode]='\0';
cout<<buffer;


//3. login
sprintf(buffer,"%s\r\n",login);
cout<<buffer;
send(sock,buffer,strlen(buffer),0);
retCode=recv(sock,buffer,BUFFER_BLOCK_SIZE,0);
buffer[retCode]='\0';
cout<<buffer;

//4.发送加密后的姓名
sprintf(buffer,"%s\r\n",encodename);
cout<<buffer;
send(sock,buffer,strlen(buffer),0);
retCode=recv(sock,buffer,BUFFER_BLOCK_SIZE,0);
buffer[retCode]='\0';
cout<<buffer;


//5.发送加密后的密码
sprintf(buffer,"%s\r\n",encodepass);
cout<<buffer;
send(sock,buffer,strlen(buffer),0);
retCode=recv(sock,buffer,BUFFER_BLOCK_SIZE,0);
buffer[retCode]='\0';
cout<<buffer;

//6.发信人地址
sprintf(buffer,"%s\r\n",from);
cout<<buffer;
send(sock,buffer,strlen(buffer),0);
retCode=recv(sock,buffer,BUFFER_BLOCK_SIZE,0);
buffer[retCode]='\0';
cout<<buffer;

//7.收信人地址
sprintf(buffer,"%s\r\n",to);
cout<<buffer;
send(sock,buffer,strlen(buffer),0);
retCode=recv(sock,buffer,BUFFER_BLOCK_SIZE,0);
buffer[retCode]='\0';
cout<<buffer;




//8.正文
sprintf(buffer,"%s\r\n",data);
cout<<buffer;
send(sock,buffer,strlen(buffer),0);
retCode=recv(sock,buffer,BUFFER_BLOCK_SIZE,0);
buffer[retCode]='\0';
cout<<buffer;




//9.正文内容
sprintf(buffer,"%s",message);
cout<<buffer;
send(sock,buffer,strlen(buffer),0);
retCode=recv(sock,buffer,BUFFER_BLOCK_SIZE,0);
buffer[retCode]='\0';
cout<<buffer;

sprintf(buffer,"quit\r\n");
cout<<buffer;
send(sock,buffer,strlen(buffer),0);
retCode=recv(sock,buffer,BUFFER_BLOCK_SIZE,0);
buffer[retCode]='\0';
cout<<buffer;

}

return 0;
}
xujianlane 2007-04-16
  • 打赏
  • 举报
回复
http://bbs.letuo.com/printpage.asp?BoardID=16&ID=1814
中文的可以参照
xujianlane 2007-04-16
  • 打赏
  • 举报
回复
RFC2554
tszzp 2007-04-16
  • 打赏
  • 举报
回复
是SSL连接吗?如果是的话,你需要使用OpenSSL等来开发了。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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