我用socket编写了一个自动发邮件的程序,是无附件的,只是文本,服务器是smtp.gmail.com,但是最终还是不能成功,出现以下提示:530 5.7.0 Must issue a STARTTLS command first. 20sm13059wfi.16我的源程序如下:
#include <string>
#include <Winsock2.h>
#include <stdio.h>using std::string;void main()
{
string Serv="HELO 209.85.201.109\r\n";
string From="MAIL FROM:<[email protected]>\r\n";
string To="RCPT TO:<[email protected]>\r\n";
string Text="你好\r\n\r\n.\r\n";
char *MailMessage[]=
{
const_cast<char*>(Serv.c_str()),
const_cast<char*>(From.c_str()),
const_cast<char*>(To.c_str()),
"DATA\r\n",
const_cast<char*>(Text.c_str()),
"QUIT\r\n",
NULL
}; WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return;
} SOCKET s=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN sin;
sin.sin_addr.S_un.S_addr=inet_addr("209.85.201.109");
sin.sin_family=AF_INET;
sin.sin_port=htons(25); if(connect(s,(LPSOCKADDR)&sin,sizeof(SOCKADDR))==SOCKET_ERROR)
printf("error!\r\n"); int Length=0;
int End=0;
char sBuff[255]="";
int Msg=0; do
{
Length=recv(s,(LPSTR)sBuff+End,sizeof(sBuff)-End,0);
printf("%s",sBuff);
End+=Length;
sBuff[End]='\0'; send(s,(LPSTR)MailMessage[Msg],strlen(MailMessage[Msg]),0);
Msg++;
}while(MailMessage[Msg]); closesocket(s);
WSACleanup();
return;
}
请大家帮帮忙,我换了tom.com的还是不行,不过提示就出现不一样的.如下:
553 this mail is blocked by kbas system,blockid=cnapp12.tom.com.28482.1209482329另外我的程序里没进行身份验证,请问发送身份验证的格式应该如何写?谢谢大家!
#include <string>
#include <Winsock2.h>
#include <stdio.h>using std::string;void main()
{
string Serv="HELO 209.85.201.109\r\n";
string From="MAIL FROM:<[email protected]>\r\n";
string To="RCPT TO:<[email protected]>\r\n";
string Text="你好\r\n\r\n.\r\n";
char *MailMessage[]=
{
const_cast<char*>(Serv.c_str()),
const_cast<char*>(From.c_str()),
const_cast<char*>(To.c_str()),
"DATA\r\n",
const_cast<char*>(Text.c_str()),
"QUIT\r\n",
NULL
}; WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return;
} SOCKET s=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN sin;
sin.sin_addr.S_un.S_addr=inet_addr("209.85.201.109");
sin.sin_family=AF_INET;
sin.sin_port=htons(25); if(connect(s,(LPSOCKADDR)&sin,sizeof(SOCKADDR))==SOCKET_ERROR)
printf("error!\r\n"); int Length=0;
int End=0;
char sBuff[255]="";
int Msg=0; do
{
Length=recv(s,(LPSTR)sBuff+End,sizeof(sBuff)-End,0);
printf("%s",sBuff);
End+=Length;
sBuff[End]='\0'; send(s,(LPSTR)MailMessage[Msg],strlen(MailMessage[Msg]),0);
Msg++;
}while(MailMessage[Msg]); closesocket(s);
WSACleanup();
return;
}
请大家帮帮忙,我换了tom.com的还是不行,不过提示就出现不一样的.如下:
553 this mail is blocked by kbas system,blockid=cnapp12.tom.com.28482.1209482329另外我的程序里没进行身份验证,请问发送身份验证的格式应该如何写?谢谢大家!
===============
注意Start TLS Command.TLS即Transport Layer Security,建议使用OPENSSL.
VC++ SMTP协议电子邮件传送剖析
http://www.yesky.com/20021119/1640691.shtml