OSDN Git Service

Send mail: Combine to one email work.
authorFrank Li <lznuaa@gmail.com>
Fri, 17 Apr 2009 15:53:21 +0000 (23:53 +0800)
committerFrank Li <lznuaa@gmail.com>
Fri, 17 Apr 2009 15:53:21 +0000 (23:53 +0800)
best regards
Frank Li

src/TortoiseProc/Commands/SendMailCommand.cpp
src/TortoiseProc/Patch.cpp
src/TortoiseProc/Patch.h
src/TortoiseProc/SVNProgressDlg.cpp
src/TortoiseProc/SVNProgressDlg.h

index baeb3f4..e7d7300 100644 (file)
@@ -34,7 +34,7 @@ bool SendMailCommand::Execute()
                if(dlg.m_bCombine)\r
                        flags |= SENDMAIL_COMBINED;\r
 \r
-               progDlg.SetSendMailOption(dlg.m_To,dlg.m_CC,flags);\r
+               progDlg.SetSendMailOption(dlg.m_To,dlg.m_CC,dlg.m_Subject,flags);\r
                \r
                progDlg.DoModal();              \r
 \r
index 70d6ae5..d479e41 100644 (file)
@@ -91,6 +91,42 @@ int CPatch::Send(CString &pathfile,CString &TO,CString &CC,bool bAttachment)
 \r
 \r
 }\r
