请教发送邮件的问题!!

vampireal 2003-09-18 04:05:50
我做了个发送邮件的小程序,通过SMTP来发送,但现在的很多邮箱,比如,sina,sohu,163的SMTP都需要到服务器上验证,否则无法发送,请问那个验证的怎么做啊??望各位大虾指教!
...全文
59 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
vampireal 2003-09-18
  • 打赏
  • 举报
回复
nonocast(如果没有如果)
您写的只是ums@citiz.net的,我希望的是只要再输入一遍用户名和密码就通过SMTP的验证,现在的大部分邮箱都需要SMTP的验证,如果不能通过的话,邮件也就发不出去了,那这个程序就没什么价值了,还请您再看看
zhaowenlong(梦难求)
您的这个函数好象并不包含SMTP验证的部分,是否误解了我的意思?



再次感谢各位的热情帮助,希望继续关注,谢谢了
zhaowenlong 2003-09-18
  • 打赏
  • 举报
回复
你用这个函数试一下。
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;
}
Richuen22 2003-09-18
  • 打赏
  • 举报
回复
我网站那里有个登陆的发送、接收例子,你可以参考。
http://vcp4.51.net/VC/Net.htm
的第2、第3。

nonocast 2003-09-18
  • 打赏
  • 举报
回复
我是用citiz.net的账号的
呵呵

May you succeed!
nonocast 2003-09-18
  • 打赏
  • 举报
回复
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();


}
microyzy 2003-09-18
  • 打赏
  • 举报
回复
我也没做过,gz一下

16,551

社区成员

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

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

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