OSDN Git Service

Send Attachment successfully
authorFrank Li <lznuaa@gmail.com>
Fri, 17 Apr 2009 09:30:21 +0000 (17:30 +0800)
committerFrank Li <lznuaa@gmail.com>
Fri, 17 Apr 2009 09:30:21 +0000 (17:30 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/TortoiseProc/Patch.cpp
src/Utils/HwSMTP.cpp
src/Utils/HwSMTP.h

index 37776b7..7bebda9 100644 (file)
@@ -136,6 +136,7 @@ int CPatch::Parser(CString &pathfile)
 \r
        m_Body.resize(PatchFile.GetLength() - PatchFile.GetPosition());\r
        PatchFile.Read(&m_Body.at(0),PatchFile.GetLength() - PatchFile.GetPosition());\r
+       m_Body.push_back(0);\r
 \r
        PatchFile.Close();\r
 \r
index fe32da3..c628191 100644 (file)
@@ -89,7 +89,7 @@ CHwSMTP::CHwSMTP () :
        m_csMIMEContentType = _T( "multipart/mixed");\r
        m_csPartBoundary = _T( "WC_MAIL_PaRt_BoUnDaRy_05151998" );\r
        m_csNoMIMEText = _T( "This is a multi-part message in MIME format." );\r
-//     m_csCharSet = _T("\r\n\tcharset=\"iso-8859-1\"\r\n");\r
+       //m_csCharSet = _T("\r\n\tcharset=\"iso-8859-1\"\r\n");\r
 }\r
 \r
 CHwSMTP::~CHwSMTP()\r
@@ -232,7 +232,7 @@ BOOL CHwSMTP::SendBuffer(char *buff,int size)
        return TRUE;\r
 }\r
 // ÀûÓÃsocket·¢ËÍÊý¾Ý£¬Êý¾Ý³¤¶È²»Äܳ¬¹ý10M\r
