nsresult nsMsgOfflineManager::SendUnsentMessages() { nsresult rv; nsCOMPtr<nsIMsgSendLater> pMsgSendLater(do_GetService(kMsgSendLaterCID, &rv)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIMsgAccountManager> accountManager = do_GetService(NS_MSGACCOUNTMANAGER_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); // now we have to iterate over the identities, finding the *unique* unsent messages folder // for each one, determine if they have unsent messages, and if so, add them to the list // of identities to send unsent messages from. // However, I think there's only ever one unsent messages folder at the moment, // so I think we'll go with that for now. nsCOMPtr<nsIArray> identities; if (NS_SUCCEEDED(rv) && accountManager) { rv = accountManager->GetAllIdentities(getter_AddRefs(identities)); NS_ENSURE_SUCCESS(rv, rv); } nsCOMPtr <nsIMsgIdentity> identityToUse; uint32_t numIndentities; identities->GetLength(&numIndentities); for (uint32_t i = 0; i < numIndentities; i++) { nsCOMPtr<nsIMsgIdentity> thisIdentity(do_QueryElementAt(identities, i, &rv)); if (NS_SUCCEEDED(rv) && thisIdentity) { nsCOMPtr <nsIMsgFolder> outboxFolder; pMsgSendLater->GetUnsentMessagesFolder(thisIdentity, getter_AddRefs(outboxFolder)); if (outboxFolder) { int32_t numMessages; outboxFolder->GetTotalMessages(false, &numMessages); if (numMessages > 0) { identityToUse = thisIdentity; break; } } } } if (identityToUse) { #ifdef MOZ_SUITE if (m_statusFeedback) pMsgSendLater->SetStatusFeedback(m_statusFeedback); #endif pMsgSendLater->AddListener(this); rv = pMsgSendLater->SendUnsentMessages(identityToUse); ShowStatus("sendingUnsent"); // if we succeeded, return - we'll run the next operation when the // send finishes. Otherwise, advance to the next state. if (NS_SUCCEEDED(rv)) return rv; } return AdvanceToNextState(rv); }
PRBool nsMapiHook::VerifyUserName(const nsString& aUsername, nsCString& aIdKey) { nsresult rv; if (aUsername.IsEmpty()) return PR_FALSE; nsCOMPtr<nsIMsgAccountManager> accountManager(do_GetService(NS_MSGACCOUNTMANAGER_CONTRACTID, &rv)); if (NS_FAILED(rv)) return PR_FALSE; nsCOMPtr<nsISupportsArray> identities; rv = accountManager->GetAllIdentities(getter_AddRefs(identities)); if (NS_FAILED(rv)) return PR_FALSE; PRUint32 numIndentities; identities->Count(&numIndentities); for (PRUint32 i = 0; i < numIndentities; i++) { // convert supports->Identity nsCOMPtr<nsISupports> thisSupports; rv = identities->GetElementAt(i, getter_AddRefs(thisSupports)); if (NS_FAILED(rv)) continue; nsCOMPtr<nsIMsgIdentity> thisIdentity(do_QueryInterface(thisSupports, &rv)); if (NS_SUCCEEDED(rv) && thisIdentity) { nsCString email; rv = thisIdentity->GetEmail(email); if (NS_FAILED(rv)) continue; // get the username from the email and compare with the username PRInt32 index = email.FindChar('@'); if (index != -1) email.SetLength(index); if (aUsername.Equals(NS_ConvertASCIItoUTF16(email))) return NS_SUCCEEDED(thisIdentity->GetKey(aIdKey)); } } return PR_FALSE; }