请教发送邮件的问题!!

vampireal 2003-09-18 04:05:50
我做了个发送邮件的小程序,通过SMTP来发送,但现在的很多邮箱,比如,sina,sohu,163的SMTP都需要到服务器上验证,否则无法发送,请问那个验证的怎么做啊??望各位大虾指教!
...全文
56 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一下
《收发电子邮件》教学设计范文   《收发电子邮件》教学设计1 一、教学内容分析   《收、发电子邮件》是广州市信息技术教科书小学第二册第二章第四节课内容,根据我校学生和教材实际进行了教材的重组。本课是在学生已经学习了上网冲浪的根本技巧和申请电子邮件根底知识理论的根底上安排的新授课。   内容丰富,灵活有趣,实用性很强,既可培养学生学习兴趣,又可帮助学生进一步学会借助信息技术手段解决实际生活问题,提高学生综合应用能力,培养学生在知识探索中发现问题、分析问题、解决问题的能力。培养学生创新精神,使学生在学习过程中形成一定的信息素养和使用信息技术的伦理道德。 重点:   如何编写、发送电子邮件。 难点:   如何充分调动学生主动参与性。   课型:新授课。 二、教学对象分析   目前,小学生都耳闻目睹了因特网在社会广泛应用的事实,少数学生在家庭已具备了上网的条件,会上网浏览和玩游戏。但大多数学生仍没有使用过电子邮件,不明确电子邮件在实际生活中的作用,缺乏应用的根底知识,他们都渴望学习这方面的知识和技能。   通过本课的学习,让学生掌握收、发电子邮件的根本操作,把电子邮件应用到实际生活中。培养学生遵守使用电子邮件的道德标准。 三、教学目标   1、知识与技能   让学生通过积极自主探索,学会收、发电子邮件的根本操作。   2、过程与方法   通过收、发邮件的实践活动,让学生掌握学会自主或借助帮助信息,协同大胆探索知识的方法。 《收发电子邮件》教学设计全文共6页,当前为第1页。  3、情感态度与价值观 《收发电子邮件》教学设计全文共6页,当前为第1页。 〔1〕让学生养成遵守网络道德标准的良好习惯,负责任地使用因特网。 〔2〕培养学生学习、使用因特网的兴趣和意识。   4、开展目标: 〔1〕通过收贺卡演示,激发学生学习兴趣,为下一节使用"附件"发、收电子邮件的操作铺垫。 〔2〕培养学生使用电子邮件与他人沟通,获取、交流信息。 四、教学理念和教学方法   遵循"教为主导、学为主体、练为主线"的教育思想,结合本节课教学内容具备实时性,开放性等特点,采用了基于网络环境下"任务驱动,强化实践"的教学模式,充分利用多媒体电子教室控制系统屏幕播送功能实时演示、讲述。   在教学过程中要始终重视对学生进行信息平安与道德启蒙教育,从小培养学生的科学意识和信息意识。 五、教学媒体   多媒体教学系统、计算机网络、自制课件、相关教具。 六、教学过程   教学内容教师活动学生活动设计意图 一〕复习旧知识。   请看屏幕〔出示动画〕。谁能说出电子邮件有什么优点?学生答复。〔快速传递、价格低廉、书写简单、发送方便〕给合生活实际的需求,让学生对电子邮件有清晰的认识,为下面引出本节课题作铺垫,让学生产生激情去体会电子邮件奇特的功能。 二〕引探新知。   提示学生:如果要发邮件给对方,必须要经过对方同意才能发,如果乱发邮件是一种不道德、不守网络平安的行为。   如果没有把握的可以和同学一起发。答:想。   学生互动探索新知〔会发的同学可以当小老师教一下不懂的同学〕。培养学生良好的网络道德习惯和信息技术素养。从低层次探索入手,充分调动学生积极自主探究新知识。 三〕表达过程,解决问题。 《收发电子邮件》教学设计全文共6页,当前为第2页。  把学生出现的问题列出黑板。 《收发电子邮件》教学设计全文共6页,当前为第2页。   让其他学生帮助出问题的学生解决存在的问题〔解决方法可查看书本68页内容或请教同学、请教现场老师和查看帮助信息〕。   抽问学生尝试结果,把成功操作的方法列出黑板。说出操作过程中存在的问题。   相互之间协作解决问题。   把成功的过程说说。注重让学生自主探索,主动地构建知识结构。以学生为主体,凸现分层教学。让他们展示自己的新发现,新成果,体验成功的喜悦。学会自我鼓励,同时也学会与他人合作学习,营造一个相互学习,相互得益的气氛,调动每一个学生的积极性。 四〕强化操作,表达成功感。   以小组形式互发一封问候邮件,但发之前要经过对方同意才可以。学生互相发邮件操作。本课的重点就是发送电子邮件,采用不同形式强化操作,使学生在轻松活泼的气氛中稳固所学知识,这样再次掀起学习的高潮,表达梯度教学。 五〕学习收邮件。   抽查学生完成情况。   问:你怎样知道你成功了?   让学生说明。   你能告诉老师你是怎样收信的?   答:   1、电脑提示"邮件已成功发出!"   2、对方收到我的信。   说明收信方法、过程。通过实操,学生在不知不觉的情况下自主内化掌握收邮件的方法,使学生事半功倍地获取知识。 六〕小结。   让个别学生把收、发邮件的过程和要注意的问题简述一下,稳固知识内容。简述收、发电子邮件过程。及时稳固形成概念,深化操作方法。 七〕稳固练习。   2、元旦节将到

16,551

社区成员

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

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

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