summaryrefslogtreecommitdiff
path: root/mailnews/import/oexpress/nsOESettings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mailnews/import/oexpress/nsOESettings.cpp')
-rw-r--r--mailnews/import/oexpress/nsOESettings.cpp921
1 files changed, 0 insertions, 921 deletions
diff --git a/mailnews/import/oexpress/nsOESettings.cpp b/mailnews/import/oexpress/nsOESettings.cpp
deleted file mode 100644
index 600acf74c5..0000000000
--- a/mailnews/import/oexpress/nsOESettings.cpp
+++ /dev/null
@@ -1,921 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
- Outlook Express (Win32) settings
-
-*/
-
-#include "nsOESettings.h"
-#include "mozilla/WindowsVersion.h"
-#include "nsCOMPtr.h"
-#include "nscore.h"
-#include "nsMsgUtils.h"
-#include "nsOEImport.h"
-#include "nsIComponentManager.h"
-#include "nsIServiceManager.h"
-#include "nsOERegUtil.h"
-#include "nsIMsgAccountManager.h"
-#include "nsIMsgAccount.h"
-#include "nsIImportSettings.h"
-#include "nsMsgBaseCID.h"
-#include "nsMsgCompCID.h"
-#include "nsMsgI18N.h"
-#include "nsISmtpService.h"
-#include "nsISmtpServer.h"
-#include "nsOEStringBundle.h"
-#include "OEDebugLog.h"
-#include "nsIPop3IncomingServer.h"
-#include "nsIImapIncomingServer.h"
-#include "nsINntpIncomingServer.h"
-#include "stdlib.h"
-#include <windows.h>
-#include "nsIWindowsRegKey.h"
-#include "nsComponentManagerUtils.h"
-
-#ifdef MOZILLA_INTERNAL_API
-#include "nsNativeCharsetUtils.h"
-#else
-#include "nsMsgI18N.h"
-#define NS_CopyNativeToUnicode(source, dest) \
- nsMsgI18NConvertToUnicode(nsMsgI18NFileSystemCharset(), source, dest)
-#define NS_CopyUnicodeToNative(source, dest) \
- nsMsgI18NConvertFromUnicode(nsMsgI18NFileSystemCharset(), source, dest)
-#endif
-
-class OESettings {
-public:
- static nsresult GetDefaultMailAccount(nsAString &aMailAccount);
- static nsresult GetCheckMailInterval(uint32_t *aInterval);
- static nsresult Find50Key(nsIWindowsRegKey **aKey);
- static nsresult Find40Key(nsIWindowsRegKey **aKey);
- static nsresult FindAccountsKey(nsIWindowsRegKey **aKey);
-
- static bool DoImport(nsIMsgAccount **ppAccount);
-
- static bool DoIMAPServer(nsIMsgAccountManager *aMgr,
- nsIWindowsRegKey *aKey,
- const nsString &aServerName,
- nsIMsgAccount **ppAccount);
- static bool DoPOP3Server(nsIMsgAccountManager *aMgr,
- nsIWindowsRegKey *aKey,
- const nsString &aServerName,
- nsIMsgAccount **ppAccount);
- static bool DoNNTPServer(nsIMsgAccountManager *aMgr,
- nsIWindowsRegKey *aKey,
- const nsString &aServerName,
- nsIMsgAccount **ppAccount);
-
- static void SetIncomingServerProperties(nsIMsgIncomingServer *aServer,
- nsIWindowsRegKey *aKey,
- const nsString &aKeyNamePrefix);
-
- static void SetIdentities(nsIMsgAccountManager *aMgr,
- nsIMsgAccount *aAccount,
- nsIWindowsRegKey *aKey,
- const nsString &aIncomgUserName,
- int32_t authMethodIncoming, bool isNNTP);
- static void SetSmtpServer(const nsString &aSmtpServer,
- nsIWindowsRegKey *aKey,
- nsIMsgIdentity *aId,
- const nsString &aIncomgUserName,
- int32_t authMethodIncoming);
- static nsresult GetAccountName(nsIWindowsRegKey *aKey,
- const nsString &aDefaultName,
- nsAString &aAccountName);
- static bool IsKB933612Applied();
-};
-
-static uint32_t checkNewMailTime;// OE global setting, let's default to 30
-static bool checkNewMail; // OE global setting, let's default to false
- // This won't cause unwanted autodownloads-
- // user can set prefs after import
-
-////////////////////////////////////////////////////////////////////////
-nsresult nsOESettings::Create(nsIImportSettings** aImport)
-{
- NS_PRECONDITION(aImport != nullptr, "null ptr");
- if (! aImport)
- return NS_ERROR_NULL_POINTER;
-
- *aImport = new nsOESettings();
- if (! *aImport)
- return NS_ERROR_OUT_OF_MEMORY;
-
- NS_ADDREF(*aImport);
- return NS_OK;
-}
-
-nsOESettings::nsOESettings()
-{
-}
-
-nsOESettings::~nsOESettings()
-{
-}
-
-NS_IMPL_ISUPPORTS(nsOESettings, nsIImportSettings)
-
-NS_IMETHODIMP nsOESettings::AutoLocate(char16_t **description, nsIFile **location, bool *_retval)
-{
- NS_PRECONDITION(description != nullptr, "null ptr");
- NS_PRECONDITION(_retval != nullptr, "null ptr");
- if (!description || !_retval)
- return NS_ERROR_NULL_POINTER;
-
- *description = nsOEStringBundle::GetStringByID(OEIMPORT_NAME);
-
- if (location)
- *location = nullptr;
-
- *_retval = false;
- nsCOMPtr<nsIWindowsRegKey> key;
- if (NS_FAILED(OESettings::Find50Key(getter_AddRefs(key))) &&
- NS_FAILED(OESettings::Find40Key(getter_AddRefs(key))))
- return NS_OK;
-
- if (NS_SUCCEEDED(OESettings::FindAccountsKey(getter_AddRefs(key))))
- *_retval = true;
-
- return NS_OK;
-}
-
-NS_IMETHODIMP nsOESettings::SetLocation(nsIFile *location)
-{
- return NS_OK;
-}
-
-NS_IMETHODIMP nsOESettings::Import(nsIMsgAccount **localMailAccount, bool *_retval)
-{
- NS_PRECONDITION(_retval != nullptr, "null ptr");
-
- if (OESettings::DoImport(localMailAccount)) {
- *_retval = true;
- IMPORT_LOG0("Settings import appears successful\n");
- }
- else {
- *_retval = false;
- IMPORT_LOG0("Settings import returned FALSE\n");
- }
-
- return NS_OK;
-}
-
-nsresult OESettings::GetDefaultMailAccount(nsAString &aMailAccount)
-{
- nsresult rv;
- nsCOMPtr<nsIWindowsRegKey> key =
- do_CreateInstance("@mozilla.org/windows-registry-key;1", &rv);
- NS_ENSURE_SUCCESS(rv, rv);
-
- nsAutoString userId;
- rv = nsOERegUtil::GetDefaultUserId(userId);
- // 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 (NS_SUCCEEDED(rv)) {
- nsAutoString path(NS_LITERAL_STRING("Identities\\"));
- path.Append(userId);
- path.AppendLiteral("\\Software\\Microsoft\\Internet Account Manager");
- rv = key->Open(nsIWindowsRegKey::ROOT_KEY_CURRENT_USER,
- path,
- nsIWindowsRegKey::ACCESS_QUERY_VALUE);
- if (NS_SUCCEEDED(rv))
- key->ReadStringValue(NS_LITERAL_STRING("Default Mail Account"), aMailAccount);
- }
-
- if (!aMailAccount.IsEmpty())
- return NS_OK;
-
- // else it must be here in original install location from orig code
- rv = key->Open(nsIWindowsRegKey::ROOT_KEY_CURRENT_USER,
- NS_LITERAL_STRING("Software\\Microsoft\\Outlook Express"),
- nsIWindowsRegKey::ACCESS_QUERY_VALUE);
- if (NS_FAILED(rv))
- return rv;
-
- return key->ReadStringValue(NS_LITERAL_STRING("Default Mail Account"), aMailAccount);
-}
-
-nsresult OESettings::GetCheckMailInterval(uint32_t *aInterval)
-{
- nsCOMPtr<nsIWindowsRegKey> key;
- // '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
- nsresult rv = Find50Key(getter_AddRefs(key));
- if (NS_FAILED(rv))
- rv = Find40Key(getter_AddRefs(key));
-
- if (NS_FAILED(rv))
- return rv;
-
- nsCOMPtr<nsIWindowsRegKey> subKey;
- rv = key->OpenChild(NS_LITERAL_STRING("Mail"),
- nsIWindowsRegKey::ACCESS_QUERY_VALUE,
- getter_AddRefs(subKey));
- if (NS_FAILED(rv))
- return rv;
-
- uint32_t intValue;
- rv = subKey->ReadIntValue(NS_LITERAL_STRING("Poll For Mail"), &intValue);
- if (NS_SUCCEEDED(rv) && intValue != PR_UINT32_MAX)
- *aInterval = intValue / 60000;
-
- return rv;
-}
-
-nsresult OESettings::FindAccountsKey(nsIWindowsRegKey **aKey)
-{
- nsAutoString userId;
- nsresult rv = nsOERegUtil::GetDefaultUserId(userId);
- if (NS_FAILED(rv))
- return rv;
-
- nsAutoString path(NS_LITERAL_STRING("Identities\\"));
- path.Append(userId);
- path.AppendLiteral("\\Software\\Microsoft\\Internet Account Manager\\Accounts");
-
- nsCOMPtr<nsIWindowsRegKey> key =
- do_CreateInstance("@mozilla.org/windows-registry-key;1", &rv);
- NS_ENSURE_SUCCESS(rv, rv);
-
- rv = key->Open(nsIWindowsRegKey::ROOT_KEY_CURRENT_USER,
- path,
- nsIWindowsRegKey::ACCESS_QUERY_VALUE |
- nsIWindowsRegKey::ACCESS_ENUMERATE_SUB_KEYS);
- if (NS_SUCCEEDED(rv)) {
- NS_ADDREF(*aKey = key);
- return rv;
- }
-
- rv = key->Open(nsIWindowsRegKey::ROOT_KEY_CURRENT_USER,
- NS_LITERAL_STRING("Software\\Microsoft\\Internet Account Manager\\Accounts"),
- nsIWindowsRegKey::ACCESS_QUERY_VALUE |
- nsIWindowsRegKey::ACCESS_ENUMERATE_SUB_KEYS);
- NS_IF_ADDREF(*aKey = key);
- return rv;
-}
-
-nsresult OESettings::Find50Key(nsIWindowsRegKey **aKey)
-{
- nsresult rv;
- nsCOMPtr<nsIWindowsRegKey> key =
- do_CreateInstance("@mozilla.org/windows-registry-key;1", &rv);
- NS_ENSURE_SUCCESS(rv, rv);
-
- nsAutoString userId;
- rv = nsOERegUtil::GetDefaultUserId(userId);
- if (NS_FAILED(rv))
- return rv;
-
- nsAutoString path(NS_LITERAL_STRING("Identities\\"));
- path.Append(userId);
- path.AppendLiteral("\\Software\\Microsoft\\Outlook Express\\5.0");
- rv = key->Open(nsIWindowsRegKey::ROOT_KEY_CURRENT_USER,
- path,
- nsIWindowsRegKey::ACCESS_QUERY_VALUE);
- NS_IF_ADDREF(*aKey = key);
-
- return rv;
-}
-
-nsresult OESettings::Find40Key(nsIWindowsRegKey **aKey)
-{
- nsresult rv;
- nsCOMPtr<nsIWindowsRegKey> key =
- do_CreateInstance("@mozilla.org/windows-registry-key;1", &rv);
- NS_ENSURE_SUCCESS(rv, rv);
-
- rv = key->Open(nsIWindowsRegKey::ROOT_KEY_CURRENT_USER,
- NS_LITERAL_STRING("Software\\Microsoft\\Outlook Express"),
- nsIWindowsRegKey::ACCESS_QUERY_VALUE);
- NS_IF_ADDREF(*aKey = key);
-
- return rv;
-}
-
-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;
-}
-
-nsresult OESettings::GetAccountName(nsIWindowsRegKey *aKey,
- const nsString &aDefaultName,
- nsAString &aAccountName)
-{
- nsresult rv;
- rv = aKey->ReadStringValue(NS_LITERAL_STRING("Account Name"), aAccountName);
- if (NS_FAILED(rv))
- aAccountName.Assign(aDefaultName);
-
- return NS_OK;
-}
-
-bool OESettings::DoIMAPServer(nsIMsgAccountManager *aMgr,
- nsIWindowsRegKey *aKey,
- const nsString &aServerName,
- nsIMsgAccount **ppAccount)
-{
- if (ppAccount)
- *ppAccount = nullptr;
-
- nsAutoString userName;
- nsresult rv;
- rv = aKey->ReadStringValue(NS_LITERAL_STRING("IMAP User Name"), userName);
- if (NS_FAILED(rv))
- return false;
-
- nsAutoCString nativeUserName;
- NS_CopyUnicodeToNative(userName, nativeUserName);
- nsAutoCString nativeServerName;
- NS_CopyUnicodeToNative(aServerName, nativeServerName);
- // I now have a user name/server name pair, find out if it already exists?
- nsCOMPtr<nsIMsgIncomingServer> in;
- rv = aMgr->FindServer(nativeUserName,
- nativeServerName,
- NS_LITERAL_CSTRING("imap"),
- getter_AddRefs(in));
- if (NS_SUCCEEDED(rv)) {
- // for an existing server we create another identity,
- // TB lists under 'manage identities'
- nsCOMPtr<nsIMsgAccount> account;
- rv = aMgr->FindAccountForServer(in, getter_AddRefs(account));
- if (NS_FAILED(rv))
- return false;
-
- IMPORT_LOG0("Created an identity and added to existing IMAP incoming server\n");
- // Fiddle with the identities
- int32_t authMethod;
- in->GetAuthMethod(&authMethod);
- SetIdentities(aMgr, account, aKey, userName, authMethod, false);
- if (ppAccount)
- account->QueryInterface(NS_GET_IID(nsIMsgAccount),
- (void **)ppAccount);
- return true;
- }
-
- // Create the incoming server and an account for it?
- rv = aMgr->CreateIncomingServer(nativeUserName,
- nativeServerName,
- NS_LITERAL_CSTRING("imap"),
- getter_AddRefs(in));
- NS_ENSURE_SUCCESS(rv, false);
-
- nsAutoString rootFolder;
- rv = aKey->ReadStringValue(NS_LITERAL_STRING("IMAP Root Folder"), rootFolder);
- if (NS_SUCCEEDED(rv) && !rootFolder.IsEmpty()) {
- nsCOMPtr<nsIImapIncomingServer> imapServer = do_QueryInterface(in);
- nsAutoCString nativeRootFolder;
- NS_CopyUnicodeToNative(rootFolder, nativeRootFolder);
- imapServer->SetServerDirectory(nativeRootFolder);
- }
-
- SetIncomingServerProperties(in, aKey, NS_LITERAL_STRING("IMAP "));
-
- IMPORT_LOG2("Created IMAP server named: %s, userName: %s\n",
- nativeServerName.get(), nativeUserName.get());
-
- nsAutoString prettyName;
- if (NS_SUCCEEDED(GetAccountName(aKey, aServerName, prettyName)))
- rv = in->SetPrettyName(prettyName);
-
- // We have a server, create an account.
- nsCOMPtr<nsIMsgAccount> account;
- rv = aMgr->CreateAccount(getter_AddRefs(account));
- if (NS_SUCCEEDED(rv) && account) {
- rv = account->SetIncomingServer(in);
-
- IMPORT_LOG0("Created an account and set the IMAP server as the incoming server\n");
-
- // Fiddle with the identities
- int32_t authMethod;
- in->GetAuthMethod(&authMethod);
- SetIdentities(aMgr, account, aKey, userName, authMethod, false);
- if (ppAccount)
- account->QueryInterface(NS_GET_IID(nsIMsgAccount), (void **)ppAccount);
- return true;
- }
-
- return false;
-}
-
-bool OESettings::DoPOP3Server(nsIMsgAccountManager *aMgr,
- nsIWindowsRegKey *aKey,
- const nsString &aServerName,
- nsIMsgAccount **ppAccount)
-{
- if (ppAccount)
- *ppAccount = nullptr;
-
- nsAutoString userName;
- nsresult rv;
- rv = aKey->ReadStringValue(NS_LITERAL_STRING("POP3 User Name"), userName);
- if (NS_FAILED(rv))
- return false;
-
- nsAutoCString nativeUserName;
- NS_CopyUnicodeToNative(userName, nativeUserName);
- nsAutoCString nativeServerName;
- NS_CopyUnicodeToNative(aServerName, nativeServerName);
-
- // I now have a user name/server name pair, find out if it already exists?
- nsCOMPtr<nsIMsgIncomingServer> in;
- rv = aMgr->FindServer(nativeUserName,
- nativeServerName,
- NS_LITERAL_CSTRING("pop3"),
- getter_AddRefs(in));
- if (NS_SUCCEEDED(rv)) {
- IMPORT_LOG2("Existing POP3 server named: %s, userName: %s\n",
- nativeUserName.get(), nativeServerName.get());
- // for an existing server we create another identity,
- // TB listed under 'manage identities'
- nsCOMPtr<nsIMsgAccount> account;
- rv = aMgr->FindAccountForServer(in, getter_AddRefs(account));
- if (NS_SUCCEEDED(rv) && account) {
- IMPORT_LOG0("Created identity and added to existing POP3 incoming server.\n");
- // Fiddle with the identities
- int32_t authMethod;
- in->GetAuthMethod(&authMethod);
- SetIdentities(aMgr, account, aKey, userName, authMethod, false);
- if (ppAccount)
- account->QueryInterface(NS_GET_IID(nsIMsgAccount), (void **)ppAccount);
- return true;
- }
- return false;
- }
-
- // Create the incoming server and an account for it?
- rv = aMgr->CreateIncomingServer(nativeUserName,
- nativeServerName,
- NS_LITERAL_CSTRING("pop3"),
- getter_AddRefs( in));
- if (NS_FAILED(rv))
- return false;
-
- SetIncomingServerProperties(in, aKey, NS_LITERAL_STRING("POP3 "));
-
- nsCOMPtr<nsIPop3IncomingServer> pop3Server = do_QueryInterface(in);
- if (pop3Server) {
- // set local folders as the Inbox to use for this POP3 server
- nsCOMPtr<nsIMsgIncomingServer> localFoldersServer;
- aMgr->GetLocalFoldersServer(getter_AddRefs(localFoldersServer));
-
- if (!localFoldersServer)
- {
- // If Local Folders does not exist already, create it
-
- if (NS_FAILED(aMgr->CreateLocalMailAccount())) {
- IMPORT_LOG0("*** Failed to create Local Folders!\n");
- return false;
- }
-
- aMgr->GetLocalFoldersServer(getter_AddRefs(localFoldersServer));
- }
-
- // now get the account for this server
- nsCOMPtr<nsIMsgAccount> localFoldersAccount;
- aMgr->FindAccountForServer(localFoldersServer, getter_AddRefs(localFoldersAccount));
- if (localFoldersAccount)
- {
- nsCString localFoldersAcctKey;
- localFoldersAccount->GetKey(localFoldersAcctKey);
- pop3Server->SetDeferredToAccount(localFoldersAcctKey);
- }
-
- uint32_t intValue;
- rv = aKey->ReadIntValue(NS_LITERAL_STRING("POP3 Skip Account"), &intValue);
- // OE:0=='Include this account when receiving mail or synchronizing'==
- // TB:1==AM:Server:advanced:Include this server when getting new mail
- pop3Server->SetDeferGetNewMail(NS_SUCCEEDED(rv) && intValue == 0);
-
- rv = aKey->ReadIntValue(NS_LITERAL_STRING("Leave Mail On Server"),
- &intValue);
- pop3Server->SetLeaveMessagesOnServer(NS_SUCCEEDED(rv) && intValue == 1);
-
- rv = aKey->ReadIntValue(NS_LITERAL_STRING("Remove When Deleted"),
- &intValue);
- pop3Server->SetDeleteMailLeftOnServer(NS_SUCCEEDED(rv) && intValue == 1);
-
- rv = aKey->ReadIntValue(NS_LITERAL_STRING("Remove When Expired"),
- &intValue);
- pop3Server->SetDeleteByAgeFromServer(NS_SUCCEEDED(rv) && intValue == 1);
-
- rv = aKey->ReadIntValue(NS_LITERAL_STRING("Expire Days"),
- &intValue);
- if (NS_SUCCEEDED(rv))
- pop3Server->SetNumDaysToLeaveOnServer(static_cast<int32_t>(intValue));
- }
- IMPORT_LOG2("Created POP3 server named: %s, userName: %s\n",
- nativeServerName.get(), nativeUserName.get());
- nsString prettyName;
- if (NS_SUCCEEDED(GetAccountName(aKey, aServerName, prettyName)))
- rv = in->SetPrettyName(prettyName);
-
- // We have a server, create an account.
- nsCOMPtr<nsIMsgAccount> account;
- rv = aMgr->CreateAccount(getter_AddRefs( account));
- if (NS_SUCCEEDED( rv) && account) {
- rv = account->SetIncomingServer(in);
- IMPORT_LOG0("Created a new account and set the incoming server to the POP3 server.\n");
-
- int32_t authMethod;
- in->GetAuthMethod(&authMethod);
- // Fiddle with the identities
- SetIdentities(aMgr, account, aKey, userName, authMethod, false);
- if (ppAccount)
- account->QueryInterface(NS_GET_IID(nsIMsgAccount),
- (void **)ppAccount);
- return true;
- }
-
- return false;
-}
-
-bool OESettings::DoNNTPServer(nsIMsgAccountManager *aMgr,
- nsIWindowsRegKey *aKey,
- const nsString &aServerName,
- nsIMsgAccount **ppAccount)
-{
- if (ppAccount)
- *ppAccount = nullptr;
-
- nsAutoString userName;
- nsresult rv;
- // this only exists if NNTP server requires it or not anon login
- rv = aKey->ReadStringValue(NS_LITERAL_STRING("NNTP User Name"), userName);
-
- bool result = false;
-
- nsAutoCString nativeServerName;
- NS_CopyUnicodeToNative(aServerName, nativeServerName);
- // I now have a user name/server name pair, find out if it already exists?
- // NNTP can have empty user name. This is wild card in findserver
- nsCOMPtr<nsIMsgIncomingServer> in;
- rv = aMgr->FindServer(EmptyCString(),
- nativeServerName,
- NS_LITERAL_CSTRING("nntp"),
- getter_AddRefs(in));
- if (NS_FAILED(rv) || (in == nullptr)) {
- // Create the incoming server and an account for it?
- rv = aMgr->CreateIncomingServer(EmptyCString(),
- nativeServerName,
- NS_LITERAL_CSTRING("nntp"),
- getter_AddRefs(in));
- if (NS_SUCCEEDED(rv) && in) {
- uint32_t port = 0;
- rv = aKey->ReadIntValue(NS_LITERAL_STRING("NNTP Port"),
- &port);
- if (NS_SUCCEEDED(rv) && port && port != 119)
- in->SetPort(static_cast<int32_t>(port));
-
- nsAutoCString nativeUserName;
- NS_CopyUnicodeToNative(userName, nativeUserName);
- // do nntpincomingserver stuff
- nsCOMPtr<nsINntpIncomingServer> nntpServer = do_QueryInterface(in);
- if (nntpServer && !userName.IsEmpty()) {
- nntpServer->SetPushAuth(true);
- in->SetUsername(nativeUserName);
- }
-
- IMPORT_LOG2("Created NNTP server named: %s, userName: %s\n",
- nativeServerName.get(), nativeUserName.get());
-
- nsString prettyName;
- if (NS_SUCCEEDED(GetAccountName(aKey, aServerName, prettyName)))
- rv = in->SetPrettyName(prettyName);
-
- // We have a server, create an account.
- nsCOMPtr<nsIMsgAccount> account;
- rv = aMgr->CreateAccount(getter_AddRefs(account));
- if (NS_SUCCEEDED(rv) && account) {
- rv = account->SetIncomingServer(in);
-
- IMPORT_LOG0("Created an account and set the NNTP server as the incoming server\n");
-
- // Fiddle with the identities
- SetIdentities(aMgr, account, aKey, userName, 0, true);
- result = true;
- if (ppAccount)
- account->QueryInterface(NS_GET_IID(nsIMsgAccount), (void **)ppAccount);
- }
- }
- }
- else if (NS_SUCCEEDED(rv) && in) {
- // for the existing server...
- nsCOMPtr<nsIMsgAccount> account;
- rv = aMgr->FindAccountForServer(in, getter_AddRefs(account));
- if (NS_SUCCEEDED(rv) && account) {
- IMPORT_LOG0("Using existing account and set the NNTP server as the incoming server\n");
- // Fiddle with the identities
- SetIdentities(aMgr, account, aKey, userName, 0, true);
- if (ppAccount)
- account->QueryInterface(NS_GET_IID(nsIMsgAccount),
- (void **)ppAccount);
- return true;
- }
- }
- else
- result = true;
-
- return result;
-}
-
-void OESettings::SetIncomingServerProperties(nsIMsgIncomingServer *aServer,
- nsIWindowsRegKey *aKey,
- const nsString &aKeyNamePrefix)
-{
- nsresult rv;
- uint32_t secureConnection = 0;
- nsString keyName(aKeyNamePrefix);
- keyName.AppendLiteral("Secure Connection");
- rv = aKey->ReadIntValue(keyName, &secureConnection);
- if (NS_SUCCEEDED(rv) && secureConnection == 1)
- aServer->SetSocketType(nsMsgSocketType::SSL);
-
- uint32_t port = 0;
- keyName.SetLength(aKeyNamePrefix.Length());
- keyName.AppendLiteral("Port");
- rv = aKey->ReadIntValue(keyName, &port);
- if (NS_SUCCEEDED(rv) && port)
- aServer->SetPort(static_cast<int32_t>(port));
-
- int32_t authMethod;
- uint32_t useSicily = 0;
- keyName.SetLength(aKeyNamePrefix.Length());
- keyName.AppendLiteral("Use Sicily");
- rv = aKey->ReadIntValue(keyName, &useSicily);
- if (NS_SUCCEEDED(rv) && useSicily)
- authMethod = nsMsgAuthMethod::secure;
- else
- authMethod = nsMsgAuthMethod::passwordCleartext;
- aServer->SetAuthMethod(authMethod);
-
- aServer->SetDoBiff(checkNewMail);
- aServer->SetBiffMinutes(checkNewMailTime);
-}
-
-void OESettings::SetIdentities(nsIMsgAccountManager *aMgr,
- nsIMsgAccount *pAcc,
- nsIWindowsRegKey *aKey,
- const nsString &aIncomgUserName,
- int32_t authMethodIncoming,
- bool isNNTP)
-{
- // Get the relevant information for an identity
- nsresult rv;
- nsAutoString name;
- rv = aKey->ReadStringValue(isNNTP ?
- NS_LITERAL_STRING("NNTP Display Name") :
- NS_LITERAL_STRING("SMTP Display Name"),
- name);
- nsAutoString email;
- rv = aKey->ReadStringValue(isNNTP ?
- NS_LITERAL_STRING("NNTP Email Address") :
- NS_LITERAL_STRING("SMTP Email Address"),
- email);
- nsAutoString reply;
- rv = aKey->ReadStringValue(isNNTP ?
- NS_LITERAL_STRING("NNTP Reply To Email Address") :
- NS_LITERAL_STRING("SMTP Reply To Email Address"),
- reply);
- nsAutoString orgName;
- rv = aKey->ReadStringValue(isNNTP ?
- NS_LITERAL_STRING("NNTP Organization Name") :
- NS_LITERAL_STRING("SMTP Organization Name"),
- orgName);
-
- nsCOMPtr<nsIMsgIdentity> id;
- rv = aMgr->CreateIdentity(getter_AddRefs(id));
- if (NS_FAILED(rv))
- return;
-
- id->SetFullName(name);
- id->SetOrganization(orgName);
-
- nsAutoCString nativeEmail;
- NS_CopyUnicodeToNative(email, nativeEmail);
- id->SetEmail(nativeEmail);
- if (!reply.IsEmpty()) {
- nsAutoCString nativeReply;
- NS_CopyUnicodeToNative(reply, nativeReply);
- id->SetReplyTo(nativeReply);
- }
-
- // Outlook Express users are used to top style quoting.
- id->SetReplyOnTop(isNNTP ? 0 : 1);
- pAcc->AddIdentity(id);
-
- nsAutoCString nativeName;
- NS_CopyUnicodeToNative(name, nativeName);
- IMPORT_LOG0("Created identity and added to the account\n");
- IMPORT_LOG1("\tname: %s\n", nativeName.get());
- IMPORT_LOG1("\temail: %s\n", nativeEmail.get());
-
- if (isNNTP) // NNTP does not use SMTP in OE or TB
- return;
- nsAutoString smtpServer;
- rv = aKey->ReadStringValue(NS_LITERAL_STRING("SMTP Server"), smtpServer);
- SetSmtpServer(smtpServer, aKey, id, aIncomgUserName, authMethodIncoming);
-}
-
-void OESettings::SetSmtpServer(const nsString &aSmtpServer,
- nsIWindowsRegKey *aKey,
- nsIMsgIdentity *aId,
- const nsString &aIncomgUserName,
- int32_t authMethodIncoming)
-{
- // set the id.smtpserver accordingly
- // first we have to calculate the smtp user name which is based on sicily
- if (!aKey || !aId || aIncomgUserName.IsEmpty() || aSmtpServer.IsEmpty())
- return;
- nsCString smtpServerKey;
- // smtp user name depends on sicily which may or not exist
- uint32_t useSicily = 0;
- nsresult rv = aKey->ReadIntValue(NS_LITERAL_STRING("SMTP Use Sicily"),
- &useSicily);
- nsAutoString userName;
- switch (useSicily) {
- case 1:
- case 3:
- // has to go in whether empty or no
- // shouldn't be empty but better safe than sorry
- aKey->ReadStringValue(NS_LITERAL_STRING("SMTP User Name"), userName);
- break;
- case 2:
- userName = aIncomgUserName;
- break;
- default:
- break; // initial userName == ""
- }
-
- nsCOMPtr<nsISmtpService> smtpService(do_GetService(NS_SMTPSERVICE_CONTRACTID, &rv));
- if (NS_SUCCEEDED(rv) && smtpService) {
- nsCOMPtr<nsISmtpServer> foundServer;
- // don't try to make another server
- // regardless if username doesn't match
- nsAutoCString nativeUserName;
- NS_CopyUnicodeToNative(userName, nativeUserName);
- nsAutoCString nativeSmtpServer;
- NS_CopyUnicodeToNative(aSmtpServer, nativeSmtpServer);
- rv = smtpService->FindServer(nativeUserName.get(),
- nativeSmtpServer.get(),
- getter_AddRefs(foundServer));
- if (NS_SUCCEEDED(rv) && foundServer) {
- // set our account keyed to this smptserver key
- foundServer->GetKey(getter_Copies(smtpServerKey));
- aId->SetSmtpServerKey(smtpServerKey);
-
- IMPORT_LOG1("SMTP server already exists: %s\n",
- nativeSmtpServer.get());
- }
- else {
- nsCOMPtr<nsISmtpServer> smtpServer;
- rv = smtpService->CreateServer(getter_AddRefs(smtpServer));
- if (NS_SUCCEEDED(rv) && smtpServer) {
- uint32_t port = 0;
- rv = aKey->ReadIntValue(NS_LITERAL_STRING("SMTP Port"),
- &port);
- if (NS_SUCCEEDED(rv) && port)
- smtpServer->SetPort(static_cast<int32_t>(port));
-
- int32_t socketType = nsMsgSocketType::plain;
- uint32_t secureConnection = 0;
- rv = aKey->ReadIntValue(NS_LITERAL_STRING("SMTP Secure Connection"),
- &secureConnection);
- if (NS_SUCCEEDED(rv) && secureConnection == 1) {
- // Outlook Express does not support STARTTLS without KB933612 fix.
- if (IsKB933612Applied() && port != 465)
- socketType = nsMsgSocketType::alwaysSTARTTLS;
- else
- socketType = nsMsgSocketType::SSL;
- }
- smtpServer->SetSocketType(socketType);
- smtpServer->SetUsername(nativeUserName);
- switch (useSicily) {
- case 1 :
- smtpServer->SetAuthMethod(nsMsgAuthMethod::secure);
- break;
- case 2 : // requires SMTP authentication to use the incoming server settings
- smtpServer->SetAuthMethod(authMethodIncoming);
- break;
- case 3 :
- smtpServer->SetAuthMethod(nsMsgAuthMethod::passwordCleartext);
- break;
- default:
- smtpServer->SetAuthMethod(nsMsgAuthMethod::none);
- }
-
- smtpServer->SetHostname(nativeSmtpServer);
-
- smtpServer->GetKey(getter_Copies(smtpServerKey));
- aId->SetSmtpServerKey(smtpServerKey);
-
- IMPORT_LOG1("Created new SMTP server: %s\n",
- nativeSmtpServer.get());
- }
- }
- }
-}
-
-bool OESettings::IsKB933612Applied()
-{
- // The following versions of Windows include KB933612 fix:
- // - Windows 7 and future versions of Windows
- // - Windows Vista, SP1 or later
- // - Windows Server 2003, SP2 or later
- // - Windows XP, SP3 or later
- //
- // The following versions do not:
- // - Windows Vista SP0
- // - Windows Server 2003, SP1 or earlier
- // - Windows XP, SP2 or earlier
- //
- // See http://support.microsoft.com/kb/929123 and
- // http://support.microsoft.com/kb/933612
- //
- // Note that mozilla::IsWin2003SP2OrLater() will return true for
- // Windows Vista and mozilla::IsXPSP3OrLater() will return true
- // for Windows Server 2003.
- return mozilla::IsVistaSP1OrLater() ||
- !mozilla::IsWin2003OrLater() && mozilla::IsXPSP3OrLater() ||
- !mozilla::IsVistaOrLater() && mozilla::IsWin2003SP2OrLater();
-}
-