\r
static CString GetClipboardLink();\r
static CString ChooseRepository(CString *path);\r
-\r
+ \r
private:\r
static CString PickDiffTool(const CTGitPath& file1, const CTGitPath& file2);\r
static bool GetMimeType(const CTGitPath& file, CString& mimetype);\r
#include "StdAfx.h"\r
#include "SendMailCommand.h"\r
#include "SendMailDlg.h"\r
+#include "SVNProgressDlg.h"\r
\r
bool SendMailCommand::Execute()\r
{\r
\r
if(dlg.DoModal()==IDOK)\r
{\r
+ if(dlg.m_PathList.GetCount() == 0)\r
+ return FALSE;\r
+ \r
+ CGitProgressDlg progDlg;\r
+ \r
+ theApp.m_pMainWnd = &progDlg;\r
+ progDlg.SetCommand(CGitProgressDlg::GitProgress_SendMail);\r
+ \r
+ if (parser.HasVal(_T("closeonend")))\r
+ progDlg.SetAutoClose(parser.GetLongVal(_T("closeonend")));\r
+ \r
+ progDlg.SetPathList(dlg.m_PathList);\r
+ //ProjectProperties props;\r
+ //props.ReadPropsPathList(dlg.m_pathList);\r
+ //progDlg.SetProjectProperties(props);\r
+ progDlg.SetItemCount(dlg.m_PathList.GetCount());\r
+\r
+ DWORD flags =0;\r
+ if(dlg.m_bAttachment)\r
+ flags |= SENDMAIL_ATTACHMENT;\r
+ if(dlg.m_bCombine)\r
+ flags |= SENDMAIL_COMBINED;\r
+\r
+ progDlg.SetSendMailOption(dlg.m_To,dlg.m_CC,flags);\r
+ \r
+ progDlg.DoModal(); \r
+\r
return true;\r
}\r
return false;\r
#include "StdAfx.h"\r
#include "Patch.h"\r
+#include "csmtp.h"\r
+#include "registry.h"\r
+#include "unicodeutils.h"\r
\r
CPatch::CPatch()\r
{\r
\r
}\r
\r
+int CPatch::Send(CString &pathfile,CString &TO,CString &CC,bool bAttachment)\r
+{\r
+ CSmtp mail;\r
+ \r
+ if(mail.GetLastError() != CSMTP_NO_ERROR )\r
+ {\r
+ return -1;\r
+ }\r
+ \r
+ if(this->Parser(pathfile) )\r
+ return -1;\r
+\r
+\r
+ CRegString server(REG_SMTP_SERVER);\r
+ CRegDWORD port(REG_SMTP_PORT,25);\r
+ CRegDWORD bAuth(REG_SMTP_ISAUTH);\r
+ CRegDWORD user(REG_SMTP_USER);\r
+ CRegDWORD password(REG_SMTP_PASSWORD);\r
+\r
+ mail.SetSMTPServer(CUnicodeUtils::GetUTF8(server),port);\r
+\r
+ AddRecipient(mail,TO,false);\r
+ AddRecipient(mail,CC,true);\r
+\r
+ if( bAttachment )\r
+ mail.AddAttachment(CUnicodeUtils::GetUTF8(pathfile));\r
+\r
+ CString name,address;\r
+ GetNameAddress(this->m_Author,name,address);\r
+ mail.SetSenderName(CUnicodeUtils::GetUTF8(name));\r
+ mail.SetSenderMail(CUnicodeUtils::GetUTF8(address));\r
+\r
+ mail.SetXPriority(XPRIORITY_NORMAL);\r
+ mail.SetXMailer("The Bat! (v3.02) Professional");\r
+\r
+ mail.SetSubject(CUnicodeUtils::GetUTF8(this->m_Subject));\r
+\r
+ mail.SetMessageBody((char*)&this->m_Body[0]);\r
+\r
+ if(bAuth)\r
+ {\r
+ mail.SetLogin(CUnicodeUtils::GetUTF8((CString&)user));\r
+ mail.SetPassword(CUnicodeUtils::GetUTF8((CString&)password));\r
+ }\r
+\r
+ return !mail.Send();\r
+\r
+}\r
+\r
int CPatch::Parser(CString &pathfile)\r
{\r
CString str;\r
i++; \r
}\r
\r
+ m_Body.resize(PatchFile.GetLength() - PatchFile.GetPosition());\r
+ PatchFile.Read(&m_Body.at(0),PatchFile.GetLength() - PatchFile.GetPosition());\r
\r
PatchFile.Close();\r
\r
+}\r
+\r
+void CPatch::GetNameAddress(CString &in, CString &name,CString &address)\r
+{\r
+ int start,end;\r
+ start=in.Find(_T('<'));\r
+ end=in.Find(_T('>'));\r
+\r
+ if(start >=0 && end >=0)\r
+ {\r
+ name=in.Left(start);\r
+ address=in.Mid(start+1,end-start-1);\r
+ }\r
+ else\r
+ address=in;\r
+}\r
+\r
+void CPatch::AddRecipient(CSmtp &mail, CString &tolist, bool isCC)\r
+{\r
+ int pos=0;\r
+ while(pos>=0)\r
+ {\r
+ CString one=tolist.Tokenize(_T(";"),pos);\r
+ int start=one.Find(_T('<'));\r
+ int end = one.Find(_T('>'));\r
+ CStringA name;\r
+ CStringA address;\r
+ if( start>=0 && end >=0)\r
+ {\r
+ name=CUnicodeUtils::GetUTF8(one.Left(start));\r
+ address=CUnicodeUtils::GetUTF8(one.Mid(start+1,end-start-1));\r
+ if(address.IsEmpty())\r
+ continue;\r
+ if(isCC)\r
+ mail.AddCCRecipient(address,name);\r
+ else\r
+ mail.AddRecipient(address,name);\r
+\r
+ }else\r
+ {\r
+ if(one.IsEmpty())\r
+ continue;\r
+ if(isCC)\r
+ mail.AddCCRecipient(CUnicodeUtils::GetUTF8(one));\r
+ else\r
+ mail.AddRecipient(CUnicodeUtils::GetUTF8(one));\r
+ }\r
+ }\r
}
\ No newline at end of file
#pragma once\r
\r
+#include "csmtp.h"\r
+\r
+#define REG_SMTP_SERVER _T("Software\\TortoiseGit\\EMAIL\\SMTPSERVER")\r
+#define REG_SMTP_PORT _T("Software\\TortoiseGit\\EMAIL\\PORT")\r
+#define REG_SMTP_ISAUTH _T("Software\\TortoiseGit\\EMAIL\\ISAUTH")\r
+#define REG_SMTP_USER _T("Software\\TortoiseGit\\EMAIL\\USER")\r
+#define REG_SMTP_PASSWORD _T("Software\\TortoiseGit\\EMAIL\\PASSWORD")\r
+\r
class CPatch\r
{\r
-\r
- \r
+protected:\r
+ void AddRecipient(CSmtp &mail, CString &tolist, bool isCC= FALSE);\r
+ void GetNameAddress(CString &in, CString &name,CString &address);\r
public:\r
CPatch();\r
~CPatch(void);\r
int Parser(CString &pathfile);\r
+ int Send(CString &pathfile,CString &To, CString &CC,bool bAttachment);\r
\r
CString m_Author;\r
CString m_Date;\r
CString m_Subject;\r
CString m_PathFile;\r
- CString m_Body;\r
+ std::vector<BYTE> m_Body;\r
};\r
#include "ShellUpdater.h"\r
#include "IconMenu.h"\r
#include "BugTraqAssociations.h"\r
+#include "patch.h"\r
\r
static UINT WM_GITPROGRESS = RegisterWindowMessage(_T("TORTOISEGIT_GITPROGRESS_MSG"));\r
\r
data->color = m_Colors.GetColor(CColors::Added);\r
// }\r
break;\r
+ case git_wc_notify_sendmail:\r
+ data->sActionColumnText.LoadString(IDS_SVNACTION_SENDMAIL);\r
+ data->color = m_Colors.GetColor(CColors::Modified);\r
+ break;\r
\r
case git_wc_notify_resolved:\r
data->sActionColumnText.LoadString(IDS_SVNACTION_RESOLVE);\r
case GitProgress_Update:\r
bSuccess = CmdUpdate(sWindowTitle, localoperation);\r
break;\r
+ case GitProgress_SendMail:\r
+ bSuccess = CmdSendMail(sWindowTitle, localoperation);\r
+ break;\r
}\r
if (!bSuccess)\r
temp.LoadString(IDS_PROGRS_TITLEFAILED);\r
}\r
return sPath;\r
}\r
+\r
+bool CGitProgressDlg::CmdSendMail(CString& sWindowTitle, bool& /*localoperation*/)\r
+{\r
+ sWindowTitle.LoadString(IDS_PROGRS_TITLE_SENDMAIL);\r
+ SetWindowText(sWindowTitle);\r
+ //SetBackgroundImage(IDI_ADD_BKG);\r
+ ReportCmd(CString(MAKEINTRESOURCE(IDS_PROGRS_CMD_SENDMAIL)));\r
+\r
+ for(int i=0;i<m_targetPathList.GetCount();i++)\r
+ {\r
+ CPatch patch;\r
+ patch.Send((CString&)m_targetPathList[i].GetWinPathString(),this->m_SendMailTO,\r
+ this->m_SendMailCC,this->m_SendMailFlags&SENDMAIL_ATTACHMENT);\r
+ Notify(m_targetPathList[i],git_wc_notify_sendmail);\r
+ }\r
+ return true;\r
+}
\ No newline at end of file
typedef enum\r
{\r
git_wc_notify_add,\r
+ git_wc_notify_sendmail,\r
git_wc_notify_resolved\r
\r
}git_wc_notify_action_t;\r
+typedef enum\r
+{\r
+ SENDMAIL_ATTACHMENT=0x1,\r
+ SENDMAIL_COMBINED =0x2\r
+};\r
/**\r
* \ingroup TortoiseProc\r
* Handles different Subversion commands and shows the notify messages\r
GitProgress_Switch,\r
GitProgress_Unlock,\r
GitProgress_Update,\r
+ GitProgress_SendMail,\r
} Command;\r
\r
\r
// 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 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
bool CmdSwitch(CString& sWindowTitle, bool& localoperation);\r
bool CmdUnlock(CString& sWindowTitle, bool& localoperation);\r
bool CmdUpdate(CString& sWindowTitle, bool& localoperation);\r
+ bool CmdSendMail(CString& sWindowTitle, bool& localoperation);\r
\r
private:\r
typedef std::map<CStringA, git_revnum_t> StringRevMap;\r
\r
bool m_AlwaysConflicted;\r
\r
+ DWORD m_SendMailFlags;\r
+ CString m_SendMailTO;\r
+ CString m_SendMailCC;\r
+ \r
/// CComPtr<IBugTraqProvider> m_BugTraqProvider;\r
\r
// some strings different methods can use\r
#include "MessageBox.h"\r
#include "commonresource.h"\r
#include "AppUtils.h"\r
+\r
// CSendMailDlg dialog\r
\r
IMPLEMENT_DYNAMIC(CSendMailDlg, CResizableStandAloneDialog)\r
bool CSmtp::FormatHeader(char* header)\r
{\r
int i,s = 0;\r
- TCHAR szDate[500];\r
- TCHAR sztTime[500];\r
+ char szDate[500];\r
+ char sztTime[500];\r
char *to = NULL;\r
char *cc = NULL;\r
char *bcc = NULL;\r
// Date: <SP> <dd> <SP> <mon> <SP> <yy> <SP> <hh> ":" <mm> ":" <ss> <SP> <zone> <CRLF>\r
SYSTEMTIME st={0};\r
::GetSystemTime(&st);\r
- ::GetDateFormat(MAKELCID(0x0409,SORT_DEFAULT),0,&st,"ddd\',\' dd MMM yyyy",szDate,sizeof(szDate));\r
- ::GetTimeFormat(MAKELCID(0x0409,SORT_DEFAULT),TIME_FORCE24HOURFORMAT,&st,"HH\':\'mm\':\'ss",sztTime,sizeof(sztTime));\r
+ ::GetDateFormatA(MAKELCID(0x0409,SORT_DEFAULT),0,&st,"ddd\',\' dd MMM yyyy",szDate,sizeof(szDate));\r
+ ::GetTimeFormatA(MAKELCID(0x0409,SORT_DEFAULT),TIME_FORCE24HOURFORMAT,&st,"HH\':\'mm\':\'ss",sztTime,sizeof(sztTime));\r
sprintf(header,"Date: %s %s\r\n", szDate, sztTime); \r
\r
// From: <SP> <sender> <SP> "<" <sender-email> ">" <CRLF>\r
>\r
</File>\r
<File\r
+ RelativePath=".\base64.cpp"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ UsePrecompiledHeader="0"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Debug|x64"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ UsePrecompiledHeader="0"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ UsePrecompiledHeader="0"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|x64"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ UsePrecompiledHeader="0"\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
+ RelativePath=".\base64.h"\r
+ >\r
+ </File>\r
+ <File\r
RelativePath=".\BugTraqAssociations.cpp"\r
>\r
</File>\r
>\r
</File>\r
<File\r
+ RelativePath=".\CSmtp.cpp"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ UsePrecompiledHeader="0"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Debug|x64"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ UsePrecompiledHeader="0"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ UsePrecompiledHeader="0"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|x64"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ UsePrecompiledHeader="0"\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
+ RelativePath=".\CSmtp.h"\r
+ >\r
+ </File>\r
+ <File\r
RelativePath=".\DebugHelpers.cpp"\r
>\r
</File>\r