最简单的邮件发送代码FreePoster

以下代码用来测试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);
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值