给你贴一部分看看,完整的可以给我来信: [email protected]
socket.Create();
if (socket.Connect("your_server_ip", 25))
{
CSocketFile file(&socket);
CArchive arIn(&file, CArchive::load | CArchive::bNoFlushOnDelete);
CArchive arOut(&file, CArchive::store | CArchive::bNoFlushOnDelete); while (TRUE)
{
// SMTP server ready
arIn.ReadString(strResponse);
if ("220" != strResponse.Left(3)) break; // HELP command
//arOut.WriteString("HELP\r\n"); arOut.Flush();
//arIn.ReadString(strResponse); // HELO command
// str.Format("HELO %s\r\n", (LPCSTR)pDocument->m_strEMail.Mid
// (pDocument->m_strEMail.Find('@') + 1));
CString strTemp;
gethostname(strTemp.GetBuffer(256), 256);
strTemp.ReleaseBuffer();
str.Format("HELO %s\r\n", (LPCSTR)strTemp); arOut.WriteString(str); arOut.Flush();
arIn.ReadString(strResponse);
if ("250" != strResponse.Left(3)) break; // MAIL FROM command
str.Format("MAIL FROM:<%s>\r\n", (LPCSTR)(LPCSTR)pDocument->m_strEMail);
arOut.WriteString(str); arOut.Flush();
arIn.ReadString(strResponse);
if ("250" != strResponse.Left(3)) break; int nLength, n;
LPTSTR lp;
CString strBuffer; nLineCount = pView->GetEditCtrl().GetLineCount();
for (n = 0; n < nLineCount; ++ n)
{
nLength = pView->GetEditCtrl().LineLength(n);
lp = strBuffer.GetBuffer(nLength + 1);
pView->GetEditCtrl().GetLine(n, lp);
if (0 == strnicmp(lp, "To: ", 4))
{
lp[nLength] = 0;
str = &lp[4];
break;
}
} // RCPT TO command
str = "RCPT TO:<" + str + ">\r\n";
arOut.WriteString(str); arOut.Flush();
arIn.ReadString(strResponse);
strResponse = strResponse.Left(3);
if (("250" != strResponse) && ("251" != strResponse)) break; // DATA command
arOut.WriteString("DATA\r\n"); arOut.Flush();
arIn.ReadString(strResponse);
strResponse = strResponse.Left(3);
if (("250" != strResponse) && ("354" != strResponse))break; // Start mail input: end with .<CRLF>
for (n = 0; n < nLineCount; ++ n)
{
nLength = pView->GetEditCtrl().LineLength(
pView->GetEditCtrl().LineIndex(n));
lp = strBuffer.GetBuffer(nLength + 2);
nLength = pView->GetEditCtrl().GetLine(n, lp, nLength);
lp[nLength] = 0;
strBuffer.ReleaseBuffer(); // . -> ..
// .. -> ...
if ((!strBuffer.IsEmpty()) && ('.' == strBuffer[0]))
strBuffer = '.' + strBuffer; str = strBuffer + "\r\n";
arOut.WriteString(str);
}
arOut.WriteString(".\r\n"); arOut.Flush();
arIn.ReadString(strResponse);
if ("250" != strResponse.Left(3)) break; // QUIT command
arOut.WriteString("QUIT\r\n"); arOut.Flush();
arIn.ReadString(strResponse); return;
}