解决方案 »

  1.   

    // AuthSMTP.h: interface for the CAuthSMTP class.
    //
    //////////////////////////////////////////////////////////////////////#if !defined(AFX_AUTHSMTP_H__FC092A06_E5D1_4CDD_A92E_9DF621BD309A__INCLUDED_)
    #define AFX_AUTHSMTP_H__FC092A06_E5D1_4CDD_A92E_9DF621BD309A__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000class CAuthSMTP  
    {
    public:
    BOOL DisConnect();
    BOOL SendEmail(CString Subject,CString Body);
    BOOL FromTo(CString mailFrom,CString mailTo);
    BOOL Authent(CString mailUser,CString mailPwd);
    BOOL Connect(CString SMTPHost);
    CAuthSMTP();
    virtual ~CAuthSMTP();private:
    CSocket m_sock;
    public:
    CString m_info[10];
    int m_num;
    };#endif // !defined(AFX_AUTHSMTP_H__FC092A06_E5D1_4CDD_A92E_9DF621BD309A__INCLUDED_)// AuthSMTP.cpp: implementation of the CAuthSMTP class.
    //
    //////////////////////////////////////////////////////////////////////#include "stdafx.h"
    个人编写的一个认证smtp类#include "sendmail.h"
    #include "AuthSMTP.h"#include "base64.h"#ifdef _DEBUG
    #undef THIS_FILE
    static char THIS_FILE[]=__FILE__;
    #define new DEBUG_NEW
    #endif//////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////CAuthSMTP::CAuthSMTP()
    {
    m_sock.Create();
    m_num=0;
    }CAuthSMTP::~CAuthSMTP()
    {
        m_sock.Close();
    }BOOL CAuthSMTP::Connect(CString SMTPHost)
    {
    char buf [1000];
    for (int i=0;i < 512;i++)
    buf[i]='\0'; m_sock.Connect((LPCTSTR)SMTPHost,25);
    m_sock.Receive(buf, sizeof(buf));
        m_info[m_num++]=buf; CString strSend=_T("EHLO 163.com\r\n");
    for (i=0;i < 512;i++)
    buf[i]='\0';
    m_sock.Send((LPCTSTR)strSend,strSend.GetLength());
        m_sock.Receive(buf, sizeof(buf));
        m_info[m_num++]=buf;
        
    return TRUE;
    }BOOL CAuthSMTP::Authent(CString mailUser, CString mailPwd)
    {
    char buf [1000];
    for (int i=0;i < 512;i++)
    buf[i]='\0'; CString strSend=_T("AUTH LOGIN\r\n");
    m_sock.Send((LPCTSTR)strSend,strSend.GetLength());
    m_sock.Receive(buf, sizeof(buf));
        m_info[m_num++]=buf; CBase64 cb;
    CString  strAuth  = mailUser;  
    char  chTemp[1024]; 
    ZeroMemory(chTemp,  1024); 
    CString  strEncode  =  cb.Encode(strAuth.GetBuffer(0),  strAuth.GetLength()); 
    //strEncode就为加密后的密文 
    sprintf(chTemp,  "%s\r\n",  strEncode); 
    strAuth.ReleaseBuffer(); 
    strSend.Format(_T("%s\r\n"),strEncode);
    m_sock.Send((LPCTSTR)strSend,strSend.GetLength());
    m_sock.Receive(buf, sizeof(buf));
        m_info[m_num++]=buf; strAuth  = mailPwd; 
    ZeroMemory(chTemp,  1024); 
    strEncode  =  cb.Encode(strAuth.GetBuffer(0),  strAuth.GetLength()); 
    //strEncode就为加密后的密文 
    sprintf(chTemp,  "%s\r\n",  strEncode); 
    strAuth.ReleaseBuffer(); 
    strSend.Format(_T("%s\r\n"),strEncode);
    m_sock.Send((LPCTSTR)strSend,strSend.GetLength());
    m_sock.Receive(buf, sizeof(buf));
        m_info[m_num++]=buf;    return TRUE;
    }BOOL CAuthSMTP::FromTo(CString mailFrom, CString mailTo)
    {
    char buf [1000];
    for (int i=0;i < 512;i++)
    buf[i]='\0';
    CString strSend;
    strSend.Format(_T("MAIL FROM:<%s>\r\n"),mailFrom);
    m_sock.Send((LPCTSTR)strSend,strSend.GetLength());
    m_sock.Receive(buf, sizeof(buf));
        m_info[m_num++]=buf; for (i=0;i < 512;i++)
    buf[i]='\0';
    strSend.Format(_T("RCPT TO:<%s>\r\n"),mailTo);
    m_sock.Send((LPCTSTR)strSend,strSend.GetLength());
    m_sock.Receive(buf, sizeof(buf));
        m_info[m_num++]=buf; return TRUE;
    }BOOL CAuthSMTP::SendEmail(CString Subject,CString Body)
    {
    char buf [1000];
    for (int i=0;i < 512;i++)
    buf[i]='\0';
    CString strSend=_T("DATA\r\n");
    m_sock.Send((LPCTSTR)strSend,strSend.GetLength());
    m_sock.Receive(buf, sizeof(buf));
        m_info[m_num++]=buf; strSend.Format(_T("SUBJECT:<%s>\r\n"),Subject);
    m_sock.Send((LPCTSTR)strSend,strSend.GetLength()); strSend.Format(_T("<%s>\r\n"),Body);
    m_sock.Send((LPCTSTR)strSend,strSend.GetLength());    for (i=0;i < 512;i++)
    buf[i]='\0';
    strSend=_T(".\r\n");
    m_sock.Send((LPCTSTR)strSend,strSend.GetLength());
    m_sock.Receive(buf, sizeof(buf));
        m_info[m_num++]=buf; return TRUE;
    }BOOL CAuthSMTP::DisConnect()
    {
    char buf [1000];
    for (int i=0;i < 512;i++)
    buf[i]='\0';
    CString strSend=_T("QUIT \r\n");
    m_sock.Send((LPCTSTR)strSend,strSend.GetLength());
    m_sock.Receive(buf, sizeof(buf));
        m_info[m_num++]=buf; return TRUE;
    }