关于MFC电子邮件的发送 求大神帮忙

zwt609671235 2016-06-04 08:08:18
求大家帮忙看下 我这个邮件传输的工程 为何编译通过 邮件却发送不出去呢

void CSendMailClientDlg::OnBnClickedSetup()
{
// TODO: 在此添加控件通知处理程序代码
CSetup dlg;

dlg.m_strServer = m_strSmtpSrvName ;
dlg.m_strPort = m_strPort ;
dlg.m_strUser = m_szUser;
dlg.m_strPwd = m_szPwd ;

if (dlg.DoModal()==IDOK)
{
m_strSmtpSrvName = dlg.m_strServer;
m_strPort = dlg.m_strPort;
sprintf(m_szUser,"%s",dlg.m_strUser);
sprintf(m_szPwd,"%s",dlg.m_strPwd);
}
}

void CSendMailClientDlg::OnBnClickedOk()
{
UpdateData(TRUE);

const int buflen = 256;
char buf[buflen];
int i,userlen,passlen;
//准备网络连接
WSADATA wsadata;
if (WSAStartup(MAKEWORD(2,2),&wsadata) != 0)
{
AfxMessageBox("WSAStartup Error!");
return;
}

//创建套接字
SOCKET sockid;
if ((sockid = socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET)
{
AfxMessageBox("Sockid Error!");
WSACleanup();
return;
}

//得到SMTP服务器IP
struct hostent *phostent = gethostbyname(m_strSmtpSrvName);
struct sockaddr_in addr;
CopyMemory(&addr.sin_addr.s_addr,phostent->h_addr_list[0],sizeof(addr.sin_addr.s_addr));

addr.sin_family = AF_INET;
addr.sin_port = htons(atoi(m_strPort));
ZeroMemory(&addr.sin_zero, 8);

//连接服务器
if (connect(sockid, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) == SOCKET_ERROR)
{
AfxMessageBox("connect() error !");
goto STOP;
}
if (Talk(sockid, "220", "HELO asdf"))
{
goto STOP;
}
if (Talk(sockid, "250", "AUTH LOGIN"))
{
goto STOP;
}
ZeroMemory(buf, buflen);
userlen = strlen(m_szUser);
passlen = strlen(m_szPwd);
for(i = 0; i < (userlen%3?userlen/3+1:userlen/3); i++)
{
Base64((unsigned char * )(m_szUser + i * 3),(unsigned char * )( buf + i * 4));
}
if (Talk(sockid, "334", buf))
{
goto STOP;
}
ZeroMemory(buf, buflen);
for(i = 0; i < (passlen%3?passlen/3+1:passlen/3); i++)
{
Base64((unsigned char *)(m_szPwd + i * 3),(unsigned char * ) (buf + i * 4));
}
if (Talk(sockid, "334", buf))
{
goto STOP;
}
ZeroMemory(buf, buflen);
wsprintf(buf, "MAIL FROM:<%s>", m_strFrom);
if (Talk(sockid, "235", buf))
{
goto STOP;
}
ZeroMemory(buf, buflen);
wsprintf(buf, "RCPT TO:<%s>", m_strTo);
if (Talk(sockid, "250", buf))
{
goto STOP;
}
if (Talk(sockid, "250", "DATA"))
{
goto STOP;
}
ZeroMemory(buf, buflen);
wsprintf(buf, "TO: %s\r\nFROM: %s\r\nSUBJECT: %s\r\n%s\r\n\r\n.",
m_strTo,m_strFrom,m_strSubject,m_strMsg);
if (Talk(sockid, "354", buf))
{
goto STOP;
}
if (Talk(sockid, "250", "QUIT"))
{
goto STOP;
}
if (Talk(sockid, "221", ""))
{
goto STOP;
}

STOP:
shutdown(sockid,SD_BOTH);
closesocket(sockid);
WSACleanup();
return;
}

int CSendMailClientDlg::Talk(SOCKET sockid, const char *OkCode, char *pSend)
{
const int buflen = 256;
char buf[buflen];
ZeroMemory(buf, buflen);
//接收返回信息
if (recv(sockid, buf, buflen, 0) == SOCKET_ERROR)
{
int i = GetLastError() ;
AfxMessageBox("recv() error !");
return 1;
}

//发送命令
if (lstrlen(pSend))
{
ZeroMemory(buf, buflen);
wsprintf(buf, "%s\r\n", pSend);

if (send(sockid, buf, lstrlen(buf), 0) == SOCKET_ERROR)
{
AfxMessageBox("send() error ");
return 1;
}
}
return 0;
}

void CSendMailClientDlg::Base64(unsigned char *chasc,unsigned char *chuue)
{
int i,k=2;
unsigned char t = 0;
for(i=0;i<3;i++)
{
*(chuue+i)=*(chasc+i)>>k;
*(chuue+i)|=t;
t=*(chasc+i)<<(8-k);
t>>=2;
k+=2;
}
*(chuue+3)=*(chasc+2)&63;
for(i=0;i<4;i++)
if((*(chuue+i)>=0)&&(*(chuue+i)<=25))
*(chuue+i)+=65;
else if((*(chuue+i)>=26)&&(*(chuue+i)<=51))
*(chuue+i)+=71;
else if((*(chuue+i)>=52)&&(*(chuue+i)<=61))
*(chuue+i)-=4;
else if(*(chuue+i)==62)
*(chuue+i)=43;
else if(*(chuue+i)==63)
*(chuue+i)=47;
}
...全文
2564 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
kakabulusi 2017-02-28
  • 打赏
  • 举报
回复
是不是想写个病毒窃取别人的信息?

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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