请教发送邮件的问题!!

时间:2021-02-26 20:10:52
我做了个发送邮件的小程序,通过SMTP来发送,但现在的很多邮箱,比如,sina,sohu,163的SMTP都需要到服务器上验证,否则无法发送,请问那个验证的怎么做啊??望各位大虾指教!

6 个解决方案

#1


我也没做过,gz一下

#2


void CSmtestDlg::SendMail(LPCTSTR szin, CString &content) 
{

CString szmail(szin);
CString szmtitle;
char bufRecv[256];
char bufCmd[256];
int nRecv;
DWORD *pdwCmd=(DWORD *)bufRecv;
pSock->Connect("smtp.citiz.net",25);
nRecv=pSock->Receive(bufRecv,255);
//strcpy(bufRecv,"220");
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_WELCOME:
strcpy(bufCmd,"EHLO local\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_OK:
strcpy(bufCmd,"AUTH LOGIN\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_AUTHLOGIN:
strcpy(bufCmd,"dW1z\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_AUTHLOGIN:
strcpy(bufCmd,"dW1zdW1z\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_AUTHOK:
strcpy(bufCmd,"MAIL FROM: <ums@citiz.net>\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_OK:
strcpy(bufCmd,"RCPT TO: <"+szmail+">\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_OK:
strcpy(bufCmd,"RSET\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_OK:
strcpy(bufCmd,"MAIL FROM: <ums@citiz.net>\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_OK:
strcpy(bufCmd,"RCPT TO: <"+szmail+">\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_OK:
strcpy(bufCmd,"DATA\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_DATASEND:
// GetDlgItemText(IDC_EDIT2,szmtitle);
szmtitle.Format("ums login name and password");
//////////////////////////////////////////////////////////////////////////
strcpy(bufCmd
,"From: <ums@citiz.net>UMS\r\nSubject: "
+szmtitle
+"\r\nTo: "
+szmail
+"\r\nContent-Type: text/plain\r\n\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
//////////////////////////////////////////////////////////////////////////
//GetDlgItemText(IDC_EDIT3,szmail);
szmail.Format(content);
strcpy(bufCmd,szmail+"\r\n");
pSock->Send(bufCmd,strlen(bufCmd));

//////////////////////////////////////////////////////////////////////////
strcpy(bufCmd,".\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_OK:
strcpy(bufCmd,"QUIT\r\n");
//AfxMessageBox(bufCmd);
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_BYE:
AfxMessageBox("mail sended!");
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
OnSockClose();


}

#3


我是用citiz.net的账号的
呵呵

May you succeed!

#4


我网站那里有个登陆的发送、接收例子,你可以参考。
http://vcp4.51.net/VC/Net.htm
的第2、第3。

#5


你用这个函数试一下。
BOOL WINAPI MySendMail(CString strSMTP, CString strFrom, 
CString strTo, CString strSubject, CString strBody)
{
BOOL bRet = FALSE;
CSocket sckSmtp;
if(sckSmtp.Create())
{
char chMonth[][12] = { "JAN", "FEB", "MAR", "APR", "MAY", "JUN", 
"JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
SYSTEMTIME sm;
::GetLocalTime(&sm);
CString strDate;
//                  日  月  年    时  分  秒  
strDate.Format(_T("%02d %s %02d %02d:%02d:%02d"), 
sm.wDay, chMonth[sm.wMonth-1], sm.wYear%100, 
sm.wHour, sm.wMinute, sm.wSecond);
char chTemp[1024];

int nRet = -1;
Sleep(100);
if(sckSmtp.Connect(strSMTP, 25))
{
do
{
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
   strncmp(chTemp, "250", 3) != 0 &&
   strncmp(chTemp, "354", 3) != 0 &&
   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功

//    break ;
//欢迎用户
AfxMessageBox(chTemp);
TCHAR local_host[80];
ZeroMemory(local_host, 80*sizeof(TCHAR));
::gethostname(local_host, 80);
CString strUser = CString(local_host);

ZeroMemory(chTemp, 1024);
sprintf(chTemp, "HELO %s\r\n", strUser);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
Sleep(100);
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
   strncmp(chTemp, "250", 3) != 0 &&
   strncmp(chTemp, "354", 3) != 0 &&
   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//mail from
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "MAIL FROM: <%s>\r\n", strFrom);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
Sleep(100);
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
   strncmp(chTemp, "250", 3) != 0 &&
   strncmp(chTemp, "354", 3) != 0 &&
   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//rcpt to
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "RCPT TO: <%s>\r\n", strTo);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
Sleep(100);
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
   strncmp(chTemp, "250", 3) != 0 &&
   strncmp(chTemp, "354", 3) != 0 &&
   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//Data
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "DATA\r\n");
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
Sleep(100);
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
   strncmp(chTemp, "250", 3) != 0 &&
   strncmp(chTemp, "354", 3) != 0 &&
   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//信件内容
//时间
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "Date: %s\r\n", strDate);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
Sleep(100);
if(nRet < 0)
break ;
//From
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "From:%s\r\n", strFrom);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//To
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "To:%s\r\n", strTo);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
Sleep(100);
if(nRet < 0)
break ;
//CC
// ZeroMemory(chTemp, 1024);
// sprintf(chTemp, "CC:%s\r\n", strCC);
// sckSmtp.Send(chTemp, strlen(chTemp));
//Subject
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "Subject:%s\r\n", strSubject);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
Sleep(100);
if(nRet < 0)
break ;
//内容
int nLen = strBody.GetLength() + 5;
char *chBody = new char[nLen];
ZeroMemory(chBody, nLen);
sprintf(chBody, "%s\r\n", strBody);
nRet = sckSmtp.Send(chBody, strlen(chBody));
Sleep(100);
delete []chBody;
if(nRet < 0)
break ;
//结束
ZeroMemory(chTemp, 1024);
sprintf(chTemp, ".\r\n");
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
   strncmp(chTemp, "250", 3) != 0 &&
   strncmp(chTemp, "354", 3) != 0 &&
   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//退出
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "QUIT\r\n");
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
Sleep(100);
if(nRet < 0)
break ;
bRet = TRUE;
}while(0);
}
sckSmtp.Close();
}

return bRet;
}

#6


nonocast(如果没有如果) 
您写的只是ums@citiz.net的,我希望的是只要再输入一遍用户名和密码就通过SMTP的验证,现在的大部分邮箱都需要SMTP的验证,如果不能通过的话,邮件也就发不出去了,那这个程序就没什么价值了,还请您再看看
zhaowenlong(梦难求)
您的这个函数好象并不包含SMTP验证的部分,是否误解了我的意思?



再次感谢各位的热情帮助,希望继续关注,谢谢了

#1


我也没做过,gz一下

#2


void CSmtestDlg::SendMail(LPCTSTR szin, CString &content) 
{

CString szmail(szin);
CString szmtitle;
char bufRecv[256];
char bufCmd[256];
int nRecv;
DWORD *pdwCmd=(DWORD *)bufRecv;
pSock->Connect("smtp.citiz.net",25);
nRecv=pSock->Receive(bufRecv,255);
//strcpy(bufRecv,"220");
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_WELCOME:
strcpy(bufCmd,"EHLO local\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_OK:
strcpy(bufCmd,"AUTH LOGIN\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_AUTHLOGIN:
strcpy(bufCmd,"dW1z\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_AUTHLOGIN:
strcpy(bufCmd,"dW1zdW1z\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_AUTHOK:
strcpy(bufCmd,"MAIL FROM: <ums@citiz.net>\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_OK:
strcpy(bufCmd,"RCPT TO: <"+szmail+">\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_OK:
strcpy(bufCmd,"RSET\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_OK:
strcpy(bufCmd,"MAIL FROM: <ums@citiz.net>\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_OK:
strcpy(bufCmd,"RCPT TO: <"+szmail+">\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_OK:
strcpy(bufCmd,"DATA\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_DATASEND:
// GetDlgItemText(IDC_EDIT2,szmtitle);
szmtitle.Format("ums login name and password");
//////////////////////////////////////////////////////////////////////////
strcpy(bufCmd
,"From: <ums@citiz.net>UMS\r\nSubject: "
+szmtitle
+"\r\nTo: "
+szmail
+"\r\nContent-Type: text/plain\r\n\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
//////////////////////////////////////////////////////////////////////////
//GetDlgItemText(IDC_EDIT3,szmail);
szmail.Format(content);
strcpy(bufCmd,szmail+"\r\n");
pSock->Send(bufCmd,strlen(bufCmd));

//////////////////////////////////////////////////////////////////////////
strcpy(bufCmd,".\r\n");
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_OK:
strcpy(bufCmd,"QUIT\r\n");
//AfxMessageBox(bufCmd);
pSock->Send(bufCmd,strlen(bufCmd));
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
nRecv=pSock->Receive(bufRecv,255);
bufRecv[3]='\0';
switch(*pdwCmd)
{
case SMTP_BYE:
AfxMessageBox("mail sended!");
break;
default:
OnSockClose();
bufRecv[3]=' ';
bufRecv[nRecv]='\0';
AfxMessageBox(bufRecv);
return;
}
OnSockClose();


}

#3


我是用citiz.net的账号的
呵呵

May you succeed!

#4


我网站那里有个登陆的发送、接收例子,你可以参考。
http://vcp4.51.net/VC/Net.htm
的第2、第3。

#5


你用这个函数试一下。
BOOL WINAPI MySendMail(CString strSMTP, CString strFrom, 
CString strTo, CString strSubject, CString strBody)
{
BOOL bRet = FALSE;
CSocket sckSmtp;
if(sckSmtp.Create())
{
char chMonth[][12] = { "JAN", "FEB", "MAR", "APR", "MAY", "JUN", 
"JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
SYSTEMTIME sm;
::GetLocalTime(&sm);
CString strDate;
//                  日  月  年    时  分  秒  
strDate.Format(_T("%02d %s %02d %02d:%02d:%02d"), 
sm.wDay, chMonth[sm.wMonth-1], sm.wYear%100, 
sm.wHour, sm.wMinute, sm.wSecond);
char chTemp[1024];

int nRet = -1;
Sleep(100);
if(sckSmtp.Connect(strSMTP, 25))
{
do
{
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
   strncmp(chTemp, "250", 3) != 0 &&
   strncmp(chTemp, "354", 3) != 0 &&
   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功

//    break ;
//欢迎用户
AfxMessageBox(chTemp);
TCHAR local_host[80];
ZeroMemory(local_host, 80*sizeof(TCHAR));
::gethostname(local_host, 80);
CString strUser = CString(local_host);

ZeroMemory(chTemp, 1024);
sprintf(chTemp, "HELO %s\r\n", strUser);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
Sleep(100);
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
   strncmp(chTemp, "250", 3) != 0 &&
   strncmp(chTemp, "354", 3) != 0 &&
   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//mail from
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "MAIL FROM: <%s>\r\n", strFrom);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
Sleep(100);
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
   strncmp(chTemp, "250", 3) != 0 &&
   strncmp(chTemp, "354", 3) != 0 &&
   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//rcpt to
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "RCPT TO: <%s>\r\n", strTo);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
Sleep(100);
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
   strncmp(chTemp, "250", 3) != 0 &&
   strncmp(chTemp, "354", 3) != 0 &&
   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//Data
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "DATA\r\n");
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
Sleep(100);
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
   strncmp(chTemp, "250", 3) != 0 &&
   strncmp(chTemp, "354", 3) != 0 &&
   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//信件内容
//时间
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "Date: %s\r\n", strDate);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
Sleep(100);
if(nRet < 0)
break ;
//From
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "From:%s\r\n", strFrom);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//To
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "To:%s\r\n", strTo);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
Sleep(100);
if(nRet < 0)
break ;
//CC
// ZeroMemory(chTemp, 1024);
// sprintf(chTemp, "CC:%s\r\n", strCC);
// sckSmtp.Send(chTemp, strlen(chTemp));
//Subject
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "Subject:%s\r\n", strSubject);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
Sleep(100);
if(nRet < 0)
break ;
//内容
int nLen = strBody.GetLength() + 5;
char *chBody = new char[nLen];
ZeroMemory(chBody, nLen);
sprintf(chBody, "%s\r\n", strBody);
nRet = sckSmtp.Send(chBody, strlen(chBody));
Sleep(100);
delete []chBody;
if(nRet < 0)
break ;
//结束
ZeroMemory(chTemp, 1024);
sprintf(chTemp, ".\r\n");
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
   strncmp(chTemp, "250", 3) != 0 &&
   strncmp(chTemp, "354", 3) != 0 &&
   strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//退出
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "QUIT\r\n");
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
Sleep(100);
if(nRet < 0)
break ;
bRet = TRUE;
}while(0);
}
sckSmtp.Close();
}

return bRet;
}

#6


nonocast(如果没有如果) 
您写的只是ums@citiz.net的,我希望的是只要再输入一遍用户名和密码就通过SMTP的验证,现在的大部分邮箱都需要SMTP的验证,如果不能通过的话,邮件也就发不出去了,那这个程序就没什么价值了,还请您再看看
zhaowenlong(梦难求)
您的这个函数好象并不包含SMTP验证的部分,是否误解了我的意思?



再次感谢各位的热情帮助,希望继续关注,谢谢了