Пример #1
0
BOOL CMapiMessage::FetchHeaders( void)
{
  LPSPropValue pVal = CMapiApi::GetMapiProperty( m_lpMsg, PR_TRANSPORT_MESSAGE_HEADERS);
  if (pVal && CMapiApi::IsLargeProperty( pVal)) {
    m_headers.Truncate();
    CMapiApi::GetLargeStringProperty( m_lpMsg, PR_TRANSPORT_MESSAGE_HEADERS, m_headers);
  }
  else if (pVal && (PROP_TYPE( pVal->ulPropTag) == PT_TSTRING) && (pVal->Value.LPSZ) && (*(pVal->Value.LPSZ))) {
    m_headers = pVal->Value.LPSZ;
  }
  else {
    // Need to build the headers from the other stuff
    m_headers.Truncate();
    BuildHeaders();
  }

  if (pVal)
    CMapiApi::MAPIFreeBuffer( pVal);

  m_fromLine.Truncate();
  if (NeedsFromLine()) {
    BuildFromLine();
  }

  if (!m_fromLine.IsEmpty()) {
    MAPI_DUMP_STRING(m_fromLine.get());
  }
  MAPI_DUMP_STRING(m_headers.get());
  MAPI_TRACE0("\r\n");

  ProcessHeaders();

  if (!m_headers.IsEmpty()) {
    if (!m_bHasSubject)
      AddSubject( m_headers);
    if (!m_bHasFrom)
      AddFrom( m_headers);
    if (!m_bHasDate)
      AddDate( m_headers);
    m_headers.Trim( kWhitespace, PR_FALSE, PR_TRUE);
    m_headers += "\x0D\x0A";
  }

  return( !m_headers.IsEmpty());
}
Пример #2
0
CMapiMessage::CMapiMessage(LPMESSAGE lpMsg)
  : m_lpMsg(lpMsg), m_dldStateHeadersOnly(false), m_msgFlags(0)
{
  nsresult rv;
  m_pIOService = do_GetService(NS_IOSERVICE_CONTRACTID, &rv);
  if (NS_FAILED(rv))
    return;

  FetchHeaders();
  if (ValidState()) {
    BuildFromLine();
    FetchFlags();
    GetDownloadState();
    if (FullMessageDownloaded()) {
      FetchBody();
      ProcessAttachments();
    }
  }
}