最简单的邮件发送代码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);
}
}
// 与服务器建立连接
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);
}
}
相关文章推荐
- 发送邮件常见出错代码及简单解决方法
- java实现简单邮件发送代码
- Java Mail发送简单邮件,完整代码
- 简单的发送邮件代码
- Delphi通过IdSmtp发送邮件的简单代码
- Python之简单的SMTP发送邮件详细教程附代码
- Python编写发送简单html邮件代码
- 简单SAP ABAP发送邮件示例代码
- Java HtmlEmail 邮件发送的简单实现代码
- Spring代码实例系列-10:通过Spring Mail发送简单邮件、附件和HTML邮件
- asp.net简单发送邮件代码
- java邮件发送简单实现代码
- 简单的发送邮件代码
- Python之简单的SMTP发送邮件详细教程附代码
- 基于JavaMail的Java实现简单邮件发送功能
- 超级简单的发送邮件程序
- 一个简单的自动发送邮件系统(一)
- ActionMailer发送邮件最简单实例,163邮箱
- Java简单邮件发送
- 使用java发送邮件代码样例