-BOOL CHwSMTP::Send(LPCTSTR lpszData, ... )\r
+BOOL CHwSMTP::Send(CString &str )\r
 {\r
        if ( !m_bConnected )\r
        {\r
@@ -240,34 +240,8 @@ BOOL CHwSMTP::Send(LPCTSTR lpszData, ... )
                return FALSE;\r
        }\r
 \r
-       TCHAR *buf = NULL;\r
-       // Ñ­»·¸ñʽ»¯×Ö·û´®£¬Èç¹û»º³å²»¹»Ôò½«»º³å¼Ó´óÈ»ºóÖØÊÔÒÔ±£Ö¤»º³å¹»ÓÃͬʱÓÖ²»ÀË·Ñ\r
-       for ( int nBufCount = 1024; nBufCount<10*1024*1024; nBufCount += 1024 )\r
-       {\r
-               buf = new TCHAR[nBufCount];\r
-               if ( !buf )\r
-               {\r
-                       ::AfxThrowMemoryException ();\r
-                       return FALSE;\r
-               }\r
-               memset ( buf, 0, nBufCount*sizeof(TCHAR) );\r
-\r
-               va_list  va;\r
-               va_start (va, lpszData);\r
-               int nLen = _vsnprintf_hw ((TCHAR*)buf, nBufCount-sizeof(TCHAR), lpszData, va);\r
-               va_end(va);\r
-               if ( nLen <= (int)(nBufCount-sizeof(TCHAR)) )\r
-                       break;\r
-               delete[] buf; buf = NULL;\r
-       }\r
-       if ( !buf )\r
-       {\r
-               m_csLastError.Format ( _T("Memory too small or data too big.") );\r
-               return FALSE;\r
-       }\r
-\r
-       CMultiByteString cbsData ( buf );\r
-       delete[] buf; buf = NULL;\r
+       CMultiByteString cbsData ( str );\r
+       \r
        TRACE ( _T("Send : %s\r\n"), cbsData.GetBuffer() );\r
        if ( m_SendSock.Send ( cbsData.GetBuffer(), cbsData.GetLength() ) != cbsData.GetLength() )\r
        {\r
@@ -285,7 +259,9 @@ BOOL CHwSMTP::SendEmail()
        gethostname ( (char*)szLocalHostName, sizeof(szLocalHostName) );\r
 \r
        // hello£¬ÎÕÊÖ\r
-       if ( !Send ( _T("HELO %s\r\n"), GetCompatibleString(szLocalHostName,FALSE) ) )\r
+       CString str;\r
+       str.Format(_T("HELO %s\r\n"), GetCompatibleString(szLocalHostName,FALSE));\r
+       if ( !Send (  str ))\r
        {\r
                return FALSE;\r
        }\r
@@ -319,13 +295,13 @@ BOOL CHwSMTP::SendEmail()
                return FALSE;\r
        }\r
        // ½áÊøÓʼþÕýÎÄ\r
-       if ( !Send ( _T(".\r\n") ) ) return FALSE;\r
+       if ( !Send ( CString(_T(".\r\n") ) ) ) return FALSE;\r
        if ( !GetResponse ( _T("250") ) )\r
                return FALSE;\r
 \r
        // Í˳ö·¢ËÍ\r
        if ( HANDLE_IS_VALID(m_SendSock.m_hSocket) )\r
-               Send ( _T("QUIT\r\n") );\r
+               Send ( CString(_T("QUIT\r\n")) );\r
        m_bConnected = FALSE;\r
 \r
        return bRet;\r
@@ -334,7 +310,7 @@ BOOL CHwSMTP::SendEmail()
 BOOL CHwSMTP::auth()\r
 {\r
        int nResponseCode = 0;\r
-       if ( !Send ( _T("auth login\r\n") ) ) return FALSE;\r
+       if ( !Send ( CString(_T("auth login\r\n")) ) ) return FALSE;\r
        if ( !GetResponse ( _T("334"), &nResponseCode ) ) return FALSE;\r
        if ( nResponseCode != 334 )     // ²»ÐèÒªÑéÖ¤Óû§ÃûºÍÃÜÂë\r
                return TRUE;\r
@@ -344,14 +320,21 @@ BOOL CHwSMTP::auth()
        CString csBase64_UserName = GetCompatibleString ( Base64Encode.Encode ( cbsUserName.GetBuffer(), cbsUserName.GetLength() ).GetBuffer(0), FALSE );\r
        CString csBase64_Passwd = GetCompatibleString ( Base64Encode.Encode ( cbsPasswd.GetBuffer(), cbsPasswd.GetLength() ).GetBuffer(0), FALSE );\r
 \r
-       if ( !Send ( _T("%s\r\n"), csBase64_UserName ) ) return FALSE;\r
+       CString str;\r
+       str.Format( _T("%s\r\n"), csBase64_UserName );\r
+       if ( !Send ( str ) ) \r
+               return FALSE;\r
+\r
        if ( !GetResponse ( _T("334") ) )\r
        {\r
                m_csLastError.Format ( _T("Authentication UserName failed") );\r
                return FALSE;\r
        }\r
+       \r
+       str.Format(_T("%s\r\n"), csBase64_Passwd );\r
+       if ( !Send ( str ) ) \r
+               return FALSE;\r
 \r
-       if ( !Send ( _T("%s\r\n"), csBase64_Passwd ) ) return FALSE;\r
        if ( !GetResponse ( _T("235") ) )\r
        {\r
                m_csLastError.Format ( _T("Authentication Password failed") );\r
@@ -363,18 +346,24 @@ BOOL CHwSMTP::auth()
 \r
 BOOL CHwSMTP::SendHead()\r
 {\r
-       if ( !Send ( _T("MAIL From: <%s>\r\n"), m_csAddrFrom ) ) return FALSE;\r
+       CString str;\r
+       str.Format( _T("MAIL From: <%s>\r\n"), m_csAddrFrom );\r
+       if ( !Send ( str  ) ) return FALSE;\r
+\r
        if ( !GetResponse ( _T("250") ) ) return FALSE;\r
-       if ( !Send ( _T("RCPT TO: <%s>\r\n"), m_csAddrTo ) ) return FALSE;\r
+       \r
+       str.Format(_T("RCPT TO: <%s>\r\n"), m_csAddrTo );\r
+       if ( !Send ( str ) ) return FALSE;\r
        if ( !GetResponse ( _T("250") ) ) return FALSE;\r
 \r
        for ( int i=0; i<m_StrAryCC.GetSize(); i++ )\r
        {\r
-               if ( !Send ( _T("RCPT TO: <%s>\r\n"), m_StrAryCC.GetAt(i) ) ) return FALSE;\r
+               str.Format(_T("RCPT TO: <%s>\r\n"), m_StrAryCC.GetAt(i)  );\r
+               if ( !Send ( str ) ) return FALSE;\r
                if ( !GetResponse ( _T("250") ) ) return FALSE;\r
        }\r
-       if ( !Send ( _T("DATA\r\n") ) ) return FALSE;\r
-       if ( !GetResponse ( _T("354") ) ) return FALSE; \r
+       if ( !Send ( CString(_T("DATA\r\n") ) ) ) return FALSE;\r
+       if ( !GetResponse ( CString(_T("354") )) ) return FALSE;        \r
 \r
        return TRUE;\r
 }\r
@@ -391,7 +380,7 @@ BOOL CHwSMTP::SendSubject()
        csSubject += _T("\r\n");\r
        csSubject += FormatString ( _T("From: %s\r\nTo: %s\r\n"), m_csSenderName, m_csReceiverName );\r
        csSubject += FormatString ( _T("Subject: %s\r\n"), m_csSubject );\r
-       csSubject += FormatString ( _T("X-Mailer: chrys\r\nMIME-Version: 1.0\r\nContent-Type: %s; %s boundary=%s\r\n\r\n") , \r
+       csSubject += FormatString ( _T("X-Mailer: TortoiseGit\r\nMIME-Version: 1.0\r\nContent-Type: %s; %s boundary=%s\r\n\r\n") , \r
                m_csMIMEContentType, m_csCharSet, m_csPartBoundary );\r
 \r
        return Send ( csSubject );\r
@@ -414,14 +403,9 @@ BOOL CHwSMTP::SendBody()
                csBody += csTemp;\r
        }\r
 \r
-       csTemp.Format ( _T("%s\r\n"), m_csBody );\r
-       csBody += csTemp;\r
-\r
-       if ( m_StrAryAttach.GetSize() > 0 )\r
-       {\r
-               csTemp.Format ( _T("--%s\r\n"), m_csPartBoundary );\r
-               csBody += csTemp;\r
-       }\r
+       //csTemp.Format ( _T("%s\r\n"), m_csBody );\r
+       csBody += m_csBody;\r
+       csBody += _T("\r\n");\r
 \r
        return Send ( csBody );\r
 }\r
@@ -449,6 +433,9 @@ BOOL CHwSMTP::SendOnAttach(LPCTSTR lpszFileName)
        CString csShortFileName = csTemp.GetBuffer(0) + csTemp.ReverseFind ( '\\' );\r
        csShortFileName.TrimLeft ( _T("\\") );\r
 \r
+       csTemp.Format ( _T("--%s\r\n"), m_csPartBoundary );\r
+       csAttach += csTemp;\r
+\r
        csTemp.Format ( _T("Content-Type: application/octet-stream; file=%s\r\n"), csShortFileName );\r
        csAttach += csTemp;\r
 \r
@@ -499,13 +486,11 @@ BOOL CHwSMTP::SendOnAttach(LPCTSTR lpszFileName)
        if(!SendBuffer( filedata.GetBuffer() ))\r
                return FALSE;\r
 \r
-       csAttach.Empty();\r
-       csTemp.Format ( _T("--%s\r\n"), m_csPartBoundary );\r
-       csAttach += csTemp;\r
 \r
        delete[] pBuf;\r
        \r
-       return Send ( csAttach );\r
+       return TRUE;\r
+       //return Send ( csAttach );\r
 }\r
 \r
 CString CHwSMTP::GetLastErrorText()\r
index 79db3a0..a3e1ea1 100644 (file)
@@ -76,7 +76,7 @@ private:
        BOOL SendHead();\r
        BOOL auth();\r
        BOOL SendEmail();\r
-       BOOL Send ( LPCTSTR lpszData, ... );\r
+       BOOL Send ( CString &data );\r
        BOOL SendBuffer(char *buffer,int size=-1);\r
        BOOL GetResponse( LPCTSTR lpszVerifyCode, int *pnCode=NULL );\r
        BOOL m_bConnected;\r