您的位置:首页 > 编程语言

最简单的邮件发送代码FreePoster

2008-01-28 09:23 288 查看
以下代码用来测试FreePoster,基本上都是最简单的,希望能给初学者参考一下;另外,测试代码十分简陋,错漏百出,希望熟悉SMTP的朋友给我指点一下。

// 与服务器建立连接
void CSMTPTesterDlg::OnBtnConnect()
{
UpdateData();

WSADATA wsd;
SOCKADDR_IN server;
if (0 != WSAStartup(0x0202, &wsd))
{
m_strStatus += _T("Failed to load winsock DLL./r/n");
UpdateData(FALSE);
return;
}
m_sockSMTP = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET == m_sockSMTP)
{
m_strStatus += _T("socket() failed./r/n");
UpdateData(FALSE);
return;
}
server.sin_family = AF_INET;
server.sin_port = htons(25);
m_strStatus += _T("About to connect to:");
m_strStatus += m_strSMTPServer;
UpdateData(FALSE);
server.sin_addr.s_addr = inet_addr(m_strSMTPServer);
if (SOCKET_ERROR == connect(m_sockSMTP, (PSOCKADDR)&server, sizeof(server)))
{
m_strStatus += _T("/r/nconnect() failed./r/n");
UpdateData(FALSE);
return;
}
m_strStatus += _T("/r/nConnection extablished./r/n");
char buf[1024];
int ret = recv(m_sockSMTP, buf, 1024, 0);
if (SOCKET_ERROR == ret)
{
m_strStatus += _T("Receiving failed./r/n");
UpdateData(FALSE);
return;
}
buf[ret] = '/0';
m_strStatus += buf;
UpdateData(FALSE);

}

// SMTP服务器需要验证,这里进行验证
void CSMTPTesterDlg::OnBtnLogin()
{
UpdateData();
CString strCmd = _T("ehlo 126.com/r/n");
m_strStatus += strCmd;
UpdateData(FALSE);
int ret = send(m_sockSMTP, strCmd, strCmd.GetLength(), 0);
if (SOCKET_ERROR == ret)
{
m_strStatus += _T("Sending helo failed./r/n");
UpdateData(FALSE);
}
char buf[1024];
ret = recv(m_sockSMTP, buf, 1024, 0);
if (SOCKET_ERROR == ret)
{
m_strStatus += _T("Receiving failed./r/n");
UpdateData(FALSE);
return;
}
buf[ret] = '/0';
m_strStatus += buf;
UpdateData(FALSE);
strCmd = _T("auth login/r/n");
m_strStatus += strCmd;
UpdateData(FALSE);

ret = send(m_sockSMTP, strCmd, strCmd.GetLength(), 0);
if (SOCKET_ERROR == ret)
{
m_strStatus += _T("Sending helo failed./r/n");
UpdateData(FALSE);
}

ret = recv(m_sockSMTP, buf, 1024, 0);
if (SOCKET_ERROR == ret)
{
m_strStatus += _T("Receiving failed./r/n");
UpdateData(FALSE);
return;
}
buf[ret] = '/0';
m_strStatus += buf;
UpdateData(FALSE);

char outbuf[1024];
unsigned nLen = 0;
encode64(m_strUserName, m_strUserName.GetLength(), outbuf, 1024, &nLen);
outbuf[nLen] = NULL;

strCmd.Format("%s/r/n", outbuf);
m_strStatus += strCmd;
UpdateData(FALSE);
ret = send(m_sockSMTP, strCmd, strCmd.GetLength(), 0);
if (SOCKET_ERROR == ret)
{
m_strStatus += _T("Sending helo failed./r/n");
UpdateData(FALSE);
}

ret = recv(m_sockSMTP, buf, 1024, 0);
if (SOCKET_ERROR == ret)
{
m_strStatus += _T("Receiving failed./r/n");
UpdateData(FALSE);
return;
}
buf[ret] = '/0';
m_strStatus += buf;
UpdateData(FALSE);

nLen = 0;
encode64(m_strPassword, m_strPassword.GetLength(), outbuf, 1024, &nLen);
outbuf[nLen] = NULL;
strCmd.Format("%s/r/n", outbuf);
m_strStatus += strCmd;
UpdateData(FALSE);

ret = send(m_sockSMTP, strCmd, strCmd.GetLength(), 0);
if (SOCKET_ERROR == ret)
{
m_strStatus += _T("Sending helo failed./r/n");
UpdateData(FALSE);
}

ret = recv(m_sockSMTP, buf, 1024, 0);
if (SOCKET_ERROR == ret)
{
m_strStatus += _T("Receiving failed./r/n");
UpdateData(FALSE);
return;
}
buf[ret] = '/0';
m_strStatus += buf;
UpdateData(FALSE);

}