+int CPatch::Send(CTGitPathList &list,CString &To,CString &CC, CString &subject,bool bAttachment,CString *errortext)\r
+{\r
+       CStringArray attachments;\r
+       CString body;\r
+       for(int i=0;i<list.GetCount();i++)\r
+       {\r
+               CPatch patch;\r
+               patch.Parser((CString&)list[i].GetWinPathString());\r
+               if(bAttachment)\r
+               {\r
+                       attachments.Add(list[i].GetWinPathString());\r
+                       body+=patch.m_Subject;\r
+                       body+=_T("\r\n");\r
+\r
+               }else\r
+               {\r
+                       g_Git.StringAppend(&body,(BYTE*)patch.m_Body.GetBuffer(),CP_ACP,patch.m_Body.GetLength());\r
+               }\r
+\r
+       }\r
+\r
+       CHwSMTP mail;\r
+       \r
+       CString sender;\r
+       sender.Format(_T("%s <%s> "),g_Git.GetUserName(),g_Git.GetUserEmail());\r
+\r
+       if(mail.SendSpeedEmail(sender,To,subject,body,NULL,&attachments,CC,25,sender))\r
+               return 0;\r
+       else\r
+       {\r
+               if(errortext)\r
+                       *errortext=mail.GetLastErrorText();\r
+               return -1;\r
+       }\r
+\r
+}\r
 \r
 int CPatch::Parser(CString &pathfile)\r
 {\r
index b2571e5..5b7e2a1 100644 (file)
@@ -1,6 +1,7 @@
 #pragma once\r
 \r
 #include "hwsmtp.h"\r
+#include "TGitPath.h"\r
 \r
 #define REG_SMTP_SERVER _T("Software\\TortoiseGit\\EMAIL\\SMTPSERVER")\r
 #define REG_SMTP_PORT _T("Software\\TortoiseGit\\EMAIL\\PORT")\r
@@ -18,6 +19,8 @@ public:
        ~CPatch(void);\r
        int Parser(CString &pathfile);\r
        int Send(CString &pathfile,CString &To, CString &CC,bool bAttachment);\r
+       \r
+       static int Send(CTGitPathList &list,CString &To,CString &CC, CString &subject,bool bAttachment,CString *errortext);\r
 \r
        CString m_LastError;\r
        CString m_Author;\r
index e891669..9e5948e 100644 (file)
@@ -2709,21 +2709,38 @@ bool CGitProgressDlg::CmdSendMail(CString& sWindowTitle, bool& /*localoperation*
        //SetBackgroundImage(IDI_ADD_BKG);\r
        ReportCmd(CString(MAKEINTRESOURCE(IDS_PROGRS_CMD_SENDMAIL)));\r
        bool ret=true;\r
-\r
-       for(int i=0;i<m_targetPathList.GetCount();i++)\r
+       if(this->m_SendMailFlags&SENDMAIL_COMBINED)\r
        {\r
-               CPatch patch;\r
-               Notify(m_targetPathList[i],git_wc_notify_sendmail_start);\r
-               int ret=patch.Send((CString&)m_targetPathList[i].GetWinPathString(),this->m_SendMailTO,\r
-                                this->m_SendMailCC,this->m_SendMailFlags&SENDMAIL_ATTACHMENT);\r
-               if(ret)\r
+               CString error;\r
+               CTGitPath path;\r
+               Notify(path,git_wc_notify_sendmail_start);\r
+               CString err;\r
+               if(CPatch::Send(m_targetPathList,m_SendMailTO,m_SendMailCC,m_SendMailSubject,this->m_SendMailFlags&SENDMAIL_COMBINED,&err))\r
                {\r
-                       Notify(m_targetPathList[i],git_wc_notify_sendmail_error,ret,&patch.m_LastError);\r
+                       Notify(path,git_wc_notify_sendmail_error,ret,&err);\r
                        ret = false;\r
+               }else\r
+               {\r
+                       Notify(path,git_wc_notify_sendmail_done,ret);\r
+               }\r
+\r
+       }else\r
+       {\r
+               for(int i=0;i<m_targetPathList.GetCount();i++)\r
+               {\r
+                       CPatch patch;\r
+                       Notify(m_targetPathList[i],git_wc_notify_sendmail_start);\r
+                       int ret=patch.Send((CString&)m_targetPathList[i].GetWinPathString(),this->m_SendMailTO,\r
+                                        this->m_SendMailCC,this->m_SendMailFlags&SENDMAIL_ATTACHMENT);\r
+                       if(ret)\r
+                       {\r
+                               Notify(m_targetPathList[i],git_wc_notify_sendmail_error,ret,&patch.m_LastError);\r
+                               ret = false;\r
+                       }\r
+                       Notify(m_targetPathList[i],git_wc_notify_sendmail_done,ret);\r
+                       if(m_bCancelled)\r
+                               return false;\r
                }\r
-               Notify(m_targetPathList[i],git_wc_notify_sendmail_done,ret);\r
-               if(m_bCancelled)\r
-                       return false;\r
        }\r
        return ret;\r
 }
\ No newline at end of file
index 898e588..645e558 100644 (file)
@@ -131,7 +131,7 @@ public:
 //     void SetRevisionEnd(const GitRev& rev) {m_RevisionEnd = rev;}\r
        \r
        void SetDiffOptions(const CString& opts) {m_diffoptions = opts;}\r
-       void SetSendMailOption(CString &TO, CString &CC,DWORD flags){m_SendMailTO=TO; m_SendMailCC=CC;this->m_SendMailFlags = flags;}\r
+       void SetSendMailOption(CString &TO, CString &CC,CString &Subject,DWORD flags){m_SendMailTO=TO;m_SendMailSubject=Subject; m_SendMailCC=CC;this->m_SendMailFlags = flags;}\r
        void SetDepth(git_depth_t depth = git_depth_unknown) {m_depth = depth;}\r
        void SetPegRevision(GitRev pegrev = GitRev()) {m_pegRev = pegrev;}\r
        void SetProjectProperties(ProjectProperties props) {m_ProjectProperties = props;}\r
@@ -351,7 +351,8 @@ private:
        DWORD                                   m_SendMailFlags;\r
        CString                                 m_SendMailTO;\r
        CString                                 m_SendMailCC;\r
-       \r
+       CString                                 m_SendMailSubject;\r
+\r
 ///    CComPtr<IBugTraqProvider> m_BugTraqProvider;\r
 \r
        // some strings different methods can use\r