mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-12 12:55:46 +00:00
working on spam UI, making it match the spec. see bug #169638.
not visible to the user yet. r/sr=bienvenu
This commit is contained in:
parent
0503099ac2
commit
421c0d835e
@ -13,7 +13,17 @@ interface nsISpamSettings: nsISupports {
|
||||
attribute long level;
|
||||
|
||||
attribute boolean moveOnSpam;
|
||||
/**
|
||||
* 0 for actionTargetAccount, 1 for actionTargetFolder
|
||||
* most consumers will just use spamFolderURI
|
||||
*/
|
||||
attribute long moveTargetMode;
|
||||
attribute string actionTargetAccount;
|
||||
attribute string actionTargetFolder;
|
||||
/**
|
||||
* built from moveTargetMode, actionTargetAccount, actionTargetFolder
|
||||
*/
|
||||
readonly attribute string spamFolderURI;
|
||||
|
||||
attribute boolean purge;
|
||||
/**
|
||||
|
@ -61,15 +61,24 @@ function setupForAccountFromFolder(aURI)
|
||||
serverList.selectedItem = menuitems[0];
|
||||
|
||||
// set up the UI for this server
|
||||
// set up the level radio group
|
||||
document.getElementById("level").selectedItem = document.getElementById("level" + obj.settings.level);
|
||||
|
||||
// set up the junk mail folder picker
|
||||
document.getElementById("moveOnSpam").checked = obj.settings.moveOnSpam;
|
||||
document.getElementById("moveTargetMode").selectedItem = document.getElementById("moveTargetMode" + obj.settings.moveTargetMode);
|
||||
|
||||
// if there is a target account, use it. else use the current account
|
||||
SetFolderPicker(obj.settings.actionTargetAccount ? obj.settings.actionTargetAccount : obj.server.serverURI, "actionTargetAccount");
|
||||
|
||||
if (obj.settings.actionTargetFolder)
|
||||
SetFolderPicker(obj.settings.actionTargetFolder, "actionTargetFolder");
|
||||
|
||||
// set up the purge UI
|
||||
document.getElementById("purge").checked = obj.settings.purge;
|
||||
document.getElementById("purgeInterval").value = obj.settings.purgeInterval;
|
||||
|
||||
// set up the whitelist UI
|
||||
document.getElementById("useWhiteList").checked = obj.settings.useWhiteList;
|
||||
var abList = document.getElementById("whiteListAbURI");
|
||||
menuitems = abList.getElementsByAttribute("id", obj.settings.whiteListAbURI);
|
||||
@ -98,6 +107,8 @@ function storeSettings(aSettings)
|
||||
aSettings.level = document.getElementById("level").selectedItem.getAttribute("value");
|
||||
|
||||
aSettings.moveOnSpam = document.getElementById("moveOnSpam").checked;
|
||||
aSettings.moveTargetMode = document.getElementById("moveTargetMode").selectedItem.getAttribute("value");
|
||||
aSettings.actionTargetAccount = document.getElementById("actionTargetAccount").getAttribute("uri");
|
||||
aSettings.actionTargetFolder = document.getElementById("actionTargetFolder").getAttribute("uri");
|
||||
|
||||
aSettings.purge = document.getElementById("purge").checked;
|
||||
@ -109,4 +120,6 @@ function storeSettings(aSettings)
|
||||
|
||||
function doHelpButton()
|
||||
{
|
||||
// until we have help, I use this for testing
|
||||
dump("XXX " + gSpamSettings[gCurrentServer.key].settings.spamFolderURI + "\n");
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<?xml-stylesheet href="chrome://messenger/skin/messenger.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://messenger/skin/accountManage.css" type="text/css"?>
|
||||
|
||||
<?xul-overlay href="chrome://global/content/dialogOverlay.xul"?>
|
||||
|
||||
@ -71,10 +71,32 @@
|
||||
|
||||
<separator/>
|
||||
|
||||
<hbox align="center">
|
||||
<checkbox id="moveOnSpam" accesskey="&move.accesskey;" label="&move.label;"/>
|
||||
<menulist id="actionTargetFolder"/>
|
||||
</hbox>
|
||||
<vbox align="start">
|
||||
<label value="&action.label;"/>
|
||||
|
||||
<checkbox id="moveOnSpam" label="&move.label;"/>
|
||||
|
||||
<radiogroup id="moveTargetMode">
|
||||
<grid class="specialFolderPickerGrid">
|
||||
<columns>
|
||||
<column flex="1"/>
|
||||
<column flex="2"/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row align="center">
|
||||
<radio id="moveTargetMode0"
|
||||
value="0" label="&junkFolderOn.label;"/>
|
||||
<menulist id="actionTargetAccount" flex="1"/>
|
||||
</row>
|
||||
<row align="center">
|
||||
<radio id="moveTargetMode1"
|
||||
value="1" label="&otherFolder.label;"/>
|
||||
<menulist id="actionTargetFolder"/>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
</radiogroup>
|
||||
</vbox>
|
||||
|
||||
<hbox autostretch="never" align="center">
|
||||
<checkbox id="purge" accesskey="&purge1.accesskey;" label="&purge1.label;"/>
|
||||
|
@ -319,6 +319,28 @@ Rights Reserved.
|
||||
<menupopup />
|
||||
</menulist>
|
||||
|
||||
<menulist label="&chooseaccountclickhere.label;"
|
||||
uri="" id="actionTargetAccount"
|
||||
sortResource="http://home.netscape.com/NC-rdf#FolderTreeName"
|
||||
sortDirection="ascending"
|
||||
datasources="rdf:msgaccountmanager rdf:mailnewsfolders"
|
||||
ref="msgaccounts:/">
|
||||
<template>
|
||||
<rule nc:IsServer="true" nc:CanCreateFoldersOnServer="true">
|
||||
<menupopup>
|
||||
<menuitem uri="..." class="folderMenuItem menuitem-iconic"
|
||||
label="rdf:http://home.netscape.com/NC-rdf#Name"
|
||||
oncommand="PickedMsgFolder(event.target,'actionTargetAccount')"
|
||||
IsServer="rdf:http://home.netscape.com/NC-rdf#IsServer"
|
||||
IsSecure="rdf:http://home.netscape.com/NC-rdf#IsSecure"
|
||||
ServerType="rdf:http://home.netscape.com/NC-rdf#ServerType"
|
||||
CanCreateFoldersOnServer="rdf:http://home.netscape.com/NC-rdf#CanCreateFoldersOnServer"/>
|
||||
</menupopup>
|
||||
</rule>
|
||||
</template>
|
||||
<menupopup />
|
||||
</menulist>
|
||||
|
||||
<menulist label="&chooseaccountclickhere.label;"
|
||||
uri="" id="msgFccAccountPicker"
|
||||
sortResource="http://home.netscape.com/NC-rdf#FolderTreeName"
|
||||
|
@ -3,7 +3,7 @@
|
||||
<!ENTITY account.accesskey "A">
|
||||
<!ENTITY viewLog.label "Junk Mail Log">
|
||||
<!ENTITY viewLog.accesskey "j">
|
||||
<!ENTITY info1.label "Junk Mail Controls evaluate your incoming messages and identify those which are most likely to be junk.">
|
||||
<!ENTITY info1.label "Junk Mail Controls evaluate your incoming messages, and identify those which are most likely to be "junk" mail or unsolicted mail.">
|
||||
<!ENTITY info2.label "Choose a level of control below. A high level will identify more junk mail but may identify some valid messages as junk, while a low level will identify less junk mail but is less likely to identify some valid messages as junk.">
|
||||
<!ENTITY off.label "Off">
|
||||
<!ENTITY off.accesskey "O">
|
||||
@ -17,10 +17,12 @@
|
||||
<!ENTITY high.accesskey "H">
|
||||
<!ENTITY highest.label "Highest">
|
||||
<!ENTITY highest.accesskey "s">
|
||||
<!ENTITY move.label "When messages are identitied as junk, move them to a folder:">
|
||||
<!ENTITY move.accesskey "n">
|
||||
<!ENTITY action.label "When messages are identified as junk mail:">
|
||||
<!ENTITY move.label "Move the messages to:">
|
||||
<!ENTITY otherFolder.label "Other:">
|
||||
<!ENTITY junkFolderOn.label ""Junk" Folder on:">
|
||||
<!ENTITY purge1.label "Automatically delete messages identified as junk after">
|
||||
<!ENTITY purge1.accesskey "u">
|
||||
<!ENTITY purge2.label "days">
|
||||
<!ENTITY whitelist.label "Always accept messages from people in my address book:">
|
||||
<!ENTITY whitelist.accesskey "c">
|
||||
<!ENTITY whitelist.accesskey "c">
|
||||
|
@ -123,6 +123,7 @@ sentFolderName=Sent
|
||||
draftsFolderName=Drafts
|
||||
templatesFolderName=Templates
|
||||
unsentFolderName=Unsent Messages
|
||||
junkFolderName=Junk
|
||||
|
||||
# Error message for special folder deletion on imap accounts
|
||||
# LOCALIZATION NOTES (specialFolderDeletionErr): Do not translate "IMAP" in the line below
|
||||
|
@ -5,14 +5,18 @@
|
||||
#include "prmem.h"
|
||||
#include "nsIFileStreams.h"
|
||||
|
||||
#define MOVE_TARGET_MODE_JUNK_ON_ACCOUNT 0
|
||||
#define MOVE_TARGET_MODE_FOLDER 1
|
||||
|
||||
nsSpamSettings::nsSpamSettings()
|
||||
{
|
||||
NS_INIT_ISUPPORTS();
|
||||
|
||||
mLevel = 0;
|
||||
mMoveOnSpam = PR_FALSE;
|
||||
mMoveTargetMode = MOVE_TARGET_MODE_JUNK_ON_ACCOUNT;
|
||||
mPurge = PR_FALSE;
|
||||
mPurgeInterval = 15; // 15 days
|
||||
mPurgeInterval = 14; // 14 days
|
||||
mUseWhiteList = PR_FALSE;
|
||||
mLoggingEnabled = PR_FALSE;
|
||||
}
|
||||
@ -38,6 +42,21 @@ NS_IMETHODIMP nsSpamSettings::SetLevel(PRInt32 aLevel)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSpamSettings::GetMoveTargetMode(PRInt32 *aMoveTargetMode)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aMoveTargetMode);
|
||||
*aMoveTargetMode = mMoveTargetMode;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsSpamSettings::SetMoveTargetMode(PRInt32 aMoveTargetMode)
|
||||
{
|
||||
NS_ASSERTION((aMoveTargetMode == 0 || aMoveTargetMode == 1), "bad mode");
|
||||
mMoveTargetMode = aMoveTargetMode;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMPL_GETSET(nsSpamSettings, LoggingEnabled, PRBool, mLoggingEnabled);
|
||||
NS_IMPL_GETSET(nsSpamSettings, MoveOnSpam, PRBool, mMoveOnSpam);
|
||||
NS_IMPL_GETSET(nsSpamSettings, Purge, PRBool, mPurge);
|
||||
@ -56,6 +75,19 @@ NS_IMETHODIMP nsSpamSettings::SetWhiteListAbURI(const char * aWhiteListAbURI)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsSpamSettings::GetActionTargetAccount(char * *aActionTargetAccount)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aActionTargetAccount);
|
||||
*aActionTargetAccount = ToNewCString(mActionTargetAccount);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsSpamSettings::SetActionTargetAccount(const char * aActionTargetAccount)
|
||||
{
|
||||
mActionTargetAccount = aActionTargetAccount;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsSpamSettings::GetActionTargetFolder(char * *aActionTargetFolder)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aActionTargetFolder);
|
||||
@ -263,6 +295,14 @@ NS_IMETHODIMP nsSpamSettings::Clone(nsISpamSettings *aSpamSettings)
|
||||
rv = aSpamSettings->GetLevel(&mLevel);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
rv = aSpamSettings->GetMoveTargetMode(&mMoveTargetMode);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
nsXPIDLCString actionTargetAccount;
|
||||
rv = aSpamSettings->GetActionTargetAccount(getter_Copies(actionTargetAccount));
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
mActionTargetAccount = actionTargetAccount;
|
||||
|
||||
nsXPIDLCString actionTargetFolder;
|
||||
rv = aSpamSettings->GetActionTargetFolder(getter_Copies(actionTargetFolder));
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
@ -275,3 +315,29 @@ NS_IMETHODIMP nsSpamSettings::Clone(nsISpamSettings *aSpamSettings)
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsSpamSettings::GetSpamFolderURI(char **aSpamFolderURI)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aSpamFolderURI);
|
||||
nsresult rv;
|
||||
|
||||
if (mMoveTargetMode == MOVE_TARGET_MODE_FOLDER)
|
||||
return GetActionTargetFolder(aSpamFolderURI);
|
||||
|
||||
NS_ASSERTION(mMoveTargetMode == MOVE_TARGET_MODE_JUNK_ON_ACCOUNT, "bad mode");
|
||||
|
||||
// if the mode is MOVE_TARGET_MODE_JUNK_ON_ACCOUNT
|
||||
// the spam folder URI = account uri + "/Junk"
|
||||
nsXPIDLCString folderURI;
|
||||
rv = GetActionTargetAccount(getter_Copies(folderURI));
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
// see nsMsgFolder::SetPrettyName() for where the pretty name is set.
|
||||
folderURI.Append("/Junk");
|
||||
*aSpamFolderURI = ToNewCString(folderURI);
|
||||
if (!*aSpamFolderURI)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
else
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
@ -22,6 +22,8 @@ private:
|
||||
PRInt32 mLevel;
|
||||
|
||||
PRBool mMoveOnSpam;
|
||||
PRInt32 mMoveTargetMode;
|
||||
nsCString mActionTargetAccount;
|
||||
nsCString mActionTargetFolder;
|
||||
|
||||
PRBool mPurge;
|
||||
|
@ -95,6 +95,7 @@ PRUnichar *nsMsgFolder::kLocalizedSentName;
|
||||
PRUnichar *nsMsgFolder::kLocalizedDraftsName;
|
||||
PRUnichar *nsMsgFolder::kLocalizedTemplatesName;
|
||||
PRUnichar *nsMsgFolder::kLocalizedUnsentName;
|
||||
PRUnichar *nsMsgFolder::kLocalizedJunkName;
|
||||
|
||||
nsIAtom * nsMsgFolder::kTotalMessagesAtom = nsnull;
|
||||
nsIAtom * nsMsgFolder::kBiffStateAtom = nsnull;
|
||||
@ -200,6 +201,7 @@ nsMsgFolder::~nsMsgFolder(void)
|
||||
CRTFREEIF(kLocalizedDraftsName);
|
||||
CRTFREEIF(kLocalizedTemplatesName);
|
||||
CRTFREEIF(kLocalizedUnsentName);
|
||||
CRTFREEIF(kLocalizedJunkName);
|
||||
#ifdef MSG_FASTER_URI_PARSING
|
||||
mParsingURL = nsnull;
|
||||
#endif
|
||||
@ -234,6 +236,8 @@ nsMsgFolder::initializeStrings()
|
||||
&kLocalizedDraftsName);
|
||||
bundle->GetStringFromName(NS_LITERAL_STRING("templatesFolderName").get(),
|
||||
&kLocalizedTemplatesName);
|
||||
bundle->GetStringFromName(NS_LITERAL_STRING("junkFolderName").get(),
|
||||
&kLocalizedJunkName);
|
||||
bundle->GetStringFromName(NS_LITERAL_STRING("unsentFolderName").get(),
|
||||
&kLocalizedUnsentName);
|
||||
return NS_OK;
|
||||
@ -877,27 +881,22 @@ NS_IMETHODIMP nsMsgFolder::SetPrettyName(const PRUnichar *name)
|
||||
nsAutoString unicodeName(name);
|
||||
|
||||
//Set pretty name only if special flag is set and if it the default folder name
|
||||
|
||||
if (mFlags & MSG_FOLDER_FLAG_INBOX && unicodeName.Equals(NS_LITERAL_STRING("Inbox"), nsCaseInsensitiveStringComparator()))
|
||||
rv = SetName(kLocalizedInboxName);
|
||||
|
||||
else if (mFlags & MSG_FOLDER_FLAG_SENTMAIL && unicodeName.Equals(NS_LITERAL_STRING("Sent"), nsCaseInsensitiveStringComparator()))
|
||||
rv = SetName(kLocalizedSentName);
|
||||
|
||||
//netscape webmail uses "Draft" instead of "Drafts"
|
||||
else if (mFlags & MSG_FOLDER_FLAG_DRAFTS && (unicodeName.Equals(NS_LITERAL_STRING("Drafts"), nsCaseInsensitiveStringComparator())
|
||||
|| unicodeName.Equals(NS_LITERAL_STRING("Draft"), nsCaseInsensitiveStringComparator())))
|
||||
rv = SetName(kLocalizedDraftsName);
|
||||
|
||||
else if (mFlags & MSG_FOLDER_FLAG_TEMPLATES && unicodeName.Equals(NS_LITERAL_STRING("Templates"), nsCaseInsensitiveStringComparator()))
|
||||
rv = SetName(kLocalizedTemplatesName);
|
||||
|
||||
else if (mFlags & MSG_FOLDER_FLAG_TRASH && unicodeName.Equals(NS_LITERAL_STRING("Trash"), nsCaseInsensitiveStringComparator()))
|
||||
rv = SetName(kLocalizedTrashName);
|
||||
|
||||
else if (mFlags & MSG_FOLDER_FLAG_QUEUE && unicodeName.Equals(NS_LITERAL_STRING("Unsent Messages"), nsCaseInsensitiveStringComparator()))
|
||||
rv = SetName(kLocalizedUnsentName);
|
||||
|
||||
else if (mFlags & MSG_FOLDER_FLAG_JUNK && unicodeName.Equals(NS_LITERAL_STRING("Junk"), nsCaseInsensitiveStringComparator()))
|
||||
rv = SetName(kLocalizedJunkName);
|
||||
else
|
||||
rv = SetName(name);
|
||||
|
||||
|
@ -320,6 +320,7 @@ protected:
|
||||
static PRUnichar *kLocalizedDraftsName;
|
||||
static PRUnichar *kLocalizedTemplatesName;
|
||||
static PRUnichar *kLocalizedUnsentName;
|
||||
static PRUnichar *kLocalizedJunkName;
|
||||
|
||||
static nsIAtom* kTotalUnreadMessagesAtom;
|
||||
static nsIAtom* kBiffStateAtom;
|
||||
|
@ -1823,7 +1823,19 @@ nsMsgIncomingServer::SetSpamSettings(nsISpamSettings *aSpamSettings)
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
rv = SetBoolValue("moveOnSpam", moveOnSpam);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
|
||||
PRInt32 moveTargetMode;
|
||||
rv = mSpamSettings->GetMoveTargetMode(&moveTargetMode);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
rv = SetIntValue("moveTargetMode", moveTargetMode);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
nsXPIDLCString spamActionTargetAccount;
|
||||
rv = mSpamSettings->GetActionTargetAccount(getter_Copies(spamActionTargetAccount));
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
rv = SetCharValue("spamActionTargetAccount", spamActionTargetAccount.get());
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
nsXPIDLCString spamActionTargetFolder;
|
||||
rv = mSpamSettings->GetActionTargetFolder(getter_Copies(spamActionTargetFolder));
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
@ -1883,6 +1895,18 @@ nsMsgIncomingServer::GetSpamSettings(nsISpamSettings **aSpamSettings)
|
||||
rv = mSpamSettings->SetMoveOnSpam(moveOnSpam);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
PRInt32 moveTargetMode;
|
||||
rv = GetIntValue("moveTargetMode", &moveTargetMode);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
rv = mSpamSettings->SetMoveTargetMode(moveTargetMode);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
nsXPIDLCString spamActionTargetAccount;
|
||||
rv = GetCharValue("spamActionTargetAccount", getter_Copies(spamActionTargetAccount));
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
rv = mSpamSettings->SetActionTargetAccount(spamActionTargetAccount);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
nsXPIDLCString spamActionTargetFolder;
|
||||
rv = GetCharValue("spamActionTargetFolder", getter_Copies(spamActionTargetFolder));
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
@ -334,7 +334,9 @@ pref("mail.server.default.canFileMessages", true);
|
||||
// for spam
|
||||
pref("mail.server.default.spamLevel",60); // 0 - 100, 0 off, 20, lowest, 40 low, 60 medium, 80 high, 100 highest
|
||||
pref("mail.server.default.moveOnSpam",false);
|
||||
pref("mail.server.default.spamActionTargetFolder","mailbox://nobody@Local%20Folders/Junk%20Mail");
|
||||
pref("mail.server.default.moveTargetMode",0); // 0 == "Junk" on server, 1 == specific folder
|
||||
pref("mail.server.default.spamActionTargetAccount","");
|
||||
pref("mail.server.default.spamActionTargetFolder","");
|
||||
pref("mail.server.default.useWhiteList",true);
|
||||
pref("mail.server.default.whiteListAbURI","moz-abmdbdirectory://abook.mab"); // the Personal addressbook.
|
||||
pref("mail.server.default.purgeSpam",false);
|
||||
|
@ -334,7 +334,9 @@ pref("mail.server.default.canFileMessages", true);
|
||||
// for spam
|
||||
pref("mail.server.default.spamLevel",60); // 0 - 100, 0 off, 20, lowest, 40 low, 60 medium, 80 high, 100 highest
|
||||
pref("mail.server.default.moveOnSpam",false);
|
||||
pref("mail.server.default.spamActionTargetFolder","mailbox://nobody@Local%20Folders/Junk%20Mail");
|
||||
pref("mail.server.default.moveTargetMode",0); // 0 == "Junk" on server, 1 == specific folder
|
||||
pref("mail.server.default.spamActionTargetAccount","");
|
||||
pref("mail.server.default.spamActionTargetFolder","");
|
||||
pref("mail.server.default.useWhiteList",true);
|
||||
pref("mail.server.default.whiteListAbURI","moz-abmdbdirectory://abook.mab"); // the Personal addressbook.
|
||||
pref("mail.server.default.purgeSpam",false);
|
||||
|
Loading…
Reference in New Issue
Block a user