// This is temp function to log ETRN client commands to SMTP void POP3ClientConnection::LogSMTPString_(const String &sLogString, bool bSent) { String sTemp; if (bSent) { // Check if we should remove the password. if (current_state_ == StatePasswordSent) { // Remove password. sTemp = "SENT: ***"; } else { sTemp = "SENT: " + sLogString; } } else sTemp = "RECEIVED: " + sLogString; sTemp.TrimRight(_T("\r\n")); LOG_SMTP_CLIENT(GetSessionID(), GetIPAddressString(), sTemp); }
void SMTPClientConnection::_UpdateRecipientWithError(int iErrorCode, const AnsiString &sResponse, shared_ptr<MessageRecipient> pRecipient, bool bPreConnectError) { if (pRecipient->GetDeliveryResult() == MessageRecipient::ResultFatalError) { // This recipient is already marked as fatally failed. No need to // update it's status since it can't change from fatal to nonfatal. return; } bool bIsFatalError = IsPermanentNegative(iErrorCode); if (pRecipient->GetDeliveryResult() == MessageRecipient::ResultNonFatalError) { // If we have a non-fatal error, but the new error is fatal, we should // update it's status. But if the error level is the same as before, we // should not. We should only update the delivery result if the result // has gotten worse than before. Overwriting with the same status may // remove useful error messages. if (!bIsFatalError) { // No this is the same error level. return; } } // Update the delivery status pRecipient->SetDeliveryResult(bIsFatalError ? MessageRecipient::ResultFatalError : MessageRecipient::ResultNonFatalError); m_sLastSentData.TrimLeft("\r\n"); m_sLastSentData.TrimRight("\r\n"); String sData; if (bPreConnectError) { sData.Format(_T(" Error Type: SMTP\r\n") _T(" Connection to recipients server failed.\r\n") _T(" Error: %s\r\n"), String(sResponse)); } else { sData.Format(_T(" Error Type: SMTP\r\n") _T(" Remote server (%s) issued an error.\r\n") _T(" hMailServer sent: %s\r\n") _T(" Remote server replied: %s\r\n"), String(GetIPAddressString()), String(m_sLastSentData), String(sResponse)); } pRecipient->SetErrorMessage(sData); }
void POP3Connection::_LogClientCommand(const String &sClientData) const //---------------------------------------------------------------------------() // DESCRIPTION: // Logs one client command. //---------------------------------------------------------------------------() { if (!Logger::Instance()->GetLogPOP3()) return; String sLogData = sClientData; // Remove any password from the log. PasswordRemover::Remove(PasswordRemover::PRPOP3, sLogData); // Append sLogData = "RECEIVED: " + sLogData; sLogData.Replace(_T("\r\n"), _T("[nl]")); LOG_POP3(GetSessionID(), GetIPAddressString(), sLogData); }
void SMTPClientConnection::LogSentCommand_(const String &sData) { if (!(Logger::Instance()->GetLogMask() & Logger::LSSMTP)) return; String sLogData = sData; if (current_state_ == PASSWORDSENT) { // Password has been sent. Remove from log. sLogData = "***"; } // Append sLogData = "SENT: " + sLogData; sLogData.TrimRight(_T("\r\n")); LOG_SMTP_CLIENT(GetSessionID(), GetIPAddressString(), sLogData); }