怎么实现呀?
我查书上说 用smtp协议发送邮件用pop协议接收邮件,用socket套接字,链接服务器的地址,比如说host=::gethostbyname(set.m_severadd.GetBuffer(1)); //从服务器名获取主机地址
addr.sin_addr.S_un.S_addr=inet_addr(host->h_addr_list[0]);
我输入的是 smtp.163.com但是得不到163的邮件服务器的ip地址,我直接改为smtp.163.com的ip地址时 成功连接了 邮件服务器。这是怎么回事?还有就是成功连接到服务器端后,单击发送按钮还是不能发送邮件,下面是发送按钮的函数
void CMyDlg::OnSendmail()
{
char buf[4];
CString data="Data: Tue,04 Feb 2009 21:18:03+0800\r\n";
CString sender="MAIL FROM:";
CString recver="RCPT TO:";
CString subject="Subject:";
CString s2,r,s1,mailtext;
GetDlgItem(IDC_SENDER)->GetWindowText(s2);
GetDlgItem(IDC_SUBJECT)->GetWindowText(s1);
GetDlgItem(IDC_RECVER)->GetWindowText(r);
GetDlgItem(IDC_MAILTEXT)->GetWindowText(mailtext);
sender+=s2;
recver+=r;
subject+=s1; CString sendmail;
sendmail+="HELO";
sendmail+=sender;
sendmail+=recver;
sendmail+="DATA\r\n";
sendmail+=subject;
sendmail+=mailtext;
sendmail+="QUIT\r\n";
sendmail+="\0";
send(s,sendmail,sizeof(sendmail),0);
recv(s,buf,4,0);
if(buf!=NULL)
{
if(atoi(buf)==250)
{
::SendMessage(statu,SB_SETTEXT,0,(long)"邮件发送成功");
}
else
{
::SendMessage(statu,SB_SETTEXT,0,(long)"邮件发送失败");
} }
else
{
::SendMessage(statu,SB_SETTEXT,0,(long)"邮件正在发送");
}
}请各路神仙给看看,小弟不胜感激
我查书上说 用smtp协议发送邮件用pop协议接收邮件,用socket套接字,链接服务器的地址,比如说host=::gethostbyname(set.m_severadd.GetBuffer(1)); //从服务器名获取主机地址
addr.sin_addr.S_un.S_addr=inet_addr(host->h_addr_list[0]);
我输入的是 smtp.163.com但是得不到163的邮件服务器的ip地址,我直接改为smtp.163.com的ip地址时 成功连接了 邮件服务器。这是怎么回事?还有就是成功连接到服务器端后,单击发送按钮还是不能发送邮件,下面是发送按钮的函数
void CMyDlg::OnSendmail()
{
char buf[4];
CString data="Data: Tue,04 Feb 2009 21:18:03+0800\r\n";
CString sender="MAIL FROM:";
CString recver="RCPT TO:";
CString subject="Subject:";
CString s2,r,s1,mailtext;
GetDlgItem(IDC_SENDER)->GetWindowText(s2);
GetDlgItem(IDC_SUBJECT)->GetWindowText(s1);
GetDlgItem(IDC_RECVER)->GetWindowText(r);
GetDlgItem(IDC_MAILTEXT)->GetWindowText(mailtext);
sender+=s2;
recver+=r;
subject+=s1; CString sendmail;
sendmail+="HELO";
sendmail+=sender;
sendmail+=recver;
sendmail+="DATA\r\n";
sendmail+=subject;
sendmail+=mailtext;
sendmail+="QUIT\r\n";
sendmail+="\0";
send(s,sendmail,sizeof(sendmail),0);
recv(s,buf,4,0);
if(buf!=NULL)
{
if(atoi(buf)==250)
{
::SendMessage(statu,SB_SETTEXT,0,(long)"邮件发送成功");
}
else
{
::SendMessage(statu,SB_SETTEXT,0,(long)"邮件发送失败");
} }
else
{
::SendMessage(statu,SB_SETTEXT,0,(long)"邮件正在发送");
}
}请各路神仙给看看,小弟不胜感激
解决方案 »
- 情人节快乐!
- 如何让CStatic控件能够调整高度到刚刚能容纳N行文字?
- 问一个及其简单的问题,CMD命令中,如何重复上一次输入的命令,还有makefile怎么用啊
- 以何将一条RTSP连接的地址使用C++下载下来
- 在命令行 netstat -n -a ,显示内容有 TIME_WAIT ,是什么意思?
- 如何设定CEdit中插入点的位置,请大家帮忙
- 切分窗口如何不出现分隔条,且不能改变大小?
- 100分 :-)
- 如何更改Ethernet头的源MAC呢?
- 请问在学C++时如何做好学习笔记?
- VC++的一个小问题,天天在线等
- 在MainFrm.cpp里,用create()创建串口通信控件,怎么每次重启电脑后,都需要手动注册一下串口通信控件才可以使用?
send() 函数做了什么?
(2) 不要依赖163的smtp,为了防止垃圾邮件,现在的商业邮件商基本都不支持smtp,就是支持也需要证书等复杂机制,不是你这么简陋的socket层的程序能做到的。
这个为什么得到的是Buffer(1) 而不是0呢?你吧代码贴全了
发送命令依次是
HELO
AUTHLOGIN
MAIL FROM:
RCPT TO:
DATA你少了 AUTHLOGIN这个环节 都没有登录当然无法发送了
而且每发送一个命令 需要读取缓冲区 判断是否成功
你去wikipedia上面找个 spec看看吧