int CPatch::SendMail(CString &To, CString &CC, CString &subject, CString &body, CStringArray &attachments, bool useMAPI, CString *errortext) { CString sender; sender.Format(_T("%s <%s>"), g_Git.GetUserName(), g_Git.GetUserEmail()); if (useMAPI) { CMailMsg mapiSender; BOOL bMAPIInit = mapiSender.MAPIInitialize(); if(!bMAPIInit) { if(errortext) *errortext = mapiSender.GetLastErrorMsg(); return -1; } mapiSender.SetShowComposeDialog(TRUE); mapiSender.SetFrom(g_Git.GetUserEmail()); mapiSender.SetTo(To); if(!CC.IsEmpty()) mapiSender.AddCC(CC); mapiSender.SetSubject(subject); mapiSender.SetMessage(body); for (int i = 0; i < attachments.GetSize(); ++i) { mapiSender.AddAttachment(attachments[i]); } BOOL bSend = mapiSender.Send(); if (bSend==TRUE) return 0; else { if(errortext) *errortext = mapiSender.GetLastErrorMsg(); return -1; } } else { CHwSMTP mail; if(mail.SendSpeedEmail(sender,To,subject,body,NULL,&attachments,CC,25,sender)) return 0; else { if(errortext) *errortext=mail.GetLastErrorText(); return -1; } } }
DWORD WINAPI ThreadProc_SendEmail( LPVOID lpParameter ) { CEMailObject *pEMailObject = (CEMailObject*)lpParameter; ASSERT ( pEMailObject ); CHwSMTP HwSMTP; BOOL bRet = HwSMTP.SendEmail ( pEMailObject->m_csSmtpSrvHost, pEMailObject->m_csUserName, pEMailObject->m_csPasswd, pEMailObject->m_bMustAuth, pEMailObject->m_csAddrFrom, pEMailObject->m_csAddrTo, pEMailObject->m_csSubject, pEMailObject->m_csBody, pEMailObject->m_csCharSet, &pEMailObject->m_StrAryAttach, pEMailObject->m_StrCC, pEMailObject->m_nSmtpSrvPort, pEMailObject->m_csSender ); if ( !bRet) { #ifdef _DEBUG CString csError = HwSMTP.GetLastErrorText (); csError = FormatString ( _T("Send a email to [%s] failed."), pEMailObject->m_csSmtpSrvHost ); AfxMessageBox ( csError ); #endif } m_CSFor__g_PtrAry_Threads.Lock (); int nFindPos = FindFromArray ( g_PtrAry_Threads, pEMailObject->m_hThread ); if ( nFindPos >= 0 ) g_PtrAry_Threads.RemoveAt ( nFindPos ); m_CSFor__g_PtrAry_Threads.Unlock (); delete pEMailObject; return bRet; }
int CSendMail::SendMail(const CString& FromName, const CString& FromMail, const CString& To, const CString& CC, const CString& subject, const CString& body, CStringArray &attachments, CString *errortext) { if (CRegDWORD(_T("Software\\TortoiseGit\\TortoiseProc\\SendMail\\DeliveryType"), SEND_MAIL_MAPI) == SEND_MAIL_MAPI) { CMailMsg mapiSender; BOOL bMAPIInit = mapiSender.MAPIInitialize(); if (!bMAPIInit) { if (errortext) *errortext = mapiSender.GetLastErrorMsg(); return -1; } mapiSender.SetShowComposeDialog(TRUE); mapiSender.SetFrom(FromMail, FromName); mapiSender.SetTo(To); if (!CC.IsEmpty()) mapiSender.SetCC(CC); mapiSender.SetSubject(subject); mapiSender.SetMessage(body); for (int i = 0; i < attachments.GetSize(); ++i) mapiSender.AddAttachment(attachments[i]); BOOL bSend = mapiSender.Send(); if (bSend == TRUE) return 0; else { if (errortext) *errortext = mapiSender.GetLastErrorMsg(); return -1; } } else { CString sender; sender.Format(_T("%s <%s>"), (LPCTSTR)FromName, (LPCTSTR)FromMail); CHwSMTP mail; if (CRegDWORD(_T("Software\\TortoiseGit\\TortoiseProc\\SendMail\\DeliveryType"), SEND_MAIL_SMTP_CONFIGURED) == SEND_MAIL_SMTP_CONFIGURED) { CString recipients(To); if (!CC.IsEmpty()) recipients += L";" + CC; if (mail.SendEmail((CString)CRegString(_T("Software\\TortoiseGit\\TortoiseProc\\SendMail\\Address"), _T("")), (CString)CRegString(_T("Software\\TortoiseGit\\TortoiseProc\\SendMail\\Username"), _T("")), (CString)CRegString(_T("Software\\TortoiseGit\\TortoiseProc\\SendMail\\Password"), _T("")), (BOOL)CRegDWORD(_T("Software\\TortoiseGit\\TortoiseProc\\SendMail\\AuthenticationRequired"), FALSE), sender, recipients, subject, body, nullptr, &attachments, CC, (DWORD)CRegDWORD(_T("Software\\TortoiseGit\\TortoiseProc\\SendMail\\Port"), 25), sender, To, (DWORD)CRegDWORD(_T("Software\\TortoiseGit\\TortoiseProc\\SendMail\\Encryption"), 0)) == TRUE) return 0; else { if (errortext) *errortext = mail.GetLastErrorText(); return -1; } } else if (mail.SendSpeedEmail(sender, To, subject, body, nullptr, &attachments, CC, sender)) return 0; else { if (errortext) *errortext = mail.GetLastErrorText(); return -1; } } }