bool OutlookSettings::DoImport(nsIMsgAccount **aAccount) { nsCOMPtr<nsIWindowsRegKey> key; nsresult rv = OutlookSettings::FindAccountsKey(getter_AddRefs(key)); if (NS_FAILED(rv)) { IMPORT_LOG0("*** Error finding Outlook registry account keys\n"); return false; } nsCOMPtr<nsIMsgAccountManager> accMgr = do_GetService(NS_MSGACCOUNTMANAGER_CONTRACTID, &rv); if (NS_FAILED(rv)) { IMPORT_LOG0("*** Failed to create a account manager!\n"); return false; } nsAutoString defMailName; rv = GetDefaultMailAccountName(defMailName); PRUint32 childCount; key->GetChildCount(&childCount); PRUint32 accounts = 0; PRUint32 popCount = 0; for (PRUint32 i = 0; i < childCount; i++) { nsAutoString keyName; key->GetChildName(i, keyName); nsCOMPtr<nsIWindowsRegKey> subKey; rv = key->OpenChild(keyName, nsIWindowsRegKey::ACCESS_QUERY_VALUE, getter_AddRefs(subKey)); if (NS_FAILED(rv)) continue; // Get the values for this account. nsCAutoString nativeKeyName; NS_CopyUnicodeToNative(keyName, nativeKeyName); IMPORT_LOG1("Opened Outlook account: %s\n", nativeKeyName.get()); nsCOMPtr<nsIMsgAccount> account; nsAutoString value; rv = subKey->ReadStringValue(NS_LITERAL_STRING("IMAP Server"), value); if (NS_SUCCEEDED(rv) && DoIMAPServer(accMgr, subKey, value, getter_AddRefs(account))) accounts++; rv = subKey->ReadStringValue(NS_LITERAL_STRING("POP3 Server"), value); if (NS_SUCCEEDED(rv) && DoPOP3Server(accMgr, subKey, value, getter_AddRefs(account))) { popCount++; accounts++; if (aAccount && account) { // If we created a mail account, get rid of it since // we have 2 POP accounts! if (popCount > 1) NS_RELEASE(*aAccount); else NS_ADDREF(*aAccount = account); } } // Is this the default account? if (account && keyName.Equals(defMailName)) accMgr->SetDefaultAccount(account); } // Now save the new acct info to pref file. rv = accMgr->SaveAccountInfo(); NS_ASSERTION(NS_SUCCEEDED(rv), "Can't save account info to pref file"); return accounts != 0; }
bool OESettings::DoImport(nsIMsgAccount **ppAccount) { HKEY hKey = FindAccountsKey(); if (hKey == nsnull) { IMPORT_LOG0("*** Error finding Outlook Express registry account keys\n"); return false; } nsresult rv; nsCOMPtr<nsIMsgAccountManager> accMgr = do_GetService(NS_MSGACCOUNTMANAGER_CONTRACTID, &rv); if (NS_FAILED(rv)) { IMPORT_LOG0("*** Failed to create a account manager!\n"); ::RegCloseKey(hKey); return false; } HKEY subKey; nsCString defMailName; // OE has default mail account here when it has been // set up by transfer or has multiple identities // look below for orig code that looked in new OE installs if (::RegOpenKeyEx(HKEY_CURRENT_USER, "Identities", 0, KEY_QUERY_VALUE, &subKey) == ERROR_SUCCESS) { BYTE * pBytes = nsOERegUtil::GetValueBytes(subKey, "Default User ID"); ::RegCloseKey(subKey); if (pBytes) { nsCString key("Identities\\"); key += (const char *)pBytes; nsOERegUtil::FreeValueBytes(pBytes); key += "\\Software\\Microsoft\\Internet Account Manager"; if (::RegOpenKeyEx(HKEY_CURRENT_USER, key.get(), 0, KEY_QUERY_VALUE , &subKey) == ERROR_SUCCESS) { BYTE * pBytes = nsOERegUtil::GetValueBytes(subKey, "Default Mail Account"); ::RegCloseKey(subKey); if (pBytes) { defMailName = (const char *)pBytes; nsOERegUtil::FreeValueBytes(pBytes); } } } } // else it must be here in original install location from orig code if (defMailName.IsEmpty()) { if (::RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Outlook Express", 0, KEY_QUERY_VALUE, &subKey) == ERROR_SUCCESS) { BYTE * pBytes = nsOERegUtil::GetValueBytes(subKey, "Default Mail Account"); ::RegCloseKey(subKey); if (pBytes) { defMailName = (const char *)pBytes; nsOERegUtil::FreeValueBytes(pBytes); } } } // else defmailname will be "". No big deal. // 'poll for messages' setting in OE is a global setting // in OE options general tab and in following global OE // registry location. // for all accounts poll interval is a 32 bit value, 0 for // "don't poll", else milliseconds HKEY subSubKey; subKey = Find50Key(); if (!subKey) subKey = Find40Key(); // above key not critical checkNewMailTime = 30; checkNewMail = false; if (subKey){ if (::RegOpenKeyEx(subKey, "Mail", 0, KEY_QUERY_VALUE, &subSubKey) == ERROR_SUCCESS) { ::RegCloseKey(subKey); BYTE * pBytes = nsOERegUtil::GetValueBytes(subSubKey, "Poll For Mail"); ::RegCloseKey(subSubKey); if (pBytes) { if (*(PRInt32 *)pBytes != -1){ checkNewMail = true; checkNewMailTime = *(PRInt32 *)pBytes / 60000; } nsOERegUtil::FreeValueBytes(pBytes); } } } // Iterate the accounts looking for POP3 & IMAP accounts... // Ignore LDAP for now! DWORD index = 0; DWORD numChars; TCHAR keyName[256]; LONG result = ERROR_SUCCESS; BYTE * pBytes; int accounts = 0; nsCString keyComp; while (result == ERROR_SUCCESS) { numChars = 256; result = ::RegEnumKeyEx(hKey, index, keyName, &numChars, NULL, NULL, NULL, NULL); index++; if (result == ERROR_SUCCESS) { if (::RegOpenKeyEx(hKey, keyName, 0, KEY_QUERY_VALUE, &subKey) == ERROR_SUCCESS) { // Get the values for this account. IMPORT_LOG1("Opened Outlook Express account: %s\n", (char *)keyName); nsIMsgAccount *anAccount = nsnull; pBytes = nsOERegUtil::GetValueBytes(subKey, "IMAP Server"); if (pBytes) { if (DoIMAPServer(accMgr, subKey, (char *)pBytes, &anAccount)) accounts++; nsOERegUtil::FreeValueBytes(pBytes); } pBytes = nsOERegUtil::GetValueBytes(subKey, "NNTP Server"); if (pBytes) { if (DoNNTPServer(accMgr, subKey, (char *)pBytes, &anAccount)) accounts++; nsOERegUtil::FreeValueBytes(pBytes); } pBytes = nsOERegUtil::GetValueBytes(subKey, "POP3 Server"); if (pBytes) { if (DoPOP3Server(accMgr, subKey, (char *)pBytes, &anAccount)) { accounts++; } nsOERegUtil::FreeValueBytes(pBytes); } if (anAccount) { // Is this the default account? keyComp = keyName; if (keyComp.Equals(defMailName)) { accMgr->SetDefaultAccount(anAccount); } NS_RELEASE(anAccount); } ::RegCloseKey(subKey); } } } ::RegCloseKey(hKey); // Now save the new acct info to pref file. rv = accMgr->SaveAccountInfo(); NS_ASSERTION(NS_SUCCEEDED(rv), "Can't save account info to pref file"); return accounts != 0; }
bool OutlookSettings::DoImport(nsIMsgAccount **ppAccount) { HKEY hKey = FindAccountsKey(); if (hKey == nsnull) { IMPORT_LOG0("*** Error finding Outlook registry account keys\n"); return false; } nsresult rv; nsCOMPtr<nsIMsgAccountManager> accMgr = do_GetService(NS_MSGACCOUNTMANAGER_CONTRACTID, &rv); if (NS_FAILED(rv)) { IMPORT_LOG0("*** Failed to create a account manager!\n"); return false; } HKEY subKey = NULL; nsCString defMailName; if (::RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Office\\Outlook\\OMI Account Manager", 0, KEY_QUERY_VALUE, &subKey) != ERROR_SUCCESS) if (::RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Office\\8.0\\Outlook\\OMI Account Manager", 0, KEY_QUERY_VALUE, &subKey) != ERROR_SUCCESS) subKey = NULL; if (subKey != NULL) { // First let's get the default mail account key name BYTE * pBytes = nsOutlookRegUtil::GetValueBytes(subKey, "Default Mail Account"); ::RegCloseKey(subKey); if (pBytes) { defMailName = (const char *)pBytes; nsOutlookRegUtil::FreeValueBytes(pBytes); } } // Iterate the accounts looking for POP3 & IMAP accounts... // Ignore LDAP & NNTP for now! DWORD index = 0; DWORD numChars; TCHAR keyName[256]; FILETIME modTime; LONG result = ERROR_SUCCESS; BYTE * pBytes; int popCount = 0; int accounts = 0; nsCString keyComp; while (result == ERROR_SUCCESS) { numChars = 256; result = ::RegEnumKeyEx(hKey, index, keyName, &numChars, NULL, NULL, NULL, &modTime); index++; if (result == ERROR_SUCCESS) { if (::RegOpenKeyEx(hKey, keyName, 0, KEY_QUERY_VALUE, &subKey) == ERROR_SUCCESS) { // Get the values for this account. IMPORT_LOG1("Opened Outlook account: %s\n", (char *)keyName); nsIMsgAccount *anAccount = nsnull; pBytes = nsOutlookRegUtil::GetValueBytes(subKey, "IMAP Server"); if (pBytes) { if (DoIMAPServer(accMgr, subKey, (char *)pBytes, &anAccount)) accounts++; nsOutlookRegUtil::FreeValueBytes(pBytes); } pBytes = nsOutlookRegUtil::GetValueBytes(subKey, "POP3 Server"); if (pBytes) { if (popCount == 0) { if (DoPOP3Server(accMgr, subKey, (char *)pBytes, &anAccount)) { popCount++; accounts++; if (ppAccount && anAccount) { *ppAccount = anAccount; NS_ADDREF(anAccount); } } } else { if (DoPOP3Server(accMgr, subKey, (char *)pBytes, &anAccount)) { popCount++; accounts++; // If we created a mail account, get rid of it since // we have 2 POP accounts! if (ppAccount && *ppAccount) { NS_RELEASE(*ppAccount); *ppAccount = nsnull; } } } nsOutlookRegUtil::FreeValueBytes(pBytes); } if (anAccount) { // Is this the default account? keyComp = keyName; if (keyComp.Equals(defMailName)) { accMgr->SetDefaultAccount(anAccount); } NS_RELEASE(anAccount); } ::RegCloseKey(subKey); } } } // Now save the new acct info to pref file. rv = accMgr->SaveAccountInfo(); NS_ASSERTION(NS_SUCCEEDED(rv), "Can't save account info to pref file"); return accounts != 0; }
bool WMSettings::DoImport(nsIMsgAccount **ppAccount) { nsresult rv; // do the windows registry stuff first nsCOMPtr<nsIWindowsRegKey> key = do_CreateInstance("@mozilla.org/windows-registry-key;1"); if (NS_FAILED(FindWMKey(key))) { IMPORT_LOG0("*** Error finding Windows Live Mail registry account keys\n"); return PR_FALSE; } // 'poll for messages' setting in WM is a global setting-Like OE // for all accounts dword ==0xffffffff for don't poll else 1/60000 = minutes checkNewMailTime = 30; checkNewMail = PR_FALSE; nsCOMPtr<nsIWindowsRegKey> subKey; if (NS_SUCCEEDED(key->OpenChild(NS_LITERAL_STRING("mail"), nsIWindowsRegKey::ACCESS_QUERY_VALUE, getter_AddRefs(subKey)))) { PRUint32 dwordResult = -1; rv = subKey->ReadIntValue(NS_LITERAL_STRING("Poll For Mail"), &dwordResult); // reg_dword subKey->Close(); if (NS_SUCCEEDED(rv) && dwordResult != -1){ checkNewMail = PR_TRUE; checkNewMailTime = dwordResult / 60000; } } // these are in main windowsmail key and if they don't exist-not to worry // (less than 64 chars) e.g. account{4A18B81E-83CA-472A-8D7F-5301C0B97B8D}.oeaccount nsAutoString defMailAcct, defNewsAcct; key->ReadStringValue(NS_LITERAL_STRING("Default Mail Account"), defMailAcct); // ref_sz key->ReadStringValue(NS_LITERAL_STRING("Default News Account"), defNewsAcct); // ref_sz // This is essential to proceed; it is the location on disk of xml-type account files; // it is in reg_expand_sz so it will need expanding to absolute path. nsString storeRoot; rv = key->ReadStringValue(NS_LITERAL_STRING("Store Root"), storeRoot); key->Close(); // Finished with windows registry key. We do not want to return before this closing if (NS_FAILED(rv) || storeRoot.IsEmpty()) { IMPORT_LOG0("*** Error finding Windows Live Mail Store Root\n"); return PR_FALSE; } nsCOMPtr<nsILocalFile> file(do_CreateInstance(NS_LOCAL_FILE_CONTRACTID)); if (!file) { IMPORT_LOG0("*** Failed to create an nsILocalFile!\n"); return PR_FALSE; } nsCOMPtr<nsIMsgAccountManager> accMgr = do_GetService(NS_MSGACCOUNTMANAGER_CONTRACTID, &rv); if (NS_FAILED(rv)) { IMPORT_LOG0("*** Failed to create an account manager!\n"); return PR_FALSE; } PRUint32 size = ::ExpandEnvironmentStringsW((LPCWSTR)storeRoot.get(), nsnull, 0); nsString expandedStoreRoot; expandedStoreRoot.SetLength(size - 1); if (expandedStoreRoot.Length() != size - 1) return PR_FALSE; ::ExpandEnvironmentStringsW((LPCWSTR)storeRoot.get(), (LPWSTR)expandedStoreRoot.BeginWriting(), size); storeRoot = expandedStoreRoot; if (NS_FAILED(file->InitWithPath(storeRoot))) { IMPORT_LOG0("*** Failed get store root!\n"); return PR_FALSE; } nsCOMArray<nsILocalFile> fileArray; if (!getOEacctFiles(file, fileArray)) { IMPORT_LOG0("*** Failed to get OEacctFiles!\n"); return PR_FALSE; } // Loop through *.oeaccounts files looking for POP3 & IMAP & NNTP accounts // Ignore LDAP for now! int accounts = 0; nsCOMPtr<nsIDOMDocument> xmlDoc; for (PRInt32 i = fileArray.Count() - 1 ; i >= 0; i--){ MakeXMLdoc(getter_AddRefs(xmlDoc), fileArray[i]); nsAutoString value; nsCOMPtr<nsIMsgAccount> anAccount; if (NS_SUCCEEDED(GetValueForTag(xmlDoc, NS_LITERAL_STRING("IMAP_Server"), value))) if (DoIMAPServer(accMgr, xmlDoc, value, getter_AddRefs(anAccount))) accounts++; if (NS_SUCCEEDED(GetValueForTag(xmlDoc, NS_LITERAL_STRING("NNTP_Server"), value))) if (DoNNTPServer(accMgr, xmlDoc, value, getter_AddRefs(anAccount))) accounts++; if (NS_SUCCEEDED(GetValueForTag(xmlDoc, NS_LITERAL_STRING("POP3_Server"), value))) if (DoPOP3Server(accMgr, xmlDoc, value, getter_AddRefs(anAccount))) accounts++; if (anAccount) { nsString name; // Is this the default account? fileArray[i]->GetLeafName(name); if (defMailAcct.Equals(name)) accMgr->SetDefaultAccount(anAccount); } } // Now save the new acct info to pref file. rv = accMgr->SaveAccountInfo(); NS_ASSERTION(NS_SUCCEEDED(rv), "Can't save account info to pref file"); return( accounts != 0); }
bool WMSettings::DoImport(nsIMsgAccount **ppAccount) { // do the windows registry stuff first nsCOMPtr<nsIWindowsRegKey> key; if (NS_FAILED(nsWMUtils::FindWMKey(getter_AddRefs(key)))) { IMPORT_LOG0("*** Error finding Windows Live Mail registry account keys\n"); return false; } // 'poll for messages' setting in WM is a global setting-Like OE // for all accounts dword ==0xffffffff for don't poll else 1/60000 = minutes checkNewMailTime = 30; checkNewMail = false; nsresult rv; nsCOMPtr<nsIWindowsRegKey> subKey; if (NS_SUCCEEDED(key->OpenChild(NS_LITERAL_STRING("mail"), nsIWindowsRegKey::ACCESS_QUERY_VALUE, getter_AddRefs(subKey)))) { uint32_t dwordResult = -1; rv = subKey->ReadIntValue(NS_LITERAL_STRING("Poll For Mail"), &dwordResult); // reg_dword subKey->Close(); if (NS_SUCCEEDED(rv) && dwordResult != -1){ checkNewMail = true; checkNewMailTime = dwordResult / 60000; } } // these are in main windowsmail key and if they don't exist-not to worry // (less than 64 chars) e.g. account{4A18B81E-83CA-472A-8D7F-5301C0B97B8D}.oeaccount nsAutoString defMailAcct, defNewsAcct; key->ReadStringValue(NS_LITERAL_STRING("Default Mail Account"), defMailAcct); // ref_sz key->ReadStringValue(NS_LITERAL_STRING("Default News Account"), defNewsAcct); // ref_sz nsCOMPtr<nsIMsgAccountManager> accMgr = do_GetService(NS_MSGACCOUNTMANAGER_CONTRACTID, &rv); if (NS_FAILED(rv)) { IMPORT_LOG0("*** Failed to create an account manager!\n"); return false; } nsCOMArray<nsIFile> fileArray; if (NS_FAILED(nsWMUtils::GetOEAccountFiles(fileArray))) { IMPORT_LOG0("*** Failed to get .oeaccount file!\n"); return false; } // Loop through *.oeaccounts files looking for POP3 & IMAP & NNTP accounts // Ignore LDAP for now! int accounts = 0; nsCOMPtr<nsIDOMDocument> xmlDoc; for (int32_t i = fileArray.Count() - 1 ; i >= 0; i--){ nsWMUtils::MakeXMLdoc(getter_AddRefs(xmlDoc), fileArray[i]); nsAutoCString name; fileArray[i]->GetNativeLeafName(name); nsAutoString value; nsCOMPtr<nsIMsgAccount> anAccount; if (NS_SUCCEEDED(nsWMUtils::GetValueForTag(xmlDoc, "IMAP_Server", value))) if (DoIMAPServer(accMgr, xmlDoc, value, getter_AddRefs(anAccount))) accounts++; if (NS_SUCCEEDED(nsWMUtils::GetValueForTag(xmlDoc, "NNTP_Server", value))) if (DoNNTPServer(accMgr, xmlDoc, value, getter_AddRefs(anAccount))) accounts++; if (NS_SUCCEEDED(nsWMUtils::GetValueForTag(xmlDoc, "POP3_Server", value))) if (DoPOP3Server(accMgr, xmlDoc, value, getter_AddRefs(anAccount))) accounts++; if (anAccount) { nsString name; // Is this the default account? fileArray[i]->GetLeafName(name); if (defMailAcct.Equals(name)) accMgr->SetDefaultAccount(anAccount); } } // Now save the new acct info to pref file. rv = accMgr->SaveAccountInfo(); NS_ASSERTION(NS_SUCCEEDED(rv), "Can't save account info to pref file"); return accounts != 0; }
bool OESettings::DoImport(nsIMsgAccount **aAccount) { nsCOMPtr<nsIWindowsRegKey> key; nsresult rv = FindAccountsKey(getter_AddRefs(key)); if (NS_FAILED(rv)) { IMPORT_LOG0( "*** Error finding Outlook Express registry account keys\n"); return false; } nsCOMPtr<nsIMsgAccountManager> accMgr = do_GetService(NS_MSGACCOUNTMANAGER_CONTRACTID, &rv); if (NS_FAILED(rv)) { IMPORT_LOG0("*** Failed to create a account manager!\n"); return false; } nsAutoString defMailName; rv = GetDefaultMailAccount(defMailName); checkNewMail = false; checkNewMailTime = 30; rv = GetCheckMailInterval(&checkNewMailTime); if (NS_SUCCEEDED(rv)) checkNewMail = true; // Iterate the accounts looking for POP3 & IMAP accounts... // Ignore LDAP for now! uint32_t accounts = 0; nsAutoString keyComp; uint32_t childCount = 0; key->GetChildCount(&childCount); for (uint32_t i = 0; i < childCount; i++) { nsAutoString keyName; key->GetChildName(i, keyName); nsCOMPtr<nsIWindowsRegKey> subKey; rv = key->OpenChild(keyName, nsIWindowsRegKey::ACCESS_QUERY_VALUE, getter_AddRefs(subKey)); if (NS_FAILED(rv)) continue; nsAutoCString nativeKeyName; NS_CopyUnicodeToNative(keyName, nativeKeyName); IMPORT_LOG1("Opened Outlook Express account: %s\n", nativeKeyName.get()); nsIMsgAccount *anAccount = nullptr; nsAutoString value; rv = subKey->ReadStringValue(NS_LITERAL_STRING("IMAP Server"), value); if (NS_SUCCEEDED(rv) && DoIMAPServer(accMgr, subKey, value, &anAccount)) accounts++; rv = subKey->ReadStringValue(NS_LITERAL_STRING("NNTP Server"), value); if (NS_SUCCEEDED(rv) && DoNNTPServer(accMgr, subKey, value, &anAccount)) accounts++; rv = subKey->ReadStringValue(NS_LITERAL_STRING("POP3 Server"), value); if (NS_SUCCEEDED(rv) && DoPOP3Server(accMgr, subKey, value, &anAccount)) accounts++; if (anAccount) { // Is this the default account? keyComp = keyName; if (keyComp.Equals(defMailName)) accMgr->SetDefaultAccount(anAccount); NS_RELEASE(anAccount); } } // Now save the new acct info to pref file. rv = accMgr->SaveAccountInfo(); NS_ASSERTION(NS_SUCCEEDED(rv), "Can't save account info to pref file"); return accounts != 0; }