void CSMTPTesterDlg::OnBtnSendMail()
{
UpdateData();
CString strCmd;
strCmd = "mail from:<admin@126.com>/r/n";
m_strStatus += strCmd;
UpdateData(FALSE);

int ret;

char buf[1024];
ret = send(m_sockSMTP, strCmd, strCmd.GetLength(), 0);
if (SOCKET_ERROR == ret)
{
m_strStatus += _T("Sending helo failed./r/n");
UpdateData(FALSE);
}

ret = recv(m_sockSMTP, buf, 1024, 0);
if (SOCKET_ERROR == ret)
{
m_strStatus += _T("Receiving failed./r/n");
UpdateData(FALSE);
return;
}
buf[ret] = '/0';
m_strStatus += buf;
UpdateData(FALSE);

///////////////////////////
strCmd = "rcpt to:<";
strCmd += m_strRecipients;
strCmd += ">/r/n";
m_strStatus += strCmd;
UpdateData(FALSE);

ret = send(m_sockSMTP, strCmd, strCmd.GetLength(), 0);
if (SOCKET_ERROR == ret)
{
m_strStatus += _T("Sending helo failed./r/n");
UpdateData(FALSE);
}

ret = recv(m_sockSMTP, buf, 1024, 0);
if (SOCKET_ERROR == ret)
{
m_strStatus += _T("Receiving failed./r/n");
UpdateData(FALSE);
return;
}
buf[ret] = '/0';
m_strStatus += buf;
UpdateData(FALSE);

strCmd = "data/r/n";
m_strStatus += strCmd;
UpdateData(FALSE);

ret = send(m_sockSMTP, strCmd, strCmd.GetLength(), 0);
if (SOCKET_ERROR == ret)
{
m_strStatus += _T("Sending helo failed./r/n");
UpdateData(FALSE);
}

ret = recv(m_sockSMTP, buf, 1024, 0);
if (SOCKET_ERROR == ret)
{
m_strStatus += _T("Receiving failed./r/n");
UpdateData(FALSE);
return;
}
buf[ret] = '/0';
m_strStatus += buf;
UpdateData(FALSE);

strCmd = "From: FreeEIM <admin@126.com>/r/n";
strCmd += "To:" + m_strRecipients + "/r/n"/
"Date: Mon, 25 Oct 2008 14:24:27 +0800/r/n"/
"Subject: ";
strCmd += m_strSubject + "/r/n/r/n";
strCmd += m_strContents;
strCmd += "/r/n./r/n";
m_strStatus += strCmd;

UpdateData(FALSE);

ret = send(m_sockSMTP, strCmd, strCmd.GetLength(), 0);
if (SOCKET_ERROR == ret)
{
m_strStatus += _T("Sending helo failed./r/n");
UpdateData(FALSE);
}
ret = recv(m_sockSMTP, buf, 1024, 0);
if (SOCKET_ERROR == ret)
{
m_strStatus += _T("Receiving failed./r/n");
UpdateData(FALSE);
return;
}
buf[ret] = '/0';
m_strStatus += buf;
UpdateData(FALSE);

strCmd = "quit/r/n";
m_strStatus += strCmd;
UpdateData(FALSE);

ret = send(m_sockSMTP, strCmd, strCmd.GetLength(), 0);
if (SOCKET_ERROR == ret)
{
m_strStatus += _T("Sending helo failed./r/n");
UpdateData(FALSE);
}

ret = recv(m_sockSMTP, buf, 1024, 0);
if (SOCKET_ERROR == ret)
{
m_strStatus += _T("Receiving failed./r/n");
UpdateData(FALSE);
return;
}
buf[ret] = '/0';
m_strStatus += buf;
UpdateData(FALSE);
}

// 连发10次
void CSMTPTesterDlg::OnButton4()
{
for (int i=0; i<10; i++)
{
OnBtnConnect();
OnBtnLogin();
OnBtnSendMail();
Sleep(2000);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: