OSDN Git Service

Complete Send mail coding and mail send have some problem.
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / Patch.cpp
index c5622c4..7ba59eb 100644 (file)
@@ -1,5 +1,8 @@
 #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
@@ -12,6 +15,55 @@ CPatch::~CPatch()
 \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
@@ -36,7 +88,57 @@ int CPatch::Parser(CString &pathfile)
                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