Compare commits

...
Sign in to create a new pull request.

112 commits

Author SHA1 Message Date
Andy
afafd7bb4c
Merge branch 'master' into rrs-website 2024-11-07 22:05:56 -08:00
Andy
8e3064b80b
Merge branch 'master' into rrs-website 2024-11-07 22:04:49 -08:00
Andy
a106afa4ea
Merge branch 'master' into rrs-website 2024-11-07 21:59:16 -08:00
Andy
be9df16d8f
Merge branch 'master' into rrs-website 2023-06-21 00:35:16 -07:00
Andy
c00527c669
TLS Auth Required 2023-01-12 00:28:59 -08:00
Andy
efa465362d
Merge branch 'master' into rrs-website 2023-01-02 22:11:07 -08:00
Andy
69d7b6e29c
Merge branch 'master' into rrs-website 2022-12-06 08:43:18 -08:00
Andy
01bebd092c
Update SpamCop Plugin 2022-09-04 04:07:55 -07:00
Andy
6785e166e5
Make TDs with White BGs Black 2022-09-04 03:58:18 -07:00
Andy
4ea45d089f
Merge branch 'master' into rrs-website 2022-06-28 08:09:27 -07:00
Andy
db02693f31
Merge branch 'master' into rrs-website 2022-05-24 05:59:11 -07:00
Andy
ae4ef34295
Merge branch 'master' into rrs-website 2022-05-23 05:22:06 -07:00
Andy
a5dfd7abfb
Set Default Theme to Nature 2022-05-22 13:11:55 -07:00
Andy
6ba1e41f3a
Merge branch 'master' into rrs-website 2022-05-22 13:11:26 -07:00
Andy
842be708b1
Merge branch 'master' into rrs-website 2022-05-22 12:49:23 -07:00
Andy
8a12a84b54
Merge branch 'master' into rrs-website 2022-02-28 19:21:39 -08:00
Andy
fe6a5ae434
Merge branch 'master' into rrs-website 2022-02-28 19:12:55 -08:00
Andy
a1c51cb5f4
Merge branch 'master' into rrs-website 2022-02-28 19:12:30 -08:00
Andy
bb18fc1ac1
Update Plugins 2022-02-15 12:40:46 -08:00
Andy
c48cd17719
Merge branch 'master' into rrs-website 2022-01-26 01:14:01 -08:00
Andy
f4c221b504
Merge branch 'master' into rrs-website 2022-01-11 11:20:24 -08:00
Andy
92b0a574d4
Merge branch 'master' into rrs-website 2021-12-07 11:43:12 -08:00
Andy
7f39a9b581
Merge branch 'master' into rrs-website 2021-11-21 09:01:29 -08:00
Andy
582a69f104
Undefined Variable Bug in sqimap_message_list_squisher 2021-11-21 09:00:19 -08:00
Andy
adaaf5a9de
Add Nature Theme 2021-10-14 19:25:11 -07:00
Andy
29ceb5d03d
Remove CSS, Icons, and Themes 2021-10-14 01:01:37 -07:00
Andy
f2b178f096
Revert "Change Login form Name filed to E-Mail"
This reverts commit 56d9a31d33.
2021-10-14 00:55:40 -07:00
Andy
b90425da70
Switch to UTF-8 Default Charset 2021-10-14 00:53:11 -07:00
Andy
11402f616c
Merge branch 'master' into rrs-website 2021-10-14 00:52:55 -07:00
Andy
3cd65b53ff
Merge branch 'master' into rrs-website 2021-08-10 04:23:20 -07:00
Andy
6cab6553fc
Merge branch 'master' into rrs-website 2021-08-09 10:26:49 -07:00
Andy
e63d412d7c
Merge branch 'master' into rrs-website 2021-05-07 03:33:07 -07:00
Andy
94047d232d
Merge branch 'master' into rrs-website 2021-04-11 22:30:44 -07:00
Andy
b5b825f946
Merge branch 'master' into rrs-website 2021-03-12 18:15:32 -08:00
Andy
54686b478f
Merge branch 'master' into rrs-website 2021-03-02 17:22:10 -08:00
Andy
3c741730d1
Merge branch 'master' into rrs-website 2021-02-08 15:25:56 -08:00
Andy
d850eb3534
Merge branch 'master' into rrs-website 2021-02-07 23:20:17 -08:00
Andy
723a0d58cc
Merge branch 'master' into rrs-website 2021-02-05 12:04:47 -08:00
Andy
4acee40537
Merge branch 'master' into rrs-website 2021-02-02 23:11:13 -08:00
Andy
9905c9c488
Merge branch 'master' into rrs-website 2021-01-16 02:20:52 -08:00
Andy
29af35c8e8
Merge branch 'master' into rrs-website 2021-01-15 19:32:44 -08:00
Andy
2771324b6b
Merge branch 'master' into rrs-website 2021-01-15 10:05:25 -08:00
Andy
c062a4cb65 Merge branch 'master' into rrs-website 2020-11-20 21:04:34 -08:00
Andy
9a5d708dae Merge branch 'master' into rrs-website 2020-11-03 12:52:58 -08:00
Andy
cd492625de Merge branch 'master' into rrs-website 2020-11-01 17:59:16 -08:00
Andy
d16827ded6 Merge branch 'master' into rrs-website 2020-11-01 16:09:39 -08:00
Andy
fa20b119a8
Merge branch 'master' into rrs-website 2020-07-11 01:13:18 -07:00
Andy
0be90e9d08
Merge branch 'master' into rrs-website 2020-07-11 00:19:39 -07:00
Andy
c911ff9381
Merge branch 'master' into rrs-website 2020-07-10 23:25:28 -07:00
Andy
88c42ff08d
Merge branch 'master' into rrs-website 2020-07-10 22:11:50 -07:00
Andy
31c32da248
Ignore PHP Config INI 2020-06-12 13:29:52 -07:00
Andy
891162bf90
Merge branch 'master' into rrs-website 2020-05-24 22:48:39 -07:00
Andy
36b58d400a
Merge branch 'master' into rrs-website 2020-05-23 16:49:07 -07:00
Andy
ae5b6ec6c0
Merge branch 'master' into rrs-website 2020-05-08 00:28:31 -07:00
Andy
c8f43bbdfe
Merge branch 'master' into rrs-website 2020-03-24 19:02:04 -07:00
Andy
2d5d9dd365
Merge branch 'master' into rrs-website 2020-03-24 12:58:35 -07:00
Andy
a11e2b2065
Merge branch 'master' into rrs-website 2020-01-24 19:17:52 -08:00
Andy
9e9b54f6ea
Merge branch 'master' into rrs-website 2020-01-07 00:18:19 -08:00
Andy
d314c83a4d
Merge branch 'master' into rrs-website 2020-01-06 23:17:50 -08:00
Andy
f7ccfa1712
Ignore robots.txt 2020-01-06 13:40:34 -08:00
Andy
47b6cd991d
Merge branch 'master' into rrs-website 2020-01-06 13:39:49 -08:00
Andy
d49b5c51d5
Update SpamCop Plugin 2019-12-17 16:40:43 -08:00
Andy
55713ee99f
Remove encryption for stability.
Communication should take place entirely within the IONOS network, anyway.
2019-12-08 18:01:51 -08:00
Andy
1e024017af
Merge branch 'master' into rrs-website 2019-11-06 23:34:21 -08:00
Andy
b3e6211d05
Merge branch 'master' into rrs-website 2019-09-01 23:54:44 -07:00
Andy
a8f5ee40b1
Merge 'master' into rrs-website 2019-08-22 17:16:04 -07:00
Andy
ec663971f7
Merge branch 'master' into rrs-website 2019-08-22 17:02:09 -07:00
Andy
5e2bcc6505
Merge branch 'master' into rrs-website 2019-07-26 20:29:52 -07:00
Andy
ad5c9b056c
Merge branch 'master' into rrs-website 2019-07-23 18:36:12 -07:00
Andy
fd576e5a7a
Merge branch 'master' into rrs-website 2019-06-18 00:25:10 -07:00
Andy
c8b4c44ad5
Branch SpamCop Plugin 2019-05-30 01:12:16 -07:00
Andy
0d8e262171
Merge branch 'master' into rrs-website 2019-05-27 18:09:12 -07:00
Andy
ad3b18f930
Update Submodules 2019-05-26 20:39:53 -07:00
Andy
6ef11fc02b
Merge branch 'master' into rrs-website 2019-05-20 19:25:26 -07:00
Andy
c805593c4e
Update S/MIME Plugin 2019-04-29 21:31:13 -07:00
Andy
5f434b3d77
Merge branch 'master' into rrs-website 2019-04-29 21:09:59 -07:00
Andy
6bd8c36116
Merge branch 'master' into rrs-website 2019-04-26 23:01:28 -07:00
Andy
c3078d310f
Merge branch 'master' into rrs-website 2019-04-06 20:00:47 -07:00
Andy
df2fa8ff9c
Merge branch 'master' into rrs-website 2019-02-26 22:19:12 -08:00
Andy
7a29c1338d
Merge branch 'master' into rrs-website 2019-02-23 15:28:30 -08:00
Andy
ea04fb4219
Merge branch 'master' into rrs-website 2019-02-22 23:40:57 -08:00
Andy
5ea0ad85f7
Update 1and1 Server Rebranding 2019-02-22 23:40:23 -08:00
Andy
8053305c0d
Update Submodules 2019-01-07 22:44:42 -08:00
Andy
95b48ba7a9
Merge branch 'master' into rrs-website 2019-01-07 22:43:06 -08:00
Andy
a62f666d45
Merge branch 'master' into rrs-website 2018-11-25 18:01:49 -08:00
Andy
9d58b013f7
Merge branch 'master' into rrs-website 2018-10-13 16:44:39 -07:00
Andy
93ce1ce6c9
Merge branch 'master' into rrs-website 2018-10-13 03:21:57 -07:00
Andy
0e8cceadc8
Merge branch 'master' into rrs-website 2018-10-08 10:49:52 -07:00
Andy
aba3159da7
Merge branch 'master' into rrs-website 2018-10-07 04:36:06 -07:00
Andy
90e5ea8dd3
Replace Default SpamCop Plugin 2018-10-05 04:17:38 -07:00
Andy
fd6531c9c4
DKIM Header Fields Don't Need Color 2018-09-25 18:44:59 -07:00
Andy
136021d0a7
Put DKIM Header above S/MIME Header 2018-09-25 18:44:44 -07:00
Andy
f35c801441
Update Plugin Modules 2018-09-25 17:41:00 -07:00
Andy
819458cef4
Add DKIM-Verification Plugin 2018-09-25 02:33:35 -07:00
Andy
263751f227
Merge branch 'master' into rrs-website 2018-09-21 11:40:02 -07:00
Andy
70aeb1a550
Merge branch 'master' into rrs-website 2018-09-19 10:15:15 -07:00
Andy
b37139574b
Account Defaults
Message index ordering.
Folder column width.
Hide Flag buttons.
Use personal names.
Move new messages detected as spam by Spamhaus and SpamCop to the Spam folder.
Default SpamCop options use Spam folder and E-Mail reporting.
Show sender's User Agent (Mailer Display).
New messages change the page title.
2018-09-15 15:01:57 -07:00
Andy
49bd9264f8
Merge branch 'master' into rrs-website 2018-09-15 15:01:14 -07:00
Andy
f536e2081d
Move attachments and data folders to another directory 2018-09-15 13:28:57 -07:00
Andy
a7aca609e1
Merge branch 'master' into rrs-website 2018-09-12 14:07:13 -07:00
Andy
ff0b4f3f11
Merge branch 'master' into rrs-website 2018-09-12 08:21:29 -07:00
Andy
d7b6f17d10
Merge branch 'master' into rrs-website 2018-08-25 18:12:42 -07:00
Andy
e17e0844a6
Markdown Readme 2018-08-01 19:12:09 -07:00
Andy
e3345ef297
Merge branch 'master' into rrs-website 2018-08-01 18:36:14 -07:00
Andy
767907e5e8
Secure Login Plugin 2018-07-29 22:09:21 -07:00
Andy
c70f0fc18a
S/MIME Plugin 2018-07-29 22:04:38 -07:00
Andy
4d656e48be
Site Configuration 2018-07-29 21:48:25 -07:00
Andy
1e3ba955f3
Add Move to Spam option in SpamCop plugin 2018-07-29 21:46:49 -07:00
Andy
bd7046e9f1
Mail me about errors
Ignore session_start redundancies
2018-07-29 21:45:47 -07:00
Andy
56d9a31d33
Change Login form Name filed to E-Mail 2018-07-29 21:44:53 -07:00
Andy
de4ee0fa22
Root folder files 2018-07-29 21:44:28 -07:00
Andy
f38606f597
Website Branch 2018-07-29 21:44:11 -07:00
166 changed files with 3332 additions and 5559 deletions

4
.gitignore vendored Normal file
View file

@ -0,0 +1,4 @@
/attach/
/data/
robots.txt
.user.ini

12
.gitmodules vendored Normal file
View file

@ -0,0 +1,12 @@
[submodule "plugins/smime"]
path = plugins/smime
url = git@github.com:RealityRipple/S-Mime-Verification.git
branch = rrs-website
[submodule "plugins/dkim"]
path = plugins/dkim
url = git@github.com:RealityRipple/DKIM-Verification.git
branch = master
[submodule "plugins/spamcop"]
path = plugins/spamcop
url = git@github.com:RealityRipple/SpamCop.git
branch = rrs-website

View file

@ -1,21 +1,4 @@
# SqirrelMail 1.5.2
# SqirrelMail 1.5.2 for RealityRipple.com
A version of SquirrelMail for PHP 7.0 and above with additional changes for compatibility or security reasons.
This version contains the following changes:
* Legacy constructors replaced with `__construct`.
* While/List/Each are now `ForEach`.
* Instances of `mt_rand` are now cryptographically secure, using `random_int`.
* Message IDs are generated differently.
* The ID is now a Version 5 UUID based off 64 cryptographically secure random bytes.
* The domain now matches the value of the username variable, if it contains an "@". Otherwise, it falls back to the SERVER_NAME variable like normal.
* Instances of `SizeOf` are now `StrLen` because PHP is not C.
* Instances of `create_function` are now inline functions.
* The `X-Frame-Options: SAMEORIGIN` header has been replaced with CSP's `frame-ancestors` header. This is set based on the `provider_uri` preference, and accepts any http or https domains or subdomains that match.
* A new variable in the config will be added at a later point.
* SCRAM support for SMTP and IMAP logins, supporting any hash algorithm PHP supports (with checks against HMAC list on 7.2+).
* Optional parameters corrected for PHP 8.0.
Additionally, some minor fixes that would cause warnings or strange failures have also been resolved.
Changes to the official source code are tracked in the `trunk` branch and merged with `master` as soon as possible. I'm looking into a way to automate this process.
This is a private set of modifications for use on the RealityRipple Software website.
Do not use this repository on another website without understanding the differences between this version and `master`.

View file

@ -105,6 +105,8 @@ class ErrorHandler {
* @since 1.5.1
*/
function SquirrelMailErrorhandler($iErrNo, $sErrStr, $sErrFile, $iErrLine, $aContext=NULL) {
if (strpos($sErrStr, 'A session had already been started') === false && strpos($sErrStr, 'a session is already active') === false)
mail('webmaster@realityripple.com', 'SquirrelMail Error', "Error #$iErrNo: $sErrStr\n$sErrFile line $iErrLine\n".print_r($aContext, true));
$aError = array(
'type' => SQM_NOTICE,// Error type, notice, warning or fatal error;
'category' => NULL, // SquirrelMail error category;

1
config/admins Normal file
View file

@ -0,0 +1 @@
webmaster@realityripple.com

154
config/config.php Normal file
View file

@ -0,0 +1,154 @@
<?php
/**
* SquirrelMail Configuration File
* Created using the Administrator Plugin
*/
$config_version = '1.5.0';
$org_name = "RealityRipple Software Webmail";
$org_logo = SM_PATH . 'images/sm_logo.png';
$org_logo_width = "308";
$org_logo_height = "111";
$org_title = "RealityRipple Software Webmail";
$signout_page = 'https://mail.realityripple.com';
$provider_uri = "https://realityripple.com";
$provider_name = "RealityRipple Software";
$frame_top = "_top";
$domain = "";
$imapServerAddress = "imap.ionos.com";
$imapPort = 993;
$imap_server_type = "other";
$optional_delimiter = "detect";
$use_imap_tls = 1;
$imap_auth_mech = "login";
$useSendmail = FALSE;
$sendmail_path = "/usr/sbin/sendmail";
$sendmail_args = "-i -t";
$smtpServerAddress = "smtp.ionos.com";
$smtpPort = 465;
$use_smtp_tls = 1;
$smtp_auth_mech = "login";
$smtp_sitewide_user = "";
$smtp_sitewide_pass = "";
$pop_before_smtp = FALSE;
$encode_header_key = "";
$invert_time = FALSE;
$default_folder_prefix = "";
$show_prefix_option = FALSE;
$trash_folder = "Trash";
$sent_folder = "Sent Items";
$draft_folder = "Drafts";
$default_move_to_trash = TRUE;
$default_move_to_sent = TRUE;
$default_save_as_draft = TRUE;
$list_special_folders_first = TRUE;
$use_special_folder_color = TRUE;
$auto_expunge = TRUE;
$default_sub_of_inbox = TRUE;
$show_contain_subfolders_option = FALSE;
$default_unseen_notify = 2;
$default_unseen_type = 1;
$auto_create_special = FALSE;
$delete_folder = FALSE;
$noselect_fix_enable = FALSE;
$data_dir = $GLOBALS['siteRoot'].'/rrs/.maildata/data/';
$attachment_dir = $GLOBALS['siteRoot'].'/rrs/.maildata/attach/';
$dir_hash_level = 0;
$default_left_size = 100;
$force_username_lowercase = TRUE;
$default_use_priority = TRUE;
$hide_sm_attributions = TRUE;
$default_use_mdn = TRUE;
$edit_identity = TRUE;
$edit_name = TRUE;
$edit_reply_to = TRUE;
$hide_auth_header = FALSE;
$disable_server_sort = TRUE;
$disable_thread_sort = TRUE;
$allow_charset_search = TRUE;
$allow_advanced_search = 0;
$session_name = 'SQMSESSID';
$time_zone_type = 0;
$config_location_base = '';
$use_transparent_security_image = TRUE;
$display_imap_login_error = TRUE;
$motd = "";
$addrbook_dsn = '';
$addrbook_table = 'address';
$prefs_dsn = '';
$prefs_table = 'userprefs';
$prefs_user_field = 'user';
$prefs_user_size = 128;
$prefs_key_field = 'prefkey';
$prefs_key_size = 64;
$prefs_val_field = 'prefval';
$prefs_val_size = 65536;
$addrbook_global_dsn = '';
$addrbook_global_table = 'global_abook';
$addrbook_global_writeable = FALSE;
$addrbook_global_listing = FALSE;
$squirrelmail_default_language = "en_US";
$default_charset = "utf-8";
$show_alternative_names = FALSE;
$aggressive_decoding = FALSE;
$lossy_encoding = FALSE;
$use_icons = TRUE;
$use_iframe = TRUE;
$use_php_recode = FALSE;
$use_php_iconv = TRUE;
$allow_remote_configtest = FALSE;
$default_use_javascript_addr_book = FALSE;
$abook_global_file = '';
$abook_global_file_writeable = FALSE;
$abook_global_file_listing = TRUE;
$abook_file_line_length = 2048;
$theme_css = '';
$default_fontsize = '';
$default_fontset = "serif";
$templateset_default = "nature";
$templateset_fallback = "default";
$theme_default = 0;
$config_use_color = 2;
$no_list_for_subscribe = FALSE;
$pop_before_smtp_host = "";
$only_secure_cookies = TRUE;
$disable_security_tokens = FALSE;
$check_referrer = "";
$theme[0]['PATH'] = SM_PATH . 'css/nature/';
$theme[0]['NAME'] = "Nature";
$user_theme_default = 0;
$user_themes[0]['PATH'] = SM_PATH . 'css/nature/';
$user_themes[0]['NAME'] = "Nature";
unset($user_themes[1]);
$icon_theme_def = 0;
$icon_theme_fallback = 0;
$icon_themes[0]['PATH'] = SM_PATH . 'images/themes/nature/';
$icon_themes[0]['NAME'] = "Nature";
unset($icon_themes[1]);
unset($icon_themes[2]);
unset($icon_themes[3]);
$rpc_templateset = "default_rpc";
$aTemplateSet[1]['ID'] = 'nature';
$aTemplateSet[1]['NAME'] = 'Nature';
$fontsets = array();
$fontsets['serif'] = 'serif';
$fontsets['sans'] = 'helvetica,arial,sans-serif';
$fontsets['comicsans'] = 'comic sans ms,sans-serif';
$fontsets['verasans'] = 'bitstream vera sans,verdana,sans-serif';
$fontsets['tahoma'] = 'tahoma,sans-serif';
$disable_plugins = FALSE;
$disable_plugins_user = "";
$buffer_output = FALSE;
$buffered_output_handler = "";
$sm_debug_mode = SM_DEBUG_MODE_STRICT;
$secured_config = TRUE;
$sq_https_port = 443;
$sq_ignore_http_x_forwarded_headers = TRUE;
$ask_user_info = TRUE;
$plugins[0] = 'administrator';
$plugins[1] = 'filters';
$plugins[2] = 'newmail';
$plugins[3] = 'secure_login';
$plugins[4] = 'smime';
$plugins[5] = 'spamcop';
?>

8
config/config_dkim.php Normal file
View file

@ -0,0 +1,8 @@
<?php
global $color, $row_highlite_color;
global $openssl_cmds, $tmp_dir;
$row_highlite_color = '';//$color[16];
$openssl_cmds = SM_PATH . 'plugins/dkim/openssl-cmds.sh';
$tmp_dir = $GLOBALS['siteRoot'].'/rrs/.maildata/data/tmp/';
?>

57
config/config_smime.php Normal file
View file

@ -0,0 +1,57 @@
<?php
/**
* SquirrelMail S/MIME Verification Plugin
*
* Copyright (c) 2015 Walter Hoehlhubmer <walter.h@mathemainzel.info>
* Copyright (c) 2005-2012 Paul Lesniewski <paul@squirrelmail.org>
* Copyright (c) 2005 Khedron Wilk <khedron@wilk.se>
* Copyright (c) 2004 Scott Heavner
* Copyright (c) 2003 Antonio Vasconcelos <vasco@threatconn.com>
* Copyright (c) 2001-2003 Wouter Teepe <wouter@teepe.com>
*
* Licensed under the GNU GPL. For full terms see the file COPYING.
*
* @package plugins
* @subpackage smime
*
*/
global $data_dir, $color,
$cert_in_dir, $row_highlite_color;
global $openssl_cmds, $tmp_dir;
// This is the color used in the background of the signature
// verification information presented to the user. $color[9]
// may be subdued in some display themes, $color[16] will usually
// stand out rather strongly. You may add any color you would
// like here, including static ones. This information may or may
// not be used under SquirrelMail 1.5.2+.
//
// $row_highlite_color = $color[9];
// $row_highlite_color = $color[16];
// $row_highlite_color = '#ff9933';
//
$row_highlite_color = $color[16];
// This is the directory where signer ceritificates are stored
// for analysis. It must be readable and writeable by the user
// your web server runs as. This setting's default value usually
// does not need to be changed.
//
$cert_in_dir = $GLOBALS['siteRoot'].'/rrs/.maildata/data/certs-in/';
// This is the full path to the OpenSSL cmds shell script.
//
$openssl_cmds = SM_PATH . 'plugins/smime/openssl-cmds.sh';
// This is the directory where temporary files are stored.
// It must be readable and writeable by the user your web server runs as.
// This setting's default value usually does not need to be changed.
//
$tmp_dir = $GLOBALS['siteRoot'].'/rrs/.maildata/data/tmp/';

View file

@ -3,3 +3,18 @@ reply_to=
show_html_default=0
include_self_reply_all=0
do_not_reply_to_self=1
index_order=a:6:{i:0;i:0;i:1;i:7;i:2;i:4;i:3;i:3;i:4;i:1;i:5;i:8;}
left_size=130
show_flag_buttons=0
show_personal_names=1
filters_spam_folder=Spam
filters_spam_spamhaus=on
filters_spam_spamcop=on
filters_spam_scan=new
spamcop_method=thorough_email
spamcop_type=free
spamcop_enabled=0
spamcop_save=0
spamcop_movetospam=1
show_xmailer_default=1
newmail_changetitle=on

102
config/filters_config.php Normal file
View file

@ -0,0 +1,102 @@
<?php
/**
* Message and Spam Filter Plugin - Setup script
*
* @copyright 1999-2017 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id: config_default.php 14643 2017-01-27 20:34:08Z pdontthink $
* @package plugins
* @subpackage filters
*/
/**
* Imap connection control
*
* Set this to true if you have problems -- check the README file
* Note: This doesn't work all of the time (No idea why)
* Seems to be related to UW
* @global bool $UseSeparateImapConnection
*/
$UseSeparateImapConnection = true;
/**
* User level spam filters control
*
* Set this to false if you do not want the user to be able to enable
* spam filters
* @global bool $AllowSpamFilters
*/
$AllowSpamFilters = true;
/**
* SpamFilters YourHop Setting
*
* Set this to a string containing something unique to the line in the
* header you want me to find IPs to scan the databases with. For example,
* All the email coming IN from the internet to my site has a line in
* the header that looks like (all on one line):
* Received: [from usw-sf-list1.sourceforge.net (usw-sf-fw2.sourceforge.net
* [216.136.171.252]) by firewall.persistence.com (SYSADMIN-antispam
* 0.2) with
* Since this line indicates the FIRST hop the email takes into my network,
* I set my SpamFilters_YourHop to 'by firewall.persistence.com' but any
* case-sensitive string will do. You can set it to something found on
* every line in the header (like ' ') if you want to scan all IPs in
* the header (lots of false alarms here tho).
* @global string $SpamFilters_YourHop
*/
$SpamFilters_YourHop = 'mx.perfora.net';
/**
* Commercial Spam Filters Control
*
* Some of the SPAM filters are COMMERCIAL and require a fee. If your users
* select them and you're not allowed to use them, it will make SPAM filtering
* very slow. If you don't want them to even be offered to the users, you
* should set SpamFilters_ShowCommercial to false.
* @global bool $SpamFilters_ShowCommercial
*/
$SpamFilters_ShowCommercial = false;
/**
* SpamFiltering Cache
*
* A cache of IPs we've already checked or are known bad boys or good boys
* ie. $SpamFilters_DNScache["210.54.220.18"] = true;
* would tell filters to not even bother doing the DNS queries for that
* IP and any email coming from it are SPAM - false would mean that any
* email coming from it would NOT be SPAM
* @global array $SpamFilters_DNScache
*/
$SpamFilters_DNScache=array();
/**
* Path to bulkquery program
*
* Absolute path to the bulkquery program. Leave blank if you don't have
* bulkquery compiled, installed, and lwresd running. See the README file
* in the bulkquery directory for more information on using bulkquery.
* @global string $SpamFilters_BulkQuery
*/
$SpamFilters_BulkQuery = '';
/**
* Shared filtering cache control
*
* Do you want to use a shared file for the DNS cache or a session variable?
* Using a shared file means that every user can benefit from any queries
* made by other users. The shared file is named "dnscache" and is in the
* data directory.
* @global bool $SpamFilters_SharedCache
*/
$SpamFilters_SharedCache = true;
/**
* DNS query TTL
*
* How long should DNS query results be cached for by default (in seconds)?
* @global integer $SpamFilters_CacheTTL
*/
$SpamFilters_CacheTTL = 7200;

69
config/plugin_hooks.php Normal file
View file

@ -0,0 +1,69 @@
<?php
/**
* SquirrelMail Plugin Hook Registration File
* Auto-generated using the configure script, conf.pl
*/
global $squirrelmail_plugin_hooks;
$squirrelmail_plugin_hooks['optpage_register_block']['administrator']
= 'squirrelmail_administrator_optpage_register_block';
$squirrelmail_plugin_hooks['left_main_before']['filters']
= 'start_filters_hook';
$squirrelmail_plugin_hooks['right_main_after_header']['filters']
= 'start_filters_hook';
$squirrelmail_plugin_hooks['optpage_register_block']['filters']
= 'filters_optpage_register_block_hook';
$squirrelmail_plugin_hooks['special_mailbox']['filters']
= 'filters_special_mailbox';
$squirrelmail_plugin_hooks['rename_or_delete_folder']['filters']
= 'update_for_folder_hook';
$squirrelmail_plugin_hooks['template_construct_login_webmail.tpl']['filters']
= 'start_filters_hook';
$squirrelmail_plugin_hooks['folder_status']['filters']
= 'filters_folder_status';
$squirrelmail_plugin_hooks['folder_status']['newmail']
= 'newmail_folder_status';
$squirrelmail_plugin_hooks['template_construct_left_main.tpl']['newmail']
= 'newmail_plugin';
$squirrelmail_plugin_hooks['optpage_register_block']['newmail']
= 'newmail_optpage_register_block';
$squirrelmail_plugin_hooks['options_save']['newmail']
= 'newmail_sav';
$squirrelmail_plugin_hooks['loading_prefs']['newmail']
= 'newmail_pref';
$squirrelmail_plugin_hooks['optpage_set_loadinfo']['newmail']
= 'newmail_set_loadinfo';
$squirrelmail_plugin_hooks['login_cookie']['secure_login']
= 'secure_login_check';
$squirrelmail_plugin_hooks['webmail_top']['secure_login']
= 'secure_login_logout';
$squirrelmail_plugin_hooks['configtest']['secure_login']
= 'sl_check_configuration';
$squirrelmail_plugin_hooks['read_body_header']['dkim']
= 'dkim_header_verify';
$squirrelmail_plugin_hooks['template_construct_read_headers.tpl']['dkim']
= 'dkim_header_verify';
$squirrelmail_plugin_hooks['configtest']['dkim']
= 'dkim_check_configuration';
$squirrelmail_plugin_hooks['read_body_header']['smime']
= 'smime_header_verify';
$squirrelmail_plugin_hooks['template_construct_read_headers.tpl']['smime']
= 'smime_header_verify';
$squirrelmail_plugin_hooks['configtest']['smime']
= 'smime_check_configuration';
$squirrelmail_plugin_hooks['optpage_register_block']['spamcop']
= 'spamcop_options';
$squirrelmail_plugin_hooks['loading_prefs']['spamcop']
= 'spamcop_load';
$squirrelmail_plugin_hooks['message_list_controls']['spamcop']
= 'spamcop_show_button';
$squirrelmail_plugin_hooks['mailbox_display_button_action']['spamcop']
= 'spamcop_action_button';
$squirrelmail_plugin_hooks['read_body_header_right']['spamcop']
= 'spamcop_show_link';
$squirrelmail_plugin_hooks['compose_send']['spamcop']
= 'spamcop_while_sending';

View file

@ -1,275 +0,0 @@
/* older css template */
/* page body formatting */
body {
color: #61ff5c;
background-color: #000000;
}
body.sqm_leftMain {
color: #4cc748;
background-color: #000000;
}
/* right links */
a:link, a:visited, a:hover, a:active {
color: #ffffff;
}
/* left links */
.sqm_leftMain a:link, .sqm_leftMain a:visited, .sqm_leftMain a:hover, .sqm_leftMain a:active {
color: #4cc748;
}
.leftunseen, .leftspecial, .leftspecial a:link, .leftspecial a:visited, .leftspecial a:hover, .leftspecial a:active {
color: #ffffff;
}
.leftnoselect a:link, .leftnoselect a:visited, .leftnoselect a:hover, .leftnoselect a:active {
color: #002266;
}
/* highlighted texts */
.highlight {
color: #002266;
}
.error_table {
color: #ff0000;
border: 2px solid #19881a;
background-color: #000000;
}
.error_thead {
background-color: #105611;
}
.error_thead_caption {
background-color: #105611;
}
.error_row {
color: #ff0000;
}
.error_val {
color: #61ff5c;
border: 2px solid #19881a;
}
.error_key {
border: 2px solid #19881a;
color: #ff0000;
background-color: #19881a;
}
/* Standard defs */
table.table1 {
border: 1px solid #19881a;
}
table.table2 {
border: 1px solid #157316;
}
td.header1 {
background: #19881a;
}
td.header2 {
background: #157316;
}
td.header4 {
background: #0a6c11;
}
tr.even {
background: #ededed;
}
tr.odd {
background: #000000;
}
.table_standard {
border:1px solid #19881a;
}
.sqm_loginOrgName, .sqm_signoutBar {
background: #19881a;
}
.sqm_motd {
background: #157316;
}
.sqm_motd td {
background: #000000;
}
/* empty_folder.tpl defs */
.sqm_emptyFolder {
background: #157316;
}
.sqm_emptyFolder td {
background: #000000;
}
/* error_box.tpl definitions */
.table_errorBoxWrapper {
background: #157316;
}
.table_errorBox {
background: #19881a;
}
.error_message {
background: #000000;
}
/* page_header.tpl definitions */
.sqm_currentFolder {
background: #157316;
}
.sqm_headerSignout {
background: #157316;
}
/* message_list.tpl definitions */
.table_messageListWrapper {
background: #157316;
}
.table_messageList {
background: #0a6c11;
}
.table_messageList td.spacer {
background: #19881a;
}
.table_messageList tr.mouse_over {
background: #0a6c11;
}
.table_messageList tr.clicked {
background: #ff9933;
}
.deleted {
color: #157316;
}
.flagged {
color: #cc0000;
}
.high_priority {
color: #800000;
}
.low_priority {
color: #61ff5c;
}
.message_list_controls {
background: #19881a;
}
.spacer {
background: #000000;
}
/* dialog box defs */
.dialogbox table.wrapper {
border: 1px solid #19881a;
}
.dialogbox td.folderAction {
background: #19881a;
}
/* addressbook_list.tpl defs */
#addressList table {
border: 1px solid #157316;
}
#addressList td.header1 {
background: #157316;
}
#addressList td.abookSwitch {
background: #19881a;
}
#addressList td.abookButtons {
background: #19881a;
}
#addressList td.abookField {
border-left: 1px solid #157316;
border-right: 1px solid #157316;
}
#addressList td.colHeader {
background: #157316;
}
#addrBookSearch table.wrapper {
border: 1px solid #157316;
}
#addrAddEdit table {
border: 1px solid #157316;
}
#addrAddEdit td.header {
background: #157316;
}
/* options defs */
#optionGroups table {
border: 1px solid #19881a;
}
#optionGroups td.title {
background: #19881a;
}
#optionGroups td.optionElement table {
border:1px solid #157316;
}
#optionGroups td.optionName {
background: #157316;
}
#optionGroups td.optionDesc {
background: #19881a;
}
#optionDisplay table {
border: 1px solid #19881a
}
#optionOrder table {
border: 1px solid #19881a
}
#optionOrder table.moveFields td {
border-left: 1px solid #19881a;
border-right: 1px solid #19881a;
}
#optionsIdentity table.table2 tr {
background: #19881a;
}
#optionsIdentity hr {
width: 95%;
border: 1px solid #157316;
}
/* help defs */
#help td.nav {
color: #19881a;
}
/* search defs */
div.search td.header4 {
border-bottom: 1px solid #157316;
}
div.search td.queryAction {
border-left: 1px solid #157316;
border-top: 1px solid #157316;
border-bottom: 1px solid #157316;
}
div.search td.queryDesc {
border-top: 1px solid #157316;
border-bottom: 1px solid #157316;
}
div.search span.error {
color: #cc0000;
}
div.search td.searchForm {
border-right: 1px solid #19881a;
border-left: 1px solid #19881a;
}
div.search td.queryError {
color: #cc0000;
}
div.search h2 {
color: #cc0000;
}
/* compse defs */
div.compose tr.header {
background: #157316;
}
div.compose tr.attachment td {
background: #19881a;
border-top: 1px solid #157316;
border-bottom: 1px solid #157316;
}
div.compose table.close {
background: #19881a;
border:1px solid #157316;
}

View file

@ -1,275 +0,0 @@
/* older css template */
/* page body formatting */
body {
color: #000000;
background-color: #ffffff;
}
body.sqm_leftMain {
color: #ffffff;
background-color: #71360a;
}
/* right links */
a:link, a:visited, a:hover, a:active {
color: #2d4900;
}
/* left links */
.sqm_leftMain a:link, .sqm_leftMain a:visited, .sqm_leftMain a:hover, .sqm_leftMain a:active {
color: #ffffff;
}
.leftunseen, .leftspecial, .leftspecial a:link, .leftspecial a:visited, .leftspecial a:hover, .leftspecial a:active {
color: #c95d02;
}
.leftnoselect a:link, .leftnoselect a:visited, .leftnoselect a:hover, .leftnoselect a:active {
color: #ffffff;
}
/* highlighted texts */
.highlight {
color: #ffffff;
}
.error_table {
color: #ff0000;
border: 2px solid #bb9d45;
background-color: #71360a;
}
.error_thead {
background-color: #76673e;
}
.error_thead_caption {
background-color: #76673e;
}
.error_row {
color: #ff0000;
}
.error_val {
color: #000000;
border: 2px solid #bb9d45;
}
.error_key {
border: 2px solid #bb9d45;
color: #ff0000;
background-color: #bb9d45;
}
/* Standard defs */
table.table1 {
border: 1px solid #bb9d45;
}
table.table2 {
border: 1px solid #9ca147;
}
td.header1 {
background: #bb9d45;
}
td.header2 {
background: #9ca147;
}
td.header4 {
background: #c95d02;
}
tr.even {
background: #ebebeb;
}
tr.odd {
background: #ffffff;
}
.table_standard {
border:1px solid #bb9d45;
}
.sqm_loginOrgName, .sqm_signoutBar {
background: #bb9d45;
}
.sqm_motd {
background: #9ca147;
}
.sqm_motd td {
background: #ffffff;
}
/* empty_folder.tpl defs */
.sqm_emptyFolder {
background: #9ca147;
}
.sqm_emptyFolder td {
background: #ffffff;
}
/* error_box.tpl definitions */
.table_errorBoxWrapper {
background: #9ca147;
}
.table_errorBox {
background: #bb9d45;
}
.error_message {
background: #ffffff;
}
/* page_header.tpl definitions */
.sqm_currentFolder {
background: #9ca147;
}
.sqm_headerSignout {
background: #9ca147;
}
/* message_list.tpl definitions */
.table_messageListWrapper {
background: #9ca147;
}
.table_messageList {
background: #c95d02;
}
.table_messageList td.spacer {
background: #bb9d45;
}
.table_messageList tr.mouse_over {
background: #c95d02;
}
.table_messageList tr.clicked {
background: #ff9933;
}
.deleted {
color: #9ca147;
}
.flagged {
color: #cc0000;
}
.high_priority {
color: #800000;
}
.low_priority {
color: #000000;
}
.message_list_controls {
background: #bb9d45;
}
.spacer {
background: #ffffff;
}
/* dialog box defs */
.dialogbox table.wrapper {
border: 1px solid #bb9d45;
}
.dialogbox td.folderAction {
background: #bb9d45;
}
/* addressbook_list.tpl defs */
#addressList table {
border: 1px solid #9ca147;
}
#addressList td.header1 {
background: #9ca147;
}
#addressList td.abookSwitch {
background: #bb9d45;
}
#addressList td.abookButtons {
background: #bb9d45;
}
#addressList td.abookField {
border-left: 1px solid #9ca147;
border-right: 1px solid #9ca147;
}
#addressList td.colHeader {
background: #9ca147;
}
#addrBookSearch table.wrapper {
border: 1px solid #9ca147;
}
#addrAddEdit table {
border: 1px solid #9ca147;
}
#addrAddEdit td.header {
background: #9ca147;
}
/* options defs */
#optionGroups table {
border: 1px solid #bb9d45;
}
#optionGroups td.title {
background: #bb9d45;
}
#optionGroups td.optionElement table {
border:1px solid #9ca147;
}
#optionGroups td.optionName {
background: #9ca147;
}
#optionGroups td.optionDesc {
background: #bb9d45;
}
#optionDisplay table {
border: 1px solid #bb9d45
}
#optionOrder table {
border: 1px solid #bb9d45
}
#optionOrder table.moveFields td {
border-left: 1px solid #bb9d45;
border-right: 1px solid #bb9d45;
}
#optionsIdentity table.table2 tr {
background: #bb9d45;
}
#optionsIdentity hr {
width: 95%;
border: 1px solid #9ca147;
}
/* help defs */
#help td.nav {
color: #bb9d45;
}
/* search defs */
div.search td.header4 {
border-bottom: 1px solid #9ca147;
}
div.search td.queryAction {
border-left: 1px solid #9ca147;
border-top: 1px solid #9ca147;
border-bottom: 1px solid #9ca147;
}
div.search td.queryDesc {
border-top: 1px solid #9ca147;
border-bottom: 1px solid #9ca147;
}
div.search span.error {
color: #cc0000;
}
div.search td.searchForm {
border-right: 1px solid #bb9d45;
border-left: 1px solid #bb9d45;
}
div.search td.queryError {
color: #cc0000;
}
div.search h2 {
color: #cc0000;
}
/* compse defs */
div.compose tr.header {
background: #9ca147;
}
div.compose tr.attachment td {
background: #bb9d45;
border-top: 1px solid #9ca147;
border-bottom: 1px solid #9ca147;
}
div.compose table.close {
background: #bb9d45;
border:1px solid #9ca147;
}

View file

@ -1,275 +0,0 @@
/* older css template */
/* page body formatting */
body {
color: #000000;
background-color: #dcddc5;
}
body.sqm_leftMain {
color: #ffffff;
background-color: #4f1c23;
}
/* right links */
a:link, a:visited, a:hover, a:active {
color: #4f1c23;
}
/* left links */
.sqm_leftMain a:link, .sqm_leftMain a:visited, .sqm_leftMain a:hover, .sqm_leftMain a:active {
color: #ffffff;
}
.leftunseen, .leftspecial, .leftspecial a:link, .leftspecial a:visited, .leftspecial a:hover, .leftspecial a:active {
color: #f4e1b9;
}
.leftnoselect a:link, .leftnoselect a:visited, .leftnoselect a:hover, .leftnoselect a:active {
color: #ffffff;
}
/* highlighted texts */
.highlight {
color: #ffffff;
}
.error_table {
color: #ff0000;
border: 2px solid #bca87e;
background-color: #4f1c23;
}
.error_thead {
background-color: #4c5c2b;
}
.error_thead_caption {
background-color: #4c5c2b;
}
.error_row {
color: #ff0000;
}
.error_val {
color: #000000;
border: 2px solid #bca87e;
}
.error_key {
border: 2px solid #bca87e;
color: #ff0000;
background-color: #bca87e;
}
/* Standard defs */
table.table1 {
border: 1px solid #bca87e;
}
table.table2 {
border: 1px solid #7c8546;
}
td.header1 {
background: #bca87e;
}
td.header2 {
background: #7c8546;
}
td.header4 {
background: #7c8546;
}
tr.even {
background: #c9cba4;
}
tr.odd {
background: #dcddc5;
}
.table_standard {
border:1px solid #bca87e;
}
.sqm_loginOrgName, .sqm_signoutBar {
background: #bca87e;
}
.sqm_motd {
background: #7c8546;
}
.sqm_motd td {
background: #dcddc5;
}
/* empty_folder.tpl defs */
.sqm_emptyFolder {
background: #7c8546;
}
.sqm_emptyFolder td {
background: #dcddc5;
}
/* error_box.tpl definitions */
.table_errorBoxWrapper {
background: #7c8546;
}
.table_errorBox {
background: #bca87e;
}
.error_message {
background: #dcddc5;
}
/* page_header.tpl definitions */
.sqm_currentFolder {
background: #7c8546;
}
.sqm_headerSignout {
background: #7c8546;
}
/* message_list.tpl definitions */
.table_messageListWrapper {
background: #7c8546;
}
.table_messageList {
background: #7c8546;
}
.table_messageList td.spacer {
background: #bca87e;
}
.table_messageList tr.mouse_over {
background: #7c8546;
}
.table_messageList tr.clicked {
background: #ff9933;
}
.deleted {
color: #7c8546;
}
.flagged {
color: #cc0000;
}
.high_priority {
color: #800000;
}
.low_priority {
color: #000000;
}
.message_list_controls {
background: #bca87e;
}
.spacer {
background: #dcddc5;
}
/* dialog box defs */
.dialogbox table.wrapper {
border: 1px solid #bca87e;
}
.dialogbox td.folderAction {
background: #bca87e;
}
/* addressbook_list.tpl defs */
#addressList table {
border: 1px solid #7c8546;
}
#addressList td.header1 {
background: #7c8546;
}
#addressList td.abookSwitch {
background: #bca87e;
}
#addressList td.abookButtons {
background: #bca87e;
}
#addressList td.abookField {
border-left: 1px solid #7c8546;
border-right: 1px solid #7c8546;
}
#addressList td.colHeader {
background: #7c8546;
}
#addrBookSearch table.wrapper {
border: 1px solid #7c8546;
}
#addrAddEdit table {
border: 1px solid #7c8546;
}
#addrAddEdit td.header {
background: #7c8546;
}
/* options defs */
#optionGroups table {
border: 1px solid #bca87e;
}
#optionGroups td.title {
background: #bca87e;
}
#optionGroups td.optionElement table {
border:1px solid #7c8546;
}
#optionGroups td.optionName {
background: #7c8546;
}
#optionGroups td.optionDesc {
background: #bca87e;
}
#optionDisplay table {
border: 1px solid #bca87e
}
#optionOrder table {
border: 1px solid #bca87e
}
#optionOrder table.moveFields td {
border-left: 1px solid #bca87e;
border-right: 1px solid #bca87e;
}
#optionsIdentity table.table2 tr {
background: #bca87e;
}
#optionsIdentity hr {
width: 95%;
border: 1px solid #7c8546;
}
/* help defs */
#help td.nav {
color: #bca87e;
}
/* search defs */
div.search td.header4 {
border-bottom: 1px solid #7c8546;
}
div.search td.queryAction {
border-left: 1px solid #7c8546;
border-top: 1px solid #7c8546;
border-bottom: 1px solid #7c8546;
}
div.search td.queryDesc {
border-top: 1px solid #7c8546;
border-bottom: 1px solid #7c8546;
}
div.search span.error {
color: #cc0000;
}
div.search td.searchForm {
border-right: 1px solid #bca87e;
border-left: 1px solid #bca87e;
}
div.search td.queryError {
color: #cc0000;
}
div.search h2 {
color: #cc0000;
}
/* compse defs */
div.compose tr.header {
background: #7c8546;
}
div.compose tr.attachment td {
background: #bca87e;
border-top: 1px solid #7c8546;
border-bottom: 1px solid #7c8546;
}
div.compose table.close {
background: #bca87e;
border:1px solid #7c8546;
}

View file

@ -1,275 +0,0 @@
/* older css template */
/* page body formatting */
body {
color: #d0d0d0;
background-color: #000000;
}
body.sqm_leftMain {
color: #d0d0d0;
background-color: #000000;
}
/* right links */
a:link, a:visited, a:hover, a:active {
color: #cfcfa0;
}
/* left links */
.sqm_leftMain a:link, .sqm_leftMain a:visited, .sqm_leftMain a:hover, .sqm_leftMain a:active {
color: #d0d0d0;
}
.leftunseen, .leftspecial, .leftspecial a:link, .leftspecial a:visited, .leftspecial a:hover, .leftspecial a:active {
color: #aaaa44;
}
.leftnoselect a:link, .leftnoselect a:visited, .leftnoselect a:hover, .leftnoselect a:active {
color: #414141;
}
/* highlighted texts */
.highlight {
color: #414141;
}
.error_table {
color: #ff3377;
border: 2px solid #595959;
background-color: #000000;
}
.error_thead {
background-color: #292929;
}
.error_thead_caption {
background-color: #292929;
}
.error_row {
color: #ff3377;
}
.error_val {
color: #d0d0d0;
border: 2px solid #595959;
}
.error_key {
border: 2px solid #595959;
color: #ff3377;
background-color: #595959;
}
/* Standard defs */
table.table1 {
border: 1px solid #595959;
}
table.table2 {
border: 1px solid #414141;
}
td.header1 {
background: #595959;
}
td.header2 {
background: #414141;
}
td.header4 {
background: #373700;
}
tr.even {
background: #202020;
}
tr.odd {
background: #000000;
}
.table_standard {
border:1px solid #595959;
}
.sqm_loginOrgName, .sqm_signoutBar {
background: #595959;
}
.sqm_motd {
background: #414141;
}
.sqm_motd td {
background: #000000;
}
/* empty_folder.tpl defs */
.sqm_emptyFolder {
background: #414141;
}
.sqm_emptyFolder td {
background: #000000;
}
/* error_box.tpl definitions */
.table_errorBoxWrapper {
background: #414141;
}
.table_errorBox {
background: #595959;
}
.error_message {
background: #000000;
}
/* page_header.tpl definitions */
.sqm_currentFolder {
background: #414141;
}
.sqm_headerSignout {
background: #414141;
}
/* message_list.tpl definitions */
.table_messageListWrapper {
background: #414141;
}
.table_messageList {
background: #373700;
}
.table_messageList td.spacer {
background: #595959;
}
.table_messageList tr.mouse_over {
background: #373700;
}
.table_messageList tr.clicked {
background: #ff9933;
}
.deleted {
color: #414141;
}
.flagged {
color: #ff7171;
}
.high_priority {
color: #f88888;
}
.low_priority {
color: #d0d0d0;
}
.message_list_controls {
background: #595959;
}
.spacer {
background: #000000;
}
/* dialog box defs */
.dialogbox table.wrapper {
border: 1px solid #595959;
}
.dialogbox td.folderAction {
background: #595959;
}
/* addressbook_list.tpl defs */
#addressList table {
border: 1px solid #414141;
}
#addressList td.header1 {
background: #414141;
}
#addressList td.abookSwitch {
background: #595959;
}
#addressList td.abookButtons {
background: #595959;
}
#addressList td.abookField {
border-left: 1px solid #414141;
border-right: 1px solid #414141;
}
#addressList td.colHeader {
background: #414141;
}
#addrBookSearch table.wrapper {
border: 1px solid #414141;
}
#addrAddEdit table {
border: 1px solid #414141;
}
#addrAddEdit td.header {
background: #414141;
}
/* options defs */
#optionGroups table {
border: 1px solid #595959;
}
#optionGroups td.title {
background: #595959;
}
#optionGroups td.optionElement table {
border:1px solid #414141;
}
#optionGroups td.optionName {
background: #414141;
}
#optionGroups td.optionDesc {
background: #595959;
}
#optionDisplay table {
border: 1px solid #595959
}
#optionOrder table {
border: 1px solid #595959
}
#optionOrder table.moveFields td {
border-left: 1px solid #595959;
border-right: 1px solid #595959;
}
#optionsIdentity table.table2 tr {
background: #595959;
}
#optionsIdentity hr {
width: 95%;
border: 1px solid #414141;
}
/* help defs */
#help td.nav {
color: #595959;
}
/* search defs */
div.search td.header4 {
border-bottom: 1px solid #414141;
}
div.search td.queryAction {
border-left: 1px solid #414141;
border-top: 1px solid #414141;
border-bottom: 1px solid #414141;
}
div.search td.queryDesc {
border-top: 1px solid #414141;
border-bottom: 1px solid #414141;
}
div.search span.error {
color: #ff7171;
}
div.search td.searchForm {
border-right: 1px solid #595959;
border-left: 1px solid #595959;
}
div.search td.queryError {
color: #ff7171;
}
div.search h2 {
color: #ff7171;
}
/* compse defs */
div.compose tr.header {
background: #414141;
}
div.compose tr.attachment td {
background: #595959;
border-top: 1px solid #414141;
border-bottom: 1px solid #414141;
}
div.compose table.close {
background: #595959;
border:1px solid #414141;
}

View file

@ -1,17 +0,0 @@
td.header1 {
background: url('img/gradient-blue.png') repeat-x;
vertical-align: middle;
}
#optionGroups td.optionElement table {
border:1px solid #a6b2e2;
}
#optionGroups td.optionName {
background: url('img/gradient-blue.png') repeat-x;
vertical-align: middle;
}
#optionDisplay table {
border:1px solid #a6b2e2;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 188 B

View file

@ -1,275 +0,0 @@
/* older css template */
/* page body formatting */
body {
color: #ffffff;
background-color: #929292;
}
body.sqm_leftMain {
color: #ffffff;
background-color: #294763;
}
/* right links */
a:link, a:visited, a:hover, a:active {
color: #ffffff;
}
/* left links */
.sqm_leftMain a:link, .sqm_leftMain a:visited, .sqm_leftMain a:hover, .sqm_leftMain a:active {
color: #ffffff;
}
.leftunseen, .leftspecial, .leftspecial a:link, .leftspecial a:visited, .leftspecial a:hover, .leftspecial a:active {
color: #a7c5f3;
}
.leftnoselect a:link, .leftnoselect a:visited, .leftnoselect a:hover, .leftnoselect a:active {
color: #d0d0d0;
}
/* highlighted texts */
.highlight {
color: #d0d0d0;
}
.error_table {
color: #ff0000;
border: 2px solid #6188a9;
background-color: #294763;
}
.error_thead {
background-color: #496e8b;
}
.error_thead_caption {
background-color: #496e8b;
}
.error_row {
color: #ff0000;
}
.error_val {
color: #ffffff;
border: 2px solid #6188a9;
}
.error_key {
border: 2px solid #6188a9;
color: #ff0000;
background-color: #6188a9;
}
/* Standard defs */
table.table1 {
border: 1px solid #6188a9;
}
table.table2 {
border: 1px solid #587b99;
}
td.header1 {
background: #6188a9;
}
td.header2 {
background: #587b99;
}
td.header4 {
background: #597d9d;
}
tr.even {
background: #7092b4;
}
tr.odd {
background: #929292;
}
.table_standard {
border:1px solid #6188a9;
}
.sqm_loginOrgName, .sqm_signoutBar {
background: #6188a9;
}
.sqm_motd {
background: #587b99;
}
.sqm_motd td {
background: #929292;
}
/* empty_folder.tpl defs */
.sqm_emptyFolder {
background: #587b99;
}
.sqm_emptyFolder td {
background: #929292;
}
/* error_box.tpl definitions */
.table_errorBoxWrapper {
background: #587b99;
}
.table_errorBox {
background: #6188a9;
}
.error_message {
background: #929292;
}
/* page_header.tpl definitions */
.sqm_currentFolder {
background: #587b99;
}
.sqm_headerSignout {
background: #587b99;
}
/* message_list.tpl definitions */
.table_messageListWrapper {
background: #587b99;
}
.table_messageList {
background: #597d9d;
}
.table_messageList td.spacer {
background: #6188a9;
}
.table_messageList tr.mouse_over {
background: #597d9d;
}
.table_messageList tr.clicked {
background: #ff9933;
}
.deleted {
color: #587b99;
}
.flagged {
color: #cc0000;
}
.high_priority {
color: #800000;
}
.low_priority {
color: #ffffff;
}
.message_list_controls {
background: #6188a9;
}
.spacer {
background: #929292;
}
/* dialog box defs */
.dialogbox table.wrapper {
border: 1px solid #6188a9;
}
.dialogbox td.folderAction {
background: #6188a9;
}
/* addressbook_list.tpl defs */
#addressList table {
border: 1px solid #587b99;
}
#addressList td.header1 {
background: #587b99;
}
#addressList td.abookSwitch {
background: #6188a9;
}
#addressList td.abookButtons {
background: #6188a9;
}
#addressList td.abookField {
border-left: 1px solid #587b99;
border-right: 1px solid #587b99;
}
#addressList td.colHeader {
background: #587b99;
}
#addrBookSearch table.wrapper {
border: 1px solid #587b99;
}
#addrAddEdit table {
border: 1px solid #587b99;
}
#addrAddEdit td.header {
background: #587b99;
}
/* options defs */
#optionGroups table {
border: 1px solid #6188a9;
}
#optionGroups td.title {
background: #6188a9;
}
#optionGroups td.optionElement table {
border:1px solid #587b99;
}
#optionGroups td.optionName {
background: #587b99;
}
#optionGroups td.optionDesc {
background: #6188a9;
}
#optionDisplay table {
border: 1px solid #6188a9
}
#optionOrder table {
border: 1px solid #6188a9
}
#optionOrder table.moveFields td {
border-left: 1px solid #6188a9;
border-right: 1px solid #6188a9;
}
#optionsIdentity table.table2 tr {
background: #6188a9;
}
#optionsIdentity hr {
width: 95%;
border: 1px solid #587b99;
}
/* help defs */
#help td.nav {
color: #6188a9;
}
/* search defs */
div.search td.header4 {
border-bottom: 1px solid #587b99;
}
div.search td.queryAction {
border-left: 1px solid #587b99;
border-top: 1px solid #587b99;
border-bottom: 1px solid #587b99;
}
div.search td.queryDesc {
border-top: 1px solid #587b99;
border-bottom: 1px solid #587b99;
}
div.search span.error {
color: #cc0000;
}
div.search td.searchForm {
border-right: 1px solid #6188a9;
border-left: 1px solid #6188a9;
}
div.search td.queryError {
color: #cc0000;
}
div.search h2 {
color: #cc0000;
}
/* compse defs */
div.compose tr.header {
background: #587b99;
}
div.compose tr.attachment td {
background: #6188a9;
border-top: 1px solid #587b99;
border-bottom: 1px solid #587b99;
}
div.compose table.close {
background: #6188a9;
border:1px solid #587b99;
}

View file

@ -1,275 +0,0 @@
/* older css template */
/* page body formatting */
body {
color: #9097bc;
background-color: #19193a;
}
body.sqm_leftMain {
color: #8a8aaf;
background-color: #19193a;
}
/* right links */
a:link, a:visited, a:hover, a:active {
color: #8a8aaf;
}
/* left links */
.sqm_leftMain a:link, .sqm_leftMain a:visited, .sqm_leftMain a:hover, .sqm_leftMain a:active {
color: #8a8aaf;
}
.leftunseen, .leftspecial, .leftspecial a:link, .leftspecial a:visited, .leftspecial a:hover, .leftspecial a:active {
color: #ffffff;
}
.leftnoselect a:link, .leftnoselect a:visited, .leftnoselect a:hover, .leftnoselect a:active {
color: #ffffff;
}
/* highlighted texts */
.highlight {
color: #ffffff;
}
.error_table {
color: #8a8aaf;
border: 2px solid #4c4b83;
background-color: #19193a;
}
.error_thead {
background-color: #16161d;
}
.error_thead_caption {
background-color: #16161d;
}
.error_row {
color: #8a8aaf;
}
.error_val {
color: #9097bc;
border: 2px solid #4c4b83;
}
.error_key {
border: 2px solid #4c4b83;
color: #8a8aaf;
background-color: #4c4b83;
}
/* Standard defs */
table.table1 {
border: 1px solid #4c4b83;
}
table.table2 {
border: 1px solid #2d2d3b;
}
td.header1 {
background: #4c4b83;
}
td.header2 {
background: #2d2d3b;
}
td.header4 {
background: #19193a;
}
tr.even {
background: #1d1d26;
}
tr.odd {
background: #19193a;
}
.table_standard {
border:1px solid #4c4b83;
}
.sqm_loginOrgName, .sqm_signoutBar {
background: #4c4b83;
}
.sqm_motd {
background: #2d2d3b;
}
.sqm_motd td {
background: #19193a;
}
/* empty_folder.tpl defs */
.sqm_emptyFolder {
background: #2d2d3b;
}
.sqm_emptyFolder td {
background: #19193a;
}
/* error_box.tpl definitions */
.table_errorBoxWrapper {
background: #2d2d3b;
}
.table_errorBox {
background: #4c4b83;
}
.error_message {
background: #19193a;
}
/* page_header.tpl definitions */
.sqm_currentFolder {
background: #2d2d3b;
}
.sqm_headerSignout {
background: #2d2d3b;
}
/* message_list.tpl definitions */
.table_messageListWrapper {
background: #2d2d3b;
}
.table_messageList {
background: #19193a;
}
.table_messageList td.spacer {
background: #4c4b83;
}
.table_messageList tr.mouse_over {
background: #19193a;
}
.table_messageList tr.clicked {
background: #ff9933;
}
.deleted {
color: #2d2d3b;
}
.flagged {
color: #ffffff;
}
.high_priority {
color: #ffffff;
}
.low_priority {
color: #9097bc;
}
.message_list_controls {
background: #4c4b83;
}
.spacer {
background: #19193a;
}
/* dialog box defs */
.dialogbox table.wrapper {
border: 1px solid #4c4b83;
}
.dialogbox td.folderAction {
background: #4c4b83;
}
/* addressbook_list.tpl defs */
#addressList table {
border: 1px solid #2d2d3b;
}
#addressList td.header1 {
background: #2d2d3b;
}
#addressList td.abookSwitch {
background: #4c4b83;
}
#addressList td.abookButtons {
background: #4c4b83;
}
#addressList td.abookField {
border-left: 1px solid #2d2d3b;
border-right: 1px solid #2d2d3b;
}
#addressList td.colHeader {
background: #2d2d3b;
}
#addrBookSearch table.wrapper {
border: 1px solid #2d2d3b;
}
#addrAddEdit table {
border: 1px solid #2d2d3b;
}
#addrAddEdit td.header {
background: #2d2d3b;
}
/* options defs */
#optionGroups table {
border: 1px solid #4c4b83;
}
#optionGroups td.title {
background: #4c4b83;
}
#optionGroups td.optionElement table {
border:1px solid #2d2d3b;
}
#optionGroups td.optionName {
background: #2d2d3b;
}
#optionGroups td.optionDesc {
background: #4c4b83;
}
#optionDisplay table {
border: 1px solid #4c4b83
}
#optionOrder table {
border: 1px solid #4c4b83
}
#optionOrder table.moveFields td {
border-left: 1px solid #4c4b83;
border-right: 1px solid #4c4b83;
}
#optionsIdentity table.table2 tr {
background: #4c4b83;
}
#optionsIdentity hr {
width: 95%;
border: 1px solid #2d2d3b;
}
/* help defs */
#help td.nav {
color: #4c4b83;
}
/* search defs */
div.search td.header4 {
border-bottom: 1px solid #2d2d3b;
}
div.search td.queryAction {
border-left: 1px solid #2d2d3b;
border-top: 1px solid #2d2d3b;
border-bottom: 1px solid #2d2d3b;
}
div.search td.queryDesc {
border-top: 1px solid #2d2d3b;
border-bottom: 1px solid #2d2d3b;
}
div.search span.error {
color: #ffffff;
}
div.search td.searchForm {
border-right: 1px solid #4c4b83;
border-left: 1px solid #4c4b83;
}
div.search td.queryError {
color: #ffffff;
}
div.search h2 {
color: #ffffff;
}
/* compse defs */
div.compose tr.header {
background: #2d2d3b;
}
div.compose tr.attachment td {
background: #4c4b83;
border-top: 1px solid #2d2d3b;
border-bottom: 1px solid #2d2d3b;
}
div.compose table.close {
background: #4c4b83;
border:1px solid #2d2d3b;
}

View file

@ -1,275 +0,0 @@
/* older css template */
/* page body formatting */
body {
color: #ffffff;
background-color: #000000;
}
body.sqm_leftMain {
color: #ffff80;
background-color: #000000;
}
/* right links */
a:link, a:visited, a:hover, a:active {
color: #ffff80;
}
/* left links */
.sqm_leftMain a:link, .sqm_leftMain a:visited, .sqm_leftMain a:hover, .sqm_leftMain a:active {
color: #ffff80;
}
.leftunseen, .leftspecial, .leftspecial a:link, .leftspecial a:visited, .leftspecial a:hover, .leftspecial a:active {
color: #3333ff;
}
.leftnoselect a:link, .leftnoselect a:visited, .leftnoselect a:hover, .leftnoselect a:active {
color: #c0c060;
}
/* highlighted texts */
.highlight {
color: #c0c060;
}
.error_table {
color: #ff0000;
border: 2px solid #181818;
background-color: #000000;
}
.error_thead {
background-color: #000080;
}
.error_thead_caption {
background-color: #000080;
}
.error_row {
color: #ff0000;
}
.error_val {
color: #ffffff;
border: 2px solid #181818;
}
.error_key {
border: 2px solid #181818;
color: #ff0000;
background-color: #181818;
}
/* Standard defs */
table.table1 {
border: 1px solid #181818;
}
table.table2 {
border: 1px solid #000080;
}
td.header1 {
background: #181818;
}
td.header2 {
background: #000080;
}
td.header4 {
background: #000080;
}
tr.even {
background: #808080;
}
tr.odd {
background: #000000;
}
.table_standard {
border:1px solid #181818;
}
.sqm_loginOrgName, .sqm_signoutBar {
background: #181818;
}
.sqm_motd {
background: #000080;
}
.sqm_motd td {
background: #000000;
}
/* empty_folder.tpl defs */
.sqm_emptyFolder {
background: #000080;
}
.sqm_emptyFolder td {
background: #000000;
}
/* error_box.tpl definitions */
.table_errorBoxWrapper {
background: #000080;
}
.table_errorBox {
background: #181818;
}
.error_message {
background: #000000;
}
/* page_header.tpl definitions */
.sqm_currentFolder {
background: #000080;
}
.sqm_headerSignout {
background: #000080;
}
/* message_list.tpl definitions */
.table_messageListWrapper {
background: #000080;
}
.table_messageList {
background: #000080;
}
.table_messageList td.spacer {
background: #181818;
}
.table_messageList tr.mouse_over {
background: #000080;
}
.table_messageList tr.clicked {
background: #ff9933;
}
.deleted {
color: #000080;
}
.flagged {
color: #800000;
}
.high_priority {
color: #a0a0a0;
}
.low_priority {
color: #ffffff;
}
.message_list_controls {
background: #181818;
}
.spacer {
background: #000000;
}
/* dialog box defs */
.dialogbox table.wrapper {
border: 1px solid #181818;
}
.dialogbox td.folderAction {
background: #181818;
}
/* addressbook_list.tpl defs */
#addressList table {
border: 1px solid #000080;
}
#addressList td.header1 {
background: #000080;
}
#addressList td.abookSwitch {
background: #181818;
}
#addressList td.abookButtons {
background: #181818;
}
#addressList td.abookField {
border-left: 1px solid #000080;
border-right: 1px solid #000080;
}
#addressList td.colHeader {
background: #000080;
}
#addrBookSearch table.wrapper {
border: 1px solid #000080;
}
#addrAddEdit table {
border: 1px solid #000080;
}
#addrAddEdit td.header {
background: #000080;
}
/* options defs */
#optionGroups table {
border: 1px solid #181818;
}
#optionGroups td.title {
background: #181818;
}
#optionGroups td.optionElement table {
border:1px solid #000080;
}
#optionGroups td.optionName {
background: #000080;
}
#optionGroups td.optionDesc {
background: #181818;
}
#optionDisplay table {
border: 1px solid #181818
}
#optionOrder table {
border: 1px solid #181818
}
#optionOrder table.moveFields td {
border-left: 1px solid #181818;
border-right: 1px solid #181818;
}
#optionsIdentity table.table2 tr {
background: #181818;
}
#optionsIdentity hr {
width: 95%;
border: 1px solid #000080;
}
/* help defs */
#help td.nav {
color: #181818;
}
/* search defs */
div.search td.header4 {
border-bottom: 1px solid #000080;
}
div.search td.queryAction {
border-left: 1px solid #000080;
border-top: 1px solid #000080;
border-bottom: 1px solid #000080;
}
div.search td.queryDesc {
border-top: 1px solid #000080;
border-bottom: 1px solid #000080;
}
div.search span.error {
color: #800000;
}
div.search td.searchForm {
border-right: 1px solid #181818;
border-left: 1px solid #181818;
}
div.search td.queryError {
color: #800000;
}
div.search h2 {
color: #800000;
}
/* compse defs */
div.compose tr.header {
background: #000080;
}
div.compose tr.attachment td {
background: #181818;
border-top: 1px solid #000080;
border-bottom: 1px solid #000080;
}
div.compose table.close {
background: #181818;
border:1px solid #000080;
}

View file

@ -1,275 +0,0 @@
/* older css template */
/* page body formatting */
body {
color: #333333;
background-color: #CBD2D9;
}
body.sqm_leftMain {
color: #CCCCCC;
background-color: #5B6177;
}
/* right links */
a:link, a:visited, a:hover, a:active {
color: #333333;
}
/* left links */
.sqm_leftMain a:link, .sqm_leftMain a:visited, .sqm_leftMain a:hover, .sqm_leftMain a:active {
color: #CCCCCC;
}
.leftunseen, .leftspecial, .leftspecial a:link, .leftspecial a:visited, .leftspecial a:hover, .leftspecial a:active {
color: #CCCCCC;
}
.leftnoselect a:link, .leftnoselect a:visited, .leftnoselect a:hover, .leftnoselect a:active {
color: #CCCCCC;
}
/* highlighted texts */
.highlight {
color: #CCCCCC;
}
.error_table {
color: #FF0000;
border: 2px solid #9DB5CB;
background-color: #5B6177;
}
.error_thead {
background-color: #FFFFFF;
}
.error_thead_caption {
background-color: #FFFFFF;
}
.error_row {
color: #FF0000;
}
.error_val {
color: #333333;
border: 2px solid #9DB5CB;
}
.error_key {
border: 2px solid #9DB5CB;
color: #FF0000;
background-color: #9DB5CB;
}
/* Standard defs */
table.table1 {
border: 1px solid #9DB5CB;
}
table.table2 {
border: 1px solid #597D9D;
}
td.header1 {
background: #9DB5CB;
}
td.header2 {
background: #597D9D;
}
td.header4 {
background: #597D9D;
}
tr.even {
background: #9DB5CB;
}
tr.odd {
background: #CBD2D9;
}
.table_standard {
border:1px solid #9DB5CB;
}
.sqm_loginOrgName, .sqm_signoutBar {
background: #9DB5CB;
}
.sqm_motd {
background: #597D9D;
}
.sqm_motd td {
background: #CBD2D9;
}
/* empty_folder.tpl defs */
.sqm_emptyFolder {
background: #597D9D;
}
.sqm_emptyFolder td {
background: #CBD2D9;
}
/* error_box.tpl definitions */
.table_errorBoxWrapper {
background: #597D9D;
}
.table_errorBox {
background: #9DB5CB;
}
.error_message {
background: #CBD2D9;
}
/* page_header.tpl definitions */
.sqm_currentFolder {
background: #597D9D;
}
.sqm_headerSignout {
background: #597D9D;
}
/* message_list.tpl definitions */
.table_messageListWrapper {
background: #597D9D;
}
.table_messageList {
background: #597D9D;
}
.table_messageList td.spacer {
background: #9DB5CB;
}
.table_messageList tr.mouse_over {
background: #597D9D;
}
.table_messageList tr.clicked {
background: #ff9933;
}
.deleted {
color: #597D9D;
}
.flagged {
color: #CC0000;
}
.high_priority {
color: #800000;
}
.low_priority {
color: #333333;
}
.message_list_controls {
background: #9DB5CB;
}
.spacer {
background: #CBD2D9;
}
/* dialog box defs */
.dialogbox table.wrapper {
border: 1px solid #9DB5CB;
}
.dialogbox td.folderAction {
background: #9DB5CB;
}
/* addressbook_list.tpl defs */
#addressList table {
border: 1px solid #597D9D;
}
#addressList td.header1 {
background: #597D9D;
}
#addressList td.abookSwitch {
background: #9DB5CB;
}
#addressList td.abookButtons {
background: #9DB5CB;
}
#addressList td.abookField {
border-left: 1px solid #597D9D;
border-right: 1px solid #597D9D;
}
#addressList td.colHeader {
background: #597D9D;
}
#addrBookSearch table.wrapper {
border: 1px solid #597D9D;
}
#addrAddEdit table {
border: 1px solid #597D9D;
}
#addrAddEdit td.header {
background: #597D9D;
}
/* options defs */
#optionGroups table {
border: 1px solid #9DB5CB;
}
#optionGroups td.title {
background: #9DB5CB;
}
#optionGroups td.optionElement table {
border:1px solid #597D9D;
}
#optionGroups td.optionName {
background: #597D9D;
}
#optionGroups td.optionDesc {
background: #9DB5CB;
}
#optionDisplay table {
border: 1px solid #9DB5CB
}
#optionOrder table {
border: 1px solid #9DB5CB
}
#optionOrder table.moveFields td {
border-left: 1px solid #9DB5CB;
border-right: 1px solid #9DB5CB;
}
#optionsIdentity table.table2 tr {
background: #9DB5CB;
}
#optionsIdentity hr {
width: 95%;
border: 1px solid #597D9D;
}
/* help defs */
#help td.nav {
color: #9DB5CB;
}
/* search defs */
div.search td.header4 {
border-bottom: 1px solid #597D9D;
}
div.search td.queryAction {
border-left: 1px solid #597D9D;
border-top: 1px solid #597D9D;
border-bottom: 1px solid #597D9D;
}
div.search td.queryDesc {
border-top: 1px solid #597D9D;
border-bottom: 1px solid #597D9D;
}
div.search span.error {
color: #CC0000;
}
div.search td.searchForm {
border-right: 1px solid #9DB5CB;
border-left: 1px solid #9DB5CB;
}
div.search td.queryError {
color: #CC0000;
}
div.search h2 {
color: #CC0000;
}
/* compse defs */
div.compose tr.header {
background: #597D9D;
}
div.compose tr.attachment td {
background: #9DB5CB;
border-top: 1px solid #597D9D;
border-bottom: 1px solid #597D9D;
}
div.compose table.close {
background: #9DB5CB;
border:1px solid #597D9D;
}

View file

@ -1,275 +0,0 @@
/* older css template */
/* page body formatting */
body {
color: #000000;
background-color: #dedfdf;
}
body.sqm_leftMain {
color: #000000;
background-color: #475a94;
}
/* right links */
a:link, a:visited, a:hover, a:active {
color: #0000cc;
}
/* left links */
.sqm_leftMain a:link, .sqm_leftMain a:visited, .sqm_leftMain a:hover, .sqm_leftMain a:active {
color: #000000;
}
.leftunseen, .leftspecial, .leftspecial a:link, .leftspecial a:visited, .leftspecial a:hover, .leftspecial a:active {
color: #770000;
}
.leftnoselect a:link, .leftnoselect a:visited, .leftnoselect a:hover, .leftnoselect a:active {
color: #ababab;
}
/* highlighted texts */
.highlight {
color: #ababab;
}
.error_table {
color: #ff0000;
border: 2px solid #a8a8a8;
background-color: #475a94;
}
.error_thead {
background-color: #666666;
}
.error_thead_caption {
background-color: #666666;
}
.error_row {
color: #ff0000;
}
.error_val {
color: #000000;
border: 2px solid #a8a8a8;
}
.error_key {
border: 2px solid #a8a8a8;
color: #ff0000;
background-color: #a8a8a8;
}
/* Standard defs */
table.table1 {
border: 1px solid #a8a8a8;
}
table.table2 {
border: 1px solid #ababab;
}
td.header1 {
background: #a8a8a8;
}
td.header2 {
background: #ababab;
}
td.header4 {
background: #ffffcc;
}
tr.even {
background: #ededed;
}
tr.odd {
background: #dedfdf;
}
.table_standard {
border:1px solid #a8a8a8;
}
.sqm_loginOrgName, .sqm_signoutBar {
background: #a8a8a8;
}
.sqm_motd {
background: #ababab;
}
.sqm_motd td {
background: #dedfdf;
}
/* empty_folder.tpl defs */
.sqm_emptyFolder {
background: #ababab;
}
.sqm_emptyFolder td {
background: #dedfdf;
}
/* error_box.tpl definitions */
.table_errorBoxWrapper {
background: #ababab;
}
.table_errorBox {
background: #a8a8a8;
}
.error_message {
background: #dedfdf;
}
/* page_header.tpl definitions */
.sqm_currentFolder {
background: #ababab;
}
.sqm_headerSignout {
background: #ababab;
}
/* message_list.tpl definitions */
.table_messageListWrapper {
background: #ababab;
}
.table_messageList {
background: #ffffcc;
}
.table_messageList td.spacer {
background: #a8a8a8;
}
.table_messageList tr.mouse_over {
background: #ffffcc;
}
.table_messageList tr.clicked {
background: #ff9933;
}
.deleted {
color: #ababab;
}
.flagged {
color: #cc0000;
}
.high_priority {
color: #800000;
}
.low_priority {
color: #000000;
}
.message_list_controls {
background: #a8a8a8;
}
.spacer {
background: #dedfdf;
}
/* dialog box defs */
.dialogbox table.wrapper {
border: 1px solid #a8a8a8;
}
.dialogbox td.folderAction {
background: #a8a8a8;
}
/* addressbook_list.tpl defs */
#addressList table {
border: 1px solid #ababab;
}
#addressList td.header1 {
background: #ababab;
}
#addressList td.abookSwitch {
background: #a8a8a8;
}
#addressList td.abookButtons {
background: #a8a8a8;
}
#addressList td.abookField {
border-left: 1px solid #ababab;
border-right: 1px solid #ababab;
}
#addressList td.colHeader {
background: #ababab;
}
#addrBookSearch table.wrapper {
border: 1px solid #ababab;
}
#addrAddEdit table {
border: 1px solid #ababab;
}
#addrAddEdit td.header {
background: #ababab;
}
/* options defs */
#optionGroups table {
border: 1px solid #a8a8a8;
}
#optionGroups td.title {
background: #a8a8a8;
}
#optionGroups td.optionElement table {
border:1px solid #ababab;
}
#optionGroups td.optionName {
background: #ababab;
}
#optionGroups td.optionDesc {
background: #a8a8a8;
}
#optionDisplay table {
border: 1px solid #a8a8a8
}
#optionOrder table {
border: 1px solid #a8a8a8
}
#optionOrder table.moveFields td {
border-left: 1px solid #a8a8a8;
border-right: 1px solid #a8a8a8;
}
#optionsIdentity table.table2 tr {
background: #a8a8a8;
}
#optionsIdentity hr {
width: 95%;
border: 1px solid #ababab;
}
/* help defs */
#help td.nav {
color: #a8a8a8;
}
/* search defs */
div.search td.header4 {
border-bottom: 1px solid #ababab;
}
div.search td.queryAction {
border-left: 1px solid #ababab;
border-top: 1px solid #ababab;
border-bottom: 1px solid #ababab;
}
div.search td.queryDesc {
border-top: 1px solid #ababab;
border-bottom: 1px solid #ababab;
}
div.search span.error {
color: #cc0000;
}
div.search td.searchForm {
border-right: 1px solid #a8a8a8;
border-left: 1px solid #a8a8a8;
}
div.search td.queryError {
color: #cc0000;
}
div.search h2 {
color: #cc0000;
}
/* compse defs */
div.compose tr.header {
background: #ababab;
}
div.compose tr.attachment td {
background: #a8a8a8;
border-top: 1px solid #ababab;
border-bottom: 1px solid #ababab;
}
div.compose table.close {
background: #a8a8a8;
border:1px solid #ababab;
}

573
css/nature/default.css Normal file
View file

@ -0,0 +1,573 @@
body
{
color: #FFFFFF;
background-color: #305030;
background-image: url(//realityripple.com/images/nature.jpg);
background-size: cover !important;
background-repeat: no-repeat !important;
background-position: left bottom !important;
background-attachment: fixed !important;
text-shadow: 1px 1px 2px #000000;
}
body.sqm_leftMain
{
color: #FFFFFF;
background-color: #103010;
background-image: linear-gradient(to right, #000000 0%, #103010 100%);
}
body.sqm_leftMain span a img
{
vertical-align: super;
}
a:link, a:visited
{
color: #00CC00;
text-decoration: none;
}
a:hover, a:active
{
text-decoration: underline;
}
.sqm_leftMain a:link, .sqm_leftMain a:visited, .sqm_leftMain a:hover, .sqm_leftMain a:active
{
color: #00A000;
}
.leftunseen, .leftspecial, .leftspecial a:link, .leftspecial a:visited, .leftspecial a:hover, .leftspecial a:active
{
color: #00CC00;
}
/* UNTESTED */
.leftnoselect a:link, .leftnoselect a:visited, .leftnoselect a:hover, .leftnoselect a:active
{
color: #00FF00;
}
.highlight
{
color: #FF0000;
}
.error_table
{
color: #FFFFFF;
border: 2px solid #FF0000;
background-color: #000000;
}
.error_thead
{
background-color: #800000;
}
.error_thead_caption
{
background-color: #FF0000;
}
.error_row
{
color: #FFFFFF;
}
.error_val
{
color: #FFFFFF;
border: 2px solid #FF0000;
}
.error_key
{
border: 2px solid #FF0000;
color: #FFFFFF;
background-color: #000000;
}
/* /UNTESTED */
table.table1
{
border: 0 !important;
width: 100% !important;
background: rgba(0, 0, 0, 0.7) !important;
margin-top: 0 !important;
margin-bottom: 0 !important;
padding-top: 1em !important;
padding-bottom: 1em !important;
}
table.spacer
{
background-color: rgba(0, 0, 0, 0.7) !important;
}
table.table2
{
border: 0 !important;
width: 100% !important;
background-color: rgba(0, 0, 0, 0.7) !important;
margin-top: 0 !important;
margin-bottom: 0 !important;
padding-bottom: 0.5em;
}
table.table1 table.table2
{
background-color: transparent !important;
}
table.table1 td
{
vertical-align: top;
}
table.table2 td
{
padding-left: 0 !important;
padding-right: 0 !important;
}
td.header1
{
text-align: center !important;
background: rgba(0, 32, 0, 0.6) !important;
}
td.header2
{
text-align: center !important;
background: rgba(0, 0, 0, 0.5) !important;
}
td.header4
{
background: rgba(0, 32, 0, 0.6);
}
tr.even
{
background: transparent;
}
tr.odd
{
background: rgba(32, 32, 128, 0.3);
}
.table_standard
{
border: 0;
background: rgba(0, 0, 0, 0.7);
}
.sqm_loginOrgName, .sqm_signoutBar
{
background-color: #002000;
}
.sqm_motd
{
background-color: #008000;
background-image: linear-gradient(to right, #000000, #008000, #000000);
width: 100%;
}
.sqm_motd td
{
background: #000000;
text-align: center;
}
table.sqm_emptyFolder
{
background: rgba(0, 0, 0, 0.7);
width: 100%;
padding-bottom: 0.25em;
border-bottom-left-radius: 0.5em;
border-bottom-right-radius: 0.5em;
}
table.sqm_emptyFolder td
{
background: transparent;
}
.table_errorBoxWrapper
{
background: rgba(0, 0, 0, 0.7);
width: 100%;
}
.table_errorBox
{
background: #000000;
margin-left: auto;
margin-right: auto;
border: 1px solid #FF0000;
padding: 0.25em;
border-radius: 0.5em;
}
.error_message
{
background: #000000;
padding: 0.25em;
}
.sqm_currentFolder
{
background: rgba(0, 0, 0, 0.7);
padding-top: 0.25em;
padding-left: 0.5em;
border-top-left-radius: 0.5em;
}
.sqm_headerSignout
{
background: rgba(0, 0, 0, 0.7);
padding-top: 0.25em;
padding-right: 0.5em;
border-top-right-radius: 0.5em;
}
.sqm_topNavigation
{
background: rgba(0, 0, 0, 0.7);
text-align: center;
padding-left: 0.5em;
padding-bottom: 2em;
}
.sqm_providerInfo
{
background: rgba(0, 0, 0, 0.7);
padding-bottom: 0.25em;
padding-right: 0.5em;
padding-bottom: 2em;
}
div#message_list table.table_empty td
{
padding: 0;
}
.table_messageListWrapper
{
background: rgba(0, 0, 0, 0.7);
}
.table_messageList
{
background: transparent;
}
.table_messageList td.spacer
{
background-color: transparent;
background-image: none;
}
.table_messageList tr.mouse_over
{
background: #000000;
}
.table_messageList tr.clicked
{
background: #004000;
}
.deleted
{
color: #B0B0B0;
}
.flagged
{
color: #C0C000;
}
.high_priority
{
color: #FF0000;
}
.low_priority
{
color: #00FFFF;
}
.message_list_controls
{
background: transparent;
}
.spacer
{
background-color: transparent;
}
.dialogbox table.wrapper
{
border: 0;
background: rgba(0, 0, 0, 0.7);
width: 100%;
}
.dialogbox table.wrapper table
{
width: 100%;
}
.dialogbox table.wrapper table td.header2
{
background: rgba(0, 0, 0, 0.6);
}
.dialogbox table.wrapper td
{
padding-left: 0;
padding-right: 0;
}
#addressList td.abookPaginationAndButtons
{
background: transparent;
}
#addressList td.abookSwitch
{
background: transparent;
}
#addressList td.abookButtons
{
background: transparent;
}
#addressList td.abookField:first-child
{
border-left: 0;
padding-left: 0;
}
#addressList td.abookField
{
border-left: 1px solid #606060;
padding-left: 0.5em;
border-right: 0;
}
#addressList td.colHeader
{
background: rgba(0, 0, 0, 0.6);
}
#addrBookSearch table.wrapper
{
border: 1px solid #008000;
background: rgba(0, 0, 0, 0.7);
}
#optionGroups td.optionDesc
{
background: transparent;
padding: 0 0.5em 0.5em;
}
#optionOrder table.moveFields
{
background: #000000;
padding: 0.5em;
margin-top: 1em;
margin-bottom: 1em;
border-radius: 0.5em;
}
#optionOrder table.moveFields td
{
border-left: 1px solid #606060;
padding-left: 0.5em;
border-right: 0px;
padding-right: 0.5em;
}
#optionOrder table.moveFields td:first-child
{
border-left: 0px;
padding-left: 0;
}
#optionsIdentity table.table2 tr
{
background: transparent;
}
#optionsIdentity hr
{
width: 95%;
border: 1px solid #006000;
}
#help td.nav
{
color: #B0B0B0;
}
div.search td.header4
{
border-bottom: 1px solid #008000;
}
div.search td.queryAction
{
border-left: 1px solid #008000;
border-top: 0;
border-bottom: 1px solid #008000;
}
div.search td.queryDesc
{
border-top: 0;
border-bottom: 1px solid #008000;
}
div.search span.error
{
color: #FF0000;
}
div.search td.searchForm:first-child
{
border-left: 0px;
}
div.search td.searchForm
{
border-right: 0px;
border-left: 1px solid #606060;
}
div.search td.queryError
{
color: #FF0000;
}
div.search h1
{
background-color: rgba(0, 0, 0, 0.7);
margin: 0;
padding: 0.25em;
border-top: 1px solid #606060;
}
form + hr
{
margin-top: 0;
margin-bottom: 0;
}
div.search h2
{
color: #FFFFFF;
}
div.compose tr.header
{
background: transparent;
}
div.compose tr.header + tr.attachment td
{
border-top: 1px solid #000000;
}
div.compose tr.attachment td
{
background: transparent;
border-top: 0px;
border-bottom: 1px solid #000000;
}
div.compose table.close
{
text-align: right;
background: transparent;
border: 0;
}
div.compose table#attachment_table,
div.readMenuBar table
{
border-left: 0;
border-right: 0;
background: rgba(0, 0, 0, 0.7);
}
div.readMenuBar table.top
{
border-top: 0;
}
div.readMenuBar table.bottom
{
border-bottom: 0;
}
div.readMenuBar tr.buttons
{
background-color: transparent;
}
table.sm_readBody_table2
{
border-color: transparent;
border-style: solid;
border-top-width: 0.25em;
border-bottom-width: 0.25em;
border-left-width: 1em;
border-right-width: 1em;
background-color: rgba(0, 0, 0, 0.7);
}
table.sm_readBody_table2 pre
{
white-space: pre-wrap;
border-radius: 0.5em;
background: #000000;
padding: 1em;
}
table.sm_readBody_table2 pre a
{
word-wrap: anywhere;
}
table.sm_readBody_table2 pre .quote1
{
color: #80A0FF;
}
table.sm_readBody_table2 pre .quote2
{
color: #80FFFF;
}
table.sm_readBody_table2 div.htmlIframe iframe
{
color: #000000;
background-color: #FFFFFF;
border: 0;
}
div.readHeaders tr#smime
{
background-color: rgba(255, 153, 51, 0.3);
}
div.readHeaders tr#smime a, table.readHeaders tr#smime a:visited
{
color: #FF9933;
}
table[bgcolor]
{
border: 0;
background: rgba(0, 0, 0, 0.7) !important;
width: 100%;
}
table[bgcolor] table[bgcolor]
{
border: 0;
background: transparent !important;
}
table[bgcolor] td[bgcolor]
{
background: transparent !important;
}
table[bgcolor] ~ form table
{
margin-left: 2.5%;
border-left: 1px solid #008000;
border-right: 1px solid #008000;
border-bottom: 1px solid #008000;
background: rgba(0, 0, 0, 0.7) !important;
}
tr[bgcolor="#DCDCDC"], td[bgcolor="#DCDCDC"]
{
background-color: #002000;
}
tr[bgcolor="#ABABAB"]
{
background-color: #004000;
}
tr[bgcolor="#FFFFCC"]
{
background-color: #000020;
}
td[bgcolor="#FFFFFF"]
{
background-color: #000000;
}
input[type="text"], input[type="password"], textarea, input:not([type])
{
background-color: #101010;
border: 1px solid #C0C0C0;
color: #FFFFFF;
}
select
{
background-color: #000000;
border: 1px solid #C0C0C0;
color: #FFFFFF;
}
input[type="submit"],
input[type="button"]
{
color: #FFFFFF;
border-color: #464646;
background-image: linear-gradient(to bottom, #202020, #070707);
background-color: #070707;
display: inline-block;
outline: 0;
font-family: sans-serif;
font-size: 80%;
font-style: normal;
padding: 0.2em 0.63em;
margin: 0.15em 0.25em;
border-radius: 2px;
border-width: 1px;
border-style: solid;
text-indent: 0;
text-align: inherit;
white-space: normal;
cursor: pointer;
cursor: hand;
}
input[type="submit"]:hover:not([disabled]),
input[type="submit"]:focus:not([disabled]),
input[type="button"]:hover:not([disabled]),
input[type="button"]:focus:not([disabled])
{
border-color: #464646;
background-image: linear-gradient(to bottom, #202020, #070707);
background-color: #070707;
box-shadow: 0px 1px 1px #404040;
}
input[type="submit"]:hover:not([disabled]):active,
input[type="button"]:hover:not([disabled]):active
{
box-shadow: inset 0px 1px 1px #404040;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 318 B

View file

@ -139,8 +139,8 @@ function sqimap_message_list_squisher($aUid) {
}
sort($aUid, SORT_NUMERIC);
$s = '';
if (count($aUid)) {
$s = '';
for ($i=0,$iCnt=count($aUid);$i<$iCnt;++$i) {
$iStart = $aUid[$i];
$iEnd = $iStart;

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 943 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 501 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 449 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 333 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 393 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 B

View file

@ -9,4 +9,4 @@
* @package squirrelmail
* @subpackage themes
*/
$icon_themes[] = array('NAME'=>_("XP"),'PATH'=> SM_PATH . 'images/themes/xp/');
$icon_themes[] = array('NAME'=>_("Nature"),'PATH'=> SM_PATH.'images/themes/nature/');

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 798 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 397 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 690 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 665 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 657 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 686 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 627 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 695 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 689 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 660 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 677 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 657 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 694 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 293 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

1
plugins/dkim Submodule

@ -0,0 +1 @@
Subproject commit 77c8f72a19f6d4b904906b43da845a847c40f915

View file

@ -0,0 +1,161 @@
<?php
/**
* SquirrelMail Secure Login Plugin
* Copyright (c) 2002 Graham Norbury <gnorbury@bondcar.com>
* Copyright (c) 2003-2008 Paul Lesniewski <paul@squirrelmail.org>
* Licensed under the GNU GPL. For full terms see the file COPYING.
*
* @package plugins
* @subpackage secure_login
*
*/
global $change_back_to_http_after_login, $remain_in_https_if_logged_in_using_https,
$allVirtualDomainsUnderOneSSLHost, $sl_securePort, $nonStandardHttpPort,
$sl_debug, $entryPointDomainPattern, $entryPointPathPattern,
$entryPointQueryPattern, $sl_obey_x_forwarded_headers;
// if you want user sessions to remain in SSL for their entire duration,
// set the following to zero:
//
$change_back_to_http_after_login = 0;
// if you want user sessions to remain in SSL only if they originally came
// in thru SSL (this plugin didn't need to redirect them), set the following
// to one:
//
$remain_in_https_if_logged_in_using_https = 1;
// for sites that host all SSL requests for virtual domains
// off of a single host URI (commonly used for SSL implementations
// using just one certificate for all hosts), where the correct
// URIs to the SquirrelMail login page look like:
//
// https://www.onedomain.com/virtualdomain.com/mail/src/login.php
//
// or:
//
// https://www.onedomain.com/mail/src/login.php?domain=virtualdomain.com
//
// set this value to the pattern that will reproduce the correct
// SSL URI to the Squirrelmail login page. Substitutions you can use:
//
// ###DOMAIN### -- The full domain from the original http request,
// such as virtualdomain.com
// ###PATH### -- The pah/directory information from the original
// http request, such as /mail or /mail/src/login.php
// ###QUERY### -- The query string from the original http request,
// such as ?mynameis=pavel&color=green
//
// The two examples below construct URI patterns just like
// the URIs given above.
//
// $allVirtualDomainsUnderOneSSLHost = 'https://www.onedomain.com/###DOMAIN######PATH###';
// $allVirtualDomainsUnderOneSSLHost = 'https://www.onedomain.com/mail/src/login.php?domain=###DOMAIN###';
//
// NOTE that this setting can also be useful in scenarios where you
// need fine-grained control over the encrypted URI, even when the
// URI is different for any virtual hosts you may have. For example:
//
// $allVirtualDomainsUnderOneSSLHost = 'https://secret.###DOMAIN###/secret_mail/src/login.php###QUERY###';
//
$allVirtualDomainsUnderOneSSLHost = '';
// the above $allVirtualDomainsUnderOneSSLHost setting assumes that the
// original plain (unencrypted) http request comes from a URI such as:
//
// http://virutaldomain.com/mail/src/login.php
//
// however, if your entry point will also be in a similar format, such as:
//
// http://www.onedomain.com/virtualdomain.com/mail/src/login.php
//
// or:
//
// http://www.onedomain.com/mail/src/login.php?domain=virtualdomain.com
//
// set these values each to a regular expression that will capture:
//
// the domain portion of the URI in the first group (set of parenthesis)
// the path portion of the URI in the first group (set of parenthesis)
// the query portion of the URI in the first group (set of parenthesis)
//
// otherwise, leave these all set to empty strings.
//
// The two examples below pick the domain, path and query string out of
// the sample URIs given above.
//
// $entryPointDomainPattern = '/[\/]+.+?\/(.+?)(\/|$)/';
// $entryPointPathPattern = '/[\/]+.+?\/.+?(\/.*?)(\?|$)/';
// $entryPointQueryPattern = '/(\?.*)/';
//
// $entryPointDomainPattern = '/domain=(.+?)(&|$)/';
// $entryPointPathPattern = '/[\/]+.+?(\/.*?)(\?|$)/';
// $entryPointQueryPattern = '/(\&.*)/';
//
// NOTE that these settings can also be useful in scenarios where you
// need better control over the domain parsing of the original entry
// URI. This should only be used if the auto-sensing behavior of the
// plugin will not work. For example:
//
$entryPointDomainPattern = '';
$entryPointPathPattern = '';
$entryPointQueryPattern = '';
// by default, https requests are made without explicitly defining the
// port number. if you use a non-standard port for serving http requests,
// that port will be preserved for the https redirection, which may break
// your squirrelmail.
//
// if your server listens for https requests on a non-standard port or
// the above situation applies to you (non-standard http port), you can
// specify a non-standard https port number here (or remove it, forcing
// the browser use the default port (443)).
//
// if you use this setting, remember to remove the slashes in front of it
//
// $sl_securePort = '';
// $sl_securePort = '888';
// if you are running regular HTTP requests on a non-standard port
// (anything besides port 80), please specify that value here
// if you are using port 80, then you should leave this value empty
//
//$nonStandardHttpPort = '80';
$nonStandardHttpPort = '';
// If you run SquirrelMail behind a proxy server, where the
// client domain information is in X_FORWARDED_* headers,
// enable this setting (set it to 1), otherwise, leave this
// off (zero) to reduce the chance that someone can try to
// forge the hostname in their request headers.
//
// $sl_obey_x_forwarded_headers = 1;
$sl_obey_x_forwarded_headers = 0;
// turn this on for debugging purposes only
//
// 1 = show server environment upon entry
// 2 = show redirect URI and server environment
//
$sl_debug = 0;

View file

@ -0,0 +1,407 @@
<?php
/**
* SquirrelMail Secure Login Plugin
* Copyright (c) 2002 Graham Norbury <gnorbury@bondcar.com>
* Copyright (c) 2003-2008 Paul Lesniewski <paul@squirrelmail.org>
* Licensed under the GNU GPL. For full terms see the file COPYING.
*
* @package plugins
* @subpackage secure_login
*
*/
/**
* Validate that this plugin is configured correctly
*
* @return boolean Whether or not there was a
* configuration error for this plugin.
*
*/
function sl_check_configuration_do()
{
// just make sure a config file is found
//
if (!sl_init())
{
do_err('Secure Login plugin could not find any configuration file', FALSE);
return TRUE;
}
return FALSE;
}
/**
* Initialize this plugin (load config values)
*
* @return boolean FALSE if no configuration file could be loaded, TRUE otherwise
*
*/
function sl_init()
{
if (!@include_once (SM_PATH . 'plugins/secure_login/config.php'))
if (!@include_once (SM_PATH . 'plugins/secure_login/config.sample.php'))
return FALSE;
return TRUE;
}
/**
* Takes the current page request and parses it for the host,
* path and query string.
*
* @return array Three element array containing, in this order,
* the host string, path string and query string.
*
*/
function parse_host_path_query()
{
//hmmm not used yet. concern is that the secure_login_logout thing needs more complex parsing.... so could it be combined with the login parsing too??
}
/**
* Makes sure login is done in HTTPS protocol
*
*/
function secure_login_check_do()
{
global $secure_login_count, $plugin_secure_login_cameInUsingHttps,
$sl_obey_x_forwarded_headers,
$allVirtualDomainsUnderOneSSLHost, $sl_securePort, $sl_debug,
$entryPointDomainPattern, $entryPointPathPattern, $entryPointQueryPattern;
//TODO: remove dead code when plugin seems to be working fine w/out it for a while (NOTE that this includes some live code that still checks the value of various login counters on the login page and NOTE that it does NOT include counter stuff used on the redirect.php page request)
/*
sqGetGlobalVar('secure_login_count', $secure_login_count, SQ_SESSION);
if (!isset($secure_login_count))
{
$secure_login_count = 0;
$secure_logoff_count = 0;
sqsession_register($secure_login_count, 'secure_login_count');
sqsession_register($secure_logoff_count, 'secure_logoff_count');
sqsession_unregister('plugin_secure_login_cameInUnencrypted');
}
*/
$secure_logoff_count = 0;
sqsession_register($secure_logoff_count, 'secure_logoff_count');
sqsession_unregister('plugin_secure_login_cameInUnencrypted');
sl_init();
// debug functionality
//
if ($sl_debug == 1)
{
echo "<hr />";
sm_print_r($_SERVER);
echo "<hr />";
exit;
}
// grab port the user came in on
//
if (!sqGetGlobalVar('SERVER_PORT', $serverPort, SQ_SERVER))
$serverPort = 0;
// figure out what port we should be comparing
//
if (isset($sl_securePort))
$targetHttpsPort = $sl_securePort;
else
$targetHttpsPort = '443';
if (!$sl_obey_x_forwarded_headers
|| !sqGetGlobalVar('HTTP_X_FORWARDED_HOST', $requestHost, SQ_SERVER))
sqGetGlobalVar('HTTP_HOST', $requestHost, SQ_SERVER);
sqGetGlobalVar('REQUEST_URI', $pathURI, SQ_SERVER);
sqGetGlobalVar('PHP_SELF', $php_self, SQ_SERVER);
sqGetGlobalVar('QUERY_STRING', $query_string, SQ_SERVER);
// Nah, let's just use PHP_SELF and QUERY_STRING...
// apparently some PHP versions have a bug regarding
// REQUEST_URI
// $paramsURI = '';
// if (preg_match('/(.*)\?(.*)/', $pathURI, $matches))
// {
// if (isset($matches[1])) $pathURI = $matches[1];
// if (isset($matches[2])) $paramsURI = $matches[2];
// }
$pathURI = $php_self;
$paramsURI = trim($query_string, '?&');
// Redirect browser to use https:// if the initial request was insecure
//
// old way:
// if ( ! isset($_SERVER['HTTPS']) &&
// $secure_login_count == 0)
if ( $serverPort != $targetHttpsPort &&
$secure_login_count == 0)
{
//TODO: remove dead code when plugin seems to be working fine w/out it for a while (NOTE that this includes some live code that still checks the value of various login counters on the login page and NOTE that it does NOT include counter stuff used on the redirect.php page request)
//$secure_login_count++;
//sqsession_register($secure_login_count, 'secure_login_count');
// parse out parts of original request (domain, path, query string)
//
if (isset($sl_securePort))
{
$sl_securePort = ':' . $sl_securePort;
if (strpos($requestHost, ':') !== FALSE)
list($host, $ignore) = explode(':', $requestHost);
else
$host = $requestHost;
$newRequestHost = $host . $sl_securePort;
}
else
$newRequestHost = $requestHost;
// if user wants to override original request URI
// parsing, do that now
//
$master_search_string = 'http://' . $requestHost . (strpos($php_self, '/') === 0 ? '' : '/') . $php_self . (empty($query_string) ? '' : (strpos($query_string, '?') === 0 ? '' : '?') . $query_string);
if ($entryPointDomainPattern)
{
preg_match($entryPointDomainPattern, $master_search_string, $matches);
$newRequestHost = $matches[1];
}
if ($entryPointPathPattern)
{
preg_match($entryPointPathPattern, $master_search_string, $matches);
$pathURI = $matches[1];
}
if ($entryPointQueryPattern)
{
preg_match($entryPointQueryPattern, $master_search_string, $matches);
$paramsURI = $matches[1];
$paramsURI = trim($paramsURI, '?&');
}
// build redirect target location
//
$location = 'https://'
. $newRequestHost . $pathURI . '?secure_login=yes';
if (!empty($paramsURI))
$location = $location . '&' . $paramsURI;
// if the URI pattern is given by the config file,
// forget all the above...
//
if ($allVirtualDomainsUnderOneSSLHost)
{
$location = str_replace(array('###DOMAIN###', '###PATH###', '###QUERY###'),
array($requestHost, $pathURI,
(strpos($paramsURI, '?') === 0 ? '' : '?') . $paramsURI),
$allVirtualDomainsUnderOneSSLHost);
if (strpos($location, '?') === FALSE)
$location .= '?';
else
$location .= '&';
$location .= 'secure_login=yes';
}
// debug functionality
//
if ($sl_debug == 2)
{
echo "<hr />REDIRECT LOCATION: $location<hr />";
sm_print_r($_SERVER);
echo "<hr />";
exit;
}
header("Location: $location");
exit();
}
// old way
// else if (isset($_SERVER['HTTPS']))
else if ( $serverPort == $targetHttpsPort )
{
if (sqGetGlobalVar('secure_login', $ignore, SQ_GET))
{
$plugin_secure_login_cameInUnencrypted = 'yes';
sqsession_register($plugin_secure_login_cameInUnencrypted,
'plugin_secure_login_cameInUnencrypted');
}
else if (!empty($allVirtualDomainsUnderOneSSLHost) && !$secure_login_count)
{
//TODO: remove dead code when plugin seems to be working fine w/out it for a while (NOTE that this includes some live code that still checks the value of various login counters on the login page and NOTE that it does NOT include counter stuff used on the redirect.php page request)
//$secure_login_count++;
//sqsession_register($secure_login_count, 'secure_login_count');
// if coming from logout screen or error page, we've already
// adjusted the URI as needed - don't try to do it twice:
//
$test_pattern = str_replace(array('###DOMAIN###', '###PATH###', '###QUERY###'),
'.*?',
preg_quote($allVirtualDomainsUnderOneSSLHost, '/'));
if (preg_match('/' . $test_pattern . '/',
'https://' . $requestHost . $pathURI
. (empty($paramsURI) ? '' : (strpos($paramsURI, '?') === 0 ? '' : '?')
. $paramsURI)))
{
return;
}
else
{
$location = str_replace(array('###DOMAIN###', '###PATH###', '###QUERY###'),
array($requestHost, $pathURI,
(strpos($paramsURI, '?') === 0 ? '' : '?') . $paramsURI),
$allVirtualDomainsUnderOneSSLHost);
}
// debug functionality
//
if ($sl_debug == 2)
{
echo 'PREG MATCH:<br />/' . $test_pattern . '/<br />https://' . $requestHost . $pathURI . (empty($paramsURI) ? '' : (strpos($paramsURI, '?') === 0 ? '' : '?') . $paramsURI);
echo "<hr />REDIRECT LOCATION: $location<hr />";
sm_print_r($_SERVER);
echo "<hr />";
exit;
}
header("Location: $location");
exit;
}
}
}
/**
* Redirects back to HTTP protocol after login if necessary
*
*/
function secure_login_logout_do()
{
global $change_back_to_http_after_login, $sl_securePort,
$remain_in_https_if_logged_in_using_https,
$plugin_secure_login_cameInUnencrypted, $secure_login_count;
sl_init();
//TODO: remove dead code when plugin seems to be working fine w/out it for a while (NOTE that this includes some live code that still checks the value of various login counters on the login page and NOTE that it does NOT include counter stuff used on the redirect.php page request)
//$secure_login_count = 0;
//sqsession_register($secure_login_count, 'secure_login_count');
if (!$change_back_to_http_after_login)
return;
if (!sqsession_is_registered('plugin_secure_login_cameInUnencrypted')
&& $remain_in_https_if_logged_in_using_https)
return;
global $secure_logoff_count;
sqGetGlobalVar('secure_logoff_count', $secure_logoff_count, SQ_SESSION);
if (!isset($secure_logoff_count))
{
$secure_logoff_count = 0;
sqsession_register($secure_logoff_count, 'secure_logoff_count');
}
// need to fix the sq_base_url session varible, since
// it is put in the session in redirect.php with
// the https protocol before we get here
//
global $sq_base_url, $nonStandardHttpPort;
sqGetGlobalVar('sq_base_url', $sq_base_url, SQ_SESSION);
$sq_base_url = str_replace('https://', 'http://', $sq_base_url);
if (isset($nonStandardHttpPort) && !empty($nonStandardHttpPort))
$sq_base_url = preg_replace('/:\d\//', ":$nonStandardHttpPort/", $sq_base_url);
else
$sq_base_url = preg_replace('/:\d\//', '', $sq_base_url);
sqsession_register($sq_base_url, 'sq_base_url');
// grab port the user came in on
//
if (!sqGetGlobalVar('SERVER_PORT', $serverPort, SQ_SERVER))
$serverPort = 0;
// figure out what port we should be comparing
//
if (isset($sl_securePort))
$targetHttpsPort = $sl_securePort;
else
$targetHttpsPort = '443';
if ( $serverPort == $targetHttpsPort && $secure_logoff_count == 0)
// old way...
// if ( ! isset($_SERVER['HTTP']) && $secure_logoff_count == 0)
{
$secure_logoff_count++;
sqsession_register($secure_logoff_count, 'secure_logoff_count');
if (!sqGetGlobalVar('HTTP_X_FORWARDED_HOST', $requestHost, SQ_SERVER) || empty($requestHost))
sqGetGlobalVar('HTTP_HOST', $requestHost, SQ_SERVER);
sqGetGlobalVar('PHP_SELF', $phpSelf, SQ_SERVER);
sqGetGlobalVar('QUERY_STRING', $query_string, SQ_SERVER);
$location = 'http://' . $requestHost . $phpSelf . (empty($query_string) ? '' : (strpos($query_string, '?') === 0 ? '' : '?') . $query_string);
displayHtmlHeader('',
"\n<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"0;URL=$location\">\n");
// note that this causes a pop-up in some browsers (such as IE)
// that notifies you you are leaving a secure site
//
//header("Location: $location");
exit;
}
}

View file

@ -0,0 +1,19 @@
<?php
/**
* index.php
*
* Copyright (c) 1999-2002 The SquirrelMail Project Team
* Licensed under the GNU GPL. For full terms see the file COPYING.
*
* This file simply takes any attempt to view source files and sends those
* people to the login screen. At this point no attempt is made to see if
* the person is logged or not.
*
* $Id: index.php,v 1.4 2001/12/23 07:42:39 thomppj Exp $
*/
header("Location:../../index.php");
/* pretty impressive huh? */

View file

@ -0,0 +1,118 @@
<?php
/**
* SquirrelMail Secure Login Plugin
* Copyright (c) 2002 Graham Norbury <gnorbury@bondcar.com>
* Copyright (c) 2003-2008 Paul Lesniewski <paul@squirrelmail.org>
* Licensed under the GNU GPL. For full terms see the file COPYING.
*
* @package plugins
* @subpackage secure_login
*
*/
/**
* Register this plugin with SquirrelMail
*
*/
function squirrelmail_plugin_init_secure_login()
{
global $squirrelmail_plugin_hooks;
$squirrelmail_plugin_hooks['login_cookie']['secure_login'] = 'secure_login_check';
$squirrelmail_plugin_hooks['webmail_top']['secure_login'] = 'secure_login_logout';
$squirrelmail_plugin_hooks['configtest']['secure_login'] = 'sl_check_configuration';
}
/**
* Returns info about this plugin
*
*/
function secure_login_info()
{
return array(
'english_name' => 'Secure Login',
'authors' => array(
'Paul Lesniewski' => array(
'email' => 'paul@squirrelmail.org',
'sm_site_username' => 'pdontthink',
),
),
'version' => '1.4',
'required_sm_version' => '1.2.8',
'requires_configuration' => 0,
'requires_source_patch' => 0,
'required_plugins' => array(),
'summary' => 'Ensures SSL security is enabled during login (at least).',
'details' => 'This plugin automatically enables a secure HTTPS/SSL-encrypted connection for the SquirrelMail login page if it hasn\'t already been requested by the referring hyperlink or bookmark. Optionally, the secure connection can be turned off again after successful login. This utility is intended to prevent passwords and email contents being transmitted over the Internet in the clear after people browse to the login page without including https:// in its address.',
);
}
/**
* Returns version info about this plugin
*
*/
function secure_login_version()
{
$info = secure_login_info();
return $info['version'];
}
/**
* Validate that this plugin is configured correctly
*
* @return boolean Whether or not there was a
* configuration error for this plugin.
*
*/
function sl_check_configuration()
{
include_once(SM_PATH . 'plugins/secure_login/functions.php');
return sl_check_configuration_do();
}
/**
* Makes sure login is done in HTTPS protocol
*
*/
function secure_login_check()
{
include_once(SM_PATH . 'plugins/secure_login/functions.php');
secure_login_check_do();
}
/**
* Redirects back to HTTP protocol after login if necessary
*
*/
function secure_login_logout()
{
include_once(SM_PATH . 'plugins/secure_login/functions.php');
secure_login_logout_do();
}

View file

@ -0,0 +1,2 @@
Secure Login
1.4

1
plugins/smime Submodule

@ -0,0 +1 @@
Subproject commit 27cf2e10c20ce6c90bedeaacece80ed9c7b4f0dd

1
plugins/spamcop Submodule

@ -0,0 +1 @@
Subproject commit d95fa4ba3b0185b43772d495ce8af0101a85029d

View file

@ -1,51 +0,0 @@
SpamCop Reporting
Helps you identify spam and send a proper message to the correct address to
SpamCop. (See http://spamcop.net/ for more information)
Features
========
* Quick one-click interface to report spam via email
* Alternate, but immediate form-based processing
Description
===========
Tired of getting spam? SpamCop helps you report it to the proper people.
It even creates spam reports and will mail them off for you. All that is
required to send a spam report is about a few seconds of your time and about
five clicks.
It is strongly suggested you set up a mail forwarder account and have it
forwarded to your current mailbox. Sometimes mail reported with SpamCop
gets on weird spam mailing lists. If your happens to get on the list, you
can then just delete the forwarder and get a new one. Make sure to use the
forwarder to sign up for SpamCop and get the required information for the
plugin.
Installation
============
Go back to the main directory, run configure and add the plugin.
API
===
SquirrelMail hooks used by plugin:
* loading_prefs
* optpage_register_block
* read_body_header_right
* compose_send
Plugin preference keys:
* spamcop_enabled
* spamcop_delete
* spamcop_save
* spamcop_method
* spamcop_type
* spamcop_id

View file

@ -1,214 +0,0 @@
<?php
/**
* SpamCop plugin - functions
*
* @copyright 1999-2024 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package plugins
* @subpackage spamcop
*/
/* sqgetGlobalVar(), getPref(), setPref(), sqimap functions are used */
/**
* Disable Quick Reporting by default
* @global boolean $spamcop_quick_report
* @since 1.4.3 and 1.5.0
*/
global $spamcop_quick_report;
$spamcop_quick_report = false;
/**
* Loads spamcop settings and validates some of values (make '' into 'default', etc.)
*
* Internal function used to reduce size of setup.php
* @since 1.5.1
* @access private
*/
function spamcop_load_function() {
global $username, $data_dir, $spamcop_enabled, $spamcop_delete, $spamcop_save,
$spamcop_method, $spamcop_id, $spamcop_quick_report, $spamcop_type;
$spamcop_enabled = getPref($data_dir, $username, 'spamcop_enabled');
$spamcop_delete = getPref($data_dir, $username, 'spamcop_delete');
$spamcop_save = getPref($data_dir, $username, 'spamcop_save',true);
$spamcop_method = getPref($data_dir, $username, 'spamcop_method');
$spamcop_type = getPref($data_dir, $username, 'spamcop_type');
$spamcop_id = getPref($data_dir, $username, 'spamcop_id');
if ($spamcop_method == '') {
// Default to web_form. It is faster.
$spamcop_method = 'web_form';
setPref($data_dir, $username, 'spamcop_method', $spamcop_method);
}
if (! $spamcop_quick_report && $spamcop_method=='quick_email') {
$spamcop_method = 'web_form';
setPref($data_dir, $username, 'spamcop_method', $spamcop_method);
}
if ($spamcop_type == '') {
$spamcop_type = 'free';
setPref($data_dir, $username, 'spamcop_type', $spamcop_type);
}
if ($spamcop_id == '')
$spamcop_enabled = 0;
}
/**
* Add spamcop link to read_body (internal function)
* @since 1.5.1
* @access private
*/
function spamcop_show_link_function(&$links) {
global $spamcop_enabled, $spamcop_method, $spamcop_quick_report;
if (! $spamcop_enabled)
return;
/* GLOBALS */
sqgetGlobalVar('passed_id', $passed_id, SQ_FORM, NULL, SQ_TYPE_BIGINT);
sqgetGlobalVar('passed_ent_id',$passed_ent_id,SQ_FORM);
sqgetGlobalVar('mailbox', $mailbox, SQ_FORM);
if ( sqgetGlobalVar('startMessage', $startMessage, SQ_FORM) ) {
$startMessage = (int)$startMessage;
}
/* END GLOBALS */
// catch unset passed_ent_id
if (! sqgetGlobalVar('passed_ent_id', $passed_ent_id, SQ_FORM) ) {
$passed_ent_id = 0;
}
/*
Catch situation when user uses quick_email and does not update
preferences. User gets web_form link. If prefs are set to
quick_email format - they will be updated after clicking the link
*/
if (! $spamcop_quick_report && $spamcop_method=='quick_email') {
$spamcop_method = 'web_form';
}
// FIXME: do we need this javascript and if so, fix it
// <script type="text/javascript">
// document.write('<a href="../plugins/spamcop/spamcop.php?passed_id=<php echo urlencode($passed_id); >&amp;js_web=1&amp;mailbox=<php echo urlencode($mailbox); >&amp;passed_ent_id=<php echo urlencode($passed_ent_id); >" target="_blank">');
//document.write("<php echo _("Report as Spam"); >");
//document.write("</a>");
//</script>
$url = '../plugins/spamcop/spamcop.php?passed_id=' . urlencode($passed_id) .
'&amp;mailbox=' . urlencode($mailbox) . '&amp;startMessage=' . urlencode($startMessage) .
'&amp;passed_ent_id=' . urlencode($passed_ent_id);
if ( $spamcop_method == 'web_form' && checkForJavascript() ) {
$url .= '&amp;js_web=1';
}
$links[] = array ( 'URL' => $url,
'Text' => _("Report as Spam")
);
}
/**
* Add spamcop option block (internal function)
* @since 1.5.1
* @access private
*/
function spamcop_options_function() {
global $optpage_blocks;
$optpage_blocks[] = array(
'name' => _("SpamCop - Spam Reporting"),
'url' => '../plugins/spamcop/options.php',
'desc' => _("Help fight the battle against unsolicited email. SpamCop reads the spam email and determines the correct addresses to send complaints to. Quite fast, really smart, and easy to use."),
'js' => false
);
}
/**
* Process messages that are submitted by email.
*
* Delete spam if user wants to delete it. Don't save submitted emails.
* Implement overrides that fix compose.php behavior.
* @since 1.5.1
* @access private
*/
function spamcop_while_sending_function() {
global $mailbox, $spamcop_delete, $spamcop_save, $spamcop_is_composing, $auto_expunge,
$username, $imapServerAddress, $imapPort, $imap_stream_options;
if (sqgetGlobalVar('spamcop_is_composing' , $spamcop_is_composing)) {
// delete spam message
if ($spamcop_delete) {
$imapConnection = sqimap_login($username, false, $imapServerAddress, $imapPort, 0, $imap_stream_options);
sqimap_mailbox_select($imapConnection, $mailbox);
sqimap_msgs_list_delete($imapConnection, $mailbox, array($spamcop_is_composing));
if ($auto_expunge)
sqimap_mailbox_expunge($imapConnection, $mailbox, true);
}
if (! $spamcop_save) {
// disable use of send folder.
// Temporally override in order to disable saving of 'reply anyway' messages.
global $default_move_to_sent;
$default_move_to_sent=false;
}
// change default email composition setting. Plugin always operates in right frame.
// make sure that compose.php redirects to right page. Temporally override.
global $compose_new_win;
$compose_new_win = false;
}
}
/**
* Internal spamcop plugin function.
*
* It is used to display similar action links.
* @access private
*/
function spamcop_enable_disable($option,$disable_action,$enable_action) {
if ($option) {
$ret= _("Enabled") . " (<a href=\"options.php?action=$disable_action\">" . _("Disable it") . "</a>)\n";
} else {
$ret = _("Disabled") . " (<a href=\"options.php?action=$enable_action\">" . _("Enable it") . "</a>)\n";
}
return $ret;
}
/**
* Stores message in attachment directory, when email based reports are used
* @access private
* @todo Duplicate code in src/compose.php
*/
function spamcop_getMessage_RFC822_Attachment($message, $composeMessage, $passed_id,
$passed_ent_id='', $imapConnection=null) {
global $username, $attachment_dir;
if ($imapConnection) {
if (!$passed_ent_id) {
$body_a = sqimap_run_command($imapConnection,
'FETCH '.$passed_id.' RFC822',
TRUE, $response, $readmessage,
TRUE);
} else {
$body_a = sqimap_run_command($imapConnection,
'FETCH '.$passed_id.' BODY['.$passed_ent_id.']',
TRUE, $response, $readmessage,TRUE);
$message = $message->parent;
}
}
if ($response == 'OK') {
array_shift($body_a);
$body = implode('', $body_a) . "\r\n";
$filename = sq_get_attach_tempfile();
$hashed_attachment_dir = getHashedDir($username, $attachment_dir);
$fp = fopen("$hashed_attachment_dir/$filename", 'wb');
fwrite ($fp, $body);
fclose($fp);
$composeMessage->initAttachment('message/rfc822','email.txt',
$filename);
}
return $composeMessage;
}

View file

@ -1,19 +0,0 @@
<?php
/**
* index.php
*
* This file simply takes any attempt to view source files and sends those
* people to the login screen. At this point no attempt is made to see if the
* person is logged in or not.
*
* @copyright 1999-2024 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package plugins
* @subpackage spamcop
*/
header('Location: ../index.php');
?>

View file

@ -1,197 +0,0 @@
<?php
/**
* options.php -- SpamCop options page
*
* @copyright 1999-2024 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package plugins
* @subpackage spamcop
*/
/**
* Include the SquirrelMail initialization file.
*/
require('../../include/init.php');
/* plugin functions */
include_once(SM_PATH . 'plugins/spamcop/functions.php');
displayPageHeader($color);
/** is spamcop plugin disabled */
// option changes do nothing, if read_body_header_right hook is not active.
/* globals */
sqgetGlobalVar('action', $action);
sqgetGlobalVar('meth', $meth);
sqgetGlobalVar('ID' , $ID);
sqgetGlobalVar('username', $username, SQ_SESSION);
/* end of globals */
$action = (!isset($action) ? '' : $action);
switch ($action) {
case 'enable':
setPref($data_dir, $username, 'spamcop_enabled', 1);
break;
case 'disable':
setPref($data_dir, $username, 'spamcop_enabled', '');
break;
case 'save':
setPref($data_dir, $username, 'spamcop_delete', '');
break;
case 'delete':
setPref($data_dir, $username, 'spamcop_delete', 1);
break;
case 'keep':
setPref($data_dir, $username, 'spamcop_save', 0);
break;
case 'dontkeep':
setPref($data_dir, $username, 'spamcop_save', 1);
break;
case 'meth':
if (isset($meth)) {
setPref($data_dir, $username, 'spamcop_method', $meth);
}
break;
case 'save_id':
if (isset($ID)) {
$ID = trim($ID);
$ID = preg_replace('/@.*/','',$ID);
$ID = preg_replace('/.*\./','',$ID);
setPref($data_dir, $username, 'spamcop_id', $ID);
}
break;
}
global $spamcop_enabled, $spamcop_delete, $spamcop_save, $spamcop_quick_report;
spamcop_load_function();
?>
<br />
<table width="95%" align="center" border="0" cellpadding="2" cellspacing="0">
<tr><td bgcolor="<?php echo $color[0]; ?>">
<div style="text-align: center;"><b>
<?php echo _("Options") . " - " . _("Spam reporting"); ?>
</b></div>
</td></tr></table>
<br />
<table align="center">
<tr>
<?php
echo html_tag('td',_("SpamCop link is:"),'right');
echo html_tag('td', spamcop_enable_disable($spamcop_enabled,'disable','enable') );
?>
</tr>
<tr>
<?php
echo html_tag('td',_("Delete spam when reported:") . "<br />\n" .
'<small>(' . _("Only works with email-based reporting") . ')</small>',
'right','','valign="top"');
echo html_tag('td', spamcop_enable_disable($spamcop_delete,'save','delete'),'','','valign="top"');
?>
</tr>
<tr>
<?php
echo html_tag('td',_("Save emails submitted to SpamCop:") . "<br />\n" .
'<small>(' . _("Only works with email-based reporting") . ')</small>',
'right','','valign="top"');
echo html_tag('td', spamcop_enable_disable($spamcop_save,'keep','dontkeep'),'','','valign="top"');
?>
</tr>
<tr>
<?php
echo html_tag('td',_("Spam Reporting Method:"),'right');
?>
<td>
<form method="post" action="options.php">
<select name="meth">
<?php
if ($spamcop_quick_report) {
echo '<option value="quick_email"';
if ($spamcop_method == 'quick_email') echo ' selected="selected"';
echo ">"._("Quick email-based reporting");
echo '</option>';
}
$selected = '';
if ($spamcop_method == 'thorough_email') {
$selected = ' selected';
}
echo sprintf(' <option value="thorough_email"%s>%s</option>',$selected, _("Through email-based reporting"));
$selected = '';
if ($spamcop_method == 'web_form') {
$selected = ' selected';
}
echo sprintf(' <option value="web_form"%s>%s</option>', $selected, _("Web-based form"));
?>
</select>
<input type="hidden" name="action" value="meth" />
<?php
echo '<input type="submit" value="' . _("Save Method") . "\" />\n";
?>
</form></td>
</tr>
<tr>
<?php
echo html_tag('td',_("Your SpamCop authorization code:") . "<br />" .
'<small>(' . _("see below") . ')</small>','right','','valign="top"');
?>
<td valign="top"><form method="post" action="options.php">
<input type="text" size="30" name="ID" value="<?php echo sm_encode_html_special_chars($spamcop_id) ?>" />
<input type="hidden" name="action" value="save_id" />
<?php
echo '<input type="submit" value="' . _("Save ID") . "\" />\n";
?>
</form></td>
</tr>
</table>
<?php
echo '<p><b>' . _("About SpamCop") . '</b><br />';
echo _("SpamCop is a free service that greatly assists in finding the true source of the spam and helps in letting the proper people know about the abuse.");
echo "</p>\n";
echo '<p>';
printf(_("To use it, you must get a SpamCop authorization code. There is a free %ssign up page%s so you can use SpamCop."), '<a href="http://spamcop.net/anonsignup.shtml">', '</a>');
echo "</p>\n";
echo '<p><b>' . _("Before you sign up, be warned") . '</b><br />';
printf(_("Some users have reported that the email addresses used with SpamCop find their way onto spam lists. To be safe, you can just create an email forwarding account and have all SpamCop reports get sent to there. Also, if it gets flooded with spam, you can then just delete that account with no worries about losing your real email address. Just go create an email forwarder somewhere (%s has a %slist of places%s) so that messages from system administrators and what not can be sent to you."), '<a href="http://www.yahoo.com/">Yahoo!</a>', '<a href="http://dir.yahoo.com/Business_and_Economy/Business_to_Business/Communications_and_Networking/Internet_and_World_Wide_Web/Email_Providers/Forwarding_Services/Free_Forwarding/">', '</a>');
echo "</p>\n";
echo '<p>';
echo _("Once you have signed up with SpamCop and have received your SpamCop authorization code, you need to enable this plugin by clicking the link above. Once enabled, you go about your normal life. If you encounter a spam message in your mailbox, just view it. On the right-hand side, near the top of where the message is displayed, you will see a link to report this message as spam. Clicking on it brings you to a confirmation page. Confirming that you want the spam report sent will do different things with different reporting methods.");
echo "</p>\n";
echo '<p><b>' . _("Email-based reporting") . '</b><br />';
echo _("Pressing the button forwards the message to the SpamCop service and will optionally delete the message. From there, you just need to go to your INBOX and quite soon a message should appear from SpamCop. (It gets sent to the account you registered with, so make sure that your mail forwarder works!) Open it up, click on the appropriate link at the top, and a new browser window will open.");
echo "</p>\n";
if ($spamcop_quick_report) {
echo '<p>';
echo _("Currently, the quick reporting just forwards the request to the thorough reporting. Also, it appears that this is for members (non-free) only. Hopefully this will change soon.");
echo "</p>\n";
}
echo '<p><b>' . _("Web-based reporting") . '</b><br />';
echo _("When you press the button on the confirmation page, this will pop open a new browser window and the SpamCop service should appear inside. The message will not be deleted (working on that part), but you won't need to wait for a response email to start the spam reporting.");
echo "</p>\n";
echo '<p>';
echo _("The SpamCop service will display information as it finds it, so scroll down until you see a form button. It might pause a little while it is looking up information, so be a little patient. Read what it says, and submit the spam. Close the browser window. Press Cancel or click on the appropriate mail folder to see messages and/or delete the spam.");
echo "</p>\n";
echo '<p><b>' . _("SpamCop service type") . '</b><br />';
echo _("Service type option allows selecting which SpamCop services you are using. Member services use different web reporting forms and does not display nags. You can purchase these services, if you want to support SpamCop.");
echo "</p>\n";
echo '<p><b>' . _("More information") . '</b><br />';
printf(_("For more information about SpamCop, it's services, spam in general, and many related topics, try reading through SpamCop's %sHelp and Feedback%s section."), '<a href="http://spamcop.net/help.shtml">', '</a>');
echo "</p>\n";
?>
</body></html>

View file

@ -1,66 +0,0 @@
<?php
/**
* setup.php -- SpamCop plugin - setup script
*
* @copyright 1999-2024 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package plugins
* @subpackage spamcop
*/
/**
* Initialize the plugin
* @access private
*/
function squirrelmail_plugin_init_spamcop() {
global $squirrelmail_plugin_hooks;
$squirrelmail_plugin_hooks['optpage_register_block']['spamcop'] =
'spamcop_options';
$squirrelmail_plugin_hooks['loading_prefs']['spamcop'] =
'spamcop_load';
$squirrelmail_plugin_hooks['read_body_header_right']['spamcop'] =
'spamcop_show_link';
$squirrelmail_plugin_hooks['compose_send']['spamcop'] =
'spamcop_while_sending';
}
/**
* Loads spamcop settings and validates some of values (make '' into 'default', etc.)
* @access private
*/
function spamcop_load() {
include_once(SM_PATH . 'plugins/spamcop/functions.php');
spamcop_load_function();
}
/**
* Shows spamcop link on the read-a-message screen
* @access private
*/
function spamcop_show_link(&$links) {
include_once(SM_PATH . 'plugins/spamcop/functions.php');
spamcop_show_link_function($links);
}
/**
* Show spamcop options block
* @access private
*/
function spamcop_options() {
include_once(SM_PATH . 'plugins/spamcop/functions.php');
spamcop_options_function();
}
/**
* Process messages submitted by email
* @access private
*/
function spamcop_while_sending() {
include_once(SM_PATH . 'plugins/spamcop/functions.php');
spamcop_while_sending_function();
}

View file

@ -1,176 +0,0 @@
<?php
/**
* spamcop.php -- SpamCop plugin -- main page
*
* @copyright 1999-2024 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package plugins
* @subpackage spamcop
*/
/**
* Include the SquirrelMail initialization file.
*/
require('../../include/init.php');
/* IMAP functions depend on date and mime */
include_once(SM_PATH . 'functions/date.php');
include_once(SM_PATH . 'functions/mime.php');
/* IMAP functions */
include_once(SM_PATH . 'functions/imap_general.php');
include_once(SM_PATH . 'functions/imap_messages.php');
/* plugin functions */
include_once(SM_PATH . 'plugins/spamcop/functions.php');
include_once(SM_PATH . 'functions/compose.php');
/* GLOBALS */
sqgetGlobalVar('mailbox', $mailbox, SQ_GET);
sqgetGlobalVar('passed_id', $passed_id, SQ_GET, NULL, SQ_TYPE_BIGINT);
sqgetGlobalVar('js_web', $js_web, SQ_GET);
if (! sqgetGlobalVar('startMessage', $startMessage, SQ_GET) ) {
$startMessage = 1;
}
if (! sqgetGlobalVar('passed_ent_id', $passed_ent_id, SQ_GET) ) {
$passed_ent_id = 0;
}
if (! sqgetGlobalVar('js_web', $js_web, SQ_GET) ) {
$js_web = 0;
}
sqgetGlobalVar('compose_messages', $compose_messages, SQ_SESSION);
if(! sqgetGlobalVar('composesession', $composesession, SQ_SESSION) ) {
$composesession = 0;
sqsession_register($composesession, 'composesession');
}
/* END GLOBALS */
// js_web variable is 1 only when link opens web based report page in new window
// and in new window menu line or extra javascript code is not needed.
if ($js_web) {
displayHTMLHeader(_("SpamCop reporting"));
echo "<body text=\"$color[8]\" bgcolor=\"$color[4]\" link=\"$color[7]\" vlink=\"$color[7]\" alink=\"$color[7]\">\n";
} else {
displayPageHeader($color,$mailbox);
}
/** is spamcop plugin disabled */
if (! is_plugin_enabled('spamcop')) {
error_box(_("Plugin is disabled."));
// display footer (closes html tags) and stop script execution
$oTemplate->display('footer.tpl');
exit();
}
global $imap_stream_options; // in case not defined in config
$imap_stream = sqimap_login($username, false, $imapServerAddress, $imapPort, 0, $imap_stream_options);
sqimap_mailbox_select($imap_stream, $mailbox);
if ($spamcop_method == 'quick_email' ||
$spamcop_method == 'thorough_email') {
// Use email-based reporting -- save as an attachment
$session = "$composesession"+1;
$composesession = $session;
sqsession_register($composesession,'composesession');
if (!isset($compose_messages)) {
$compose_messages = array();
}
if (!isset($compose_messages[$session]) || ($compose_messages[$session] == NULL)) {
$composeMessage = new Message();
$rfc822_header = new Rfc822Header();
$composeMessage->rfc822_header = $rfc822_header;
$composeMessage->reply_rfc822_header = '';
$compose_messages[$session] = $composeMessage;
sqsession_register($compose_messages,'compose_messages');
} else {
$composeMessage=$compose_messages[$session];
}
$message = sqimap_get_message($imap_stream, $passed_id, $mailbox);
$composeMessage = spamcop_getMessage_RFC822_Attachment($message, $composeMessage, $passed_id,
$passed_ent_id, $imap_stream);
$compose_messages[$session] = $composeMessage;
sqsession_register($compose_messages, 'compose_messages');
$fn = getPref($data_dir, $username, 'full_name');
$em = getPref($data_dir, $username, 'email_address');
$HowItLooks = $fn . ' ';
if ($em != '')
$HowItLooks .= '<' . $em . '>';
}
echo "<p>";
echo _("Sending this spam report will give you back a reply with URLs that you can click on to properly report this spam message to the proper authorities. This is a free service. By pressing the \"Send Spam Report\" button, you agree to follow SpamCop's rules/terms of service/etc.");
echo "</p>";
?>
<table align="center" width="75%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="left" valign="top">
<?php if (isset($js_web) && $js_web) {
echo '<form method="post" action="javascript:return false">';
echo '<input type="button" value="' . _("Close Window") . "\" onclick=\"window.close(); return true;\" />\n";
} else {
?><form method="post" action="<?php echo sqm_baseuri(); ?>src/right_main.php">
<input type="hidden" name="mailbox" value="<?php echo sm_encode_html_special_chars($mailbox) ?>" />
<input type="hidden" name="startMessage" value="<?php echo sm_encode_html_special_chars($startMessage) ?>" />
<?php
echo '<input type="submit" value="' . _("Cancel / Done") . "\" />";
}
?></form>
</td>
<td align="right" valign="top">
<?php if ($spamcop_method == 'thorough_email' ||
$spamcop_method == 'quick_email') {
if ($spamcop_method == 'thorough_email')
$report_email = 'submit.' . $spamcop_id . '@spam.spamcop.net';
else
$report_email = 'quick.' . $spamcop_id . '@spam.spamcop.net';
$form_action = sqm_baseuri() . 'src/compose.php';
?> <form method="post" action="<?php echo $form_action?>">
<input type="hidden" name="smtoken" value="<?php echo sm_generate_security_token() ?>" />
<input type="hidden" name="mailbox" value="<?php echo sm_encode_html_special_chars($mailbox) ?>" />
<input type="hidden" name="spamcop_is_composing" value="<?php echo sm_encode_html_special_chars($passed_id) ?>" />
<input type="hidden" name="send_to" value="<?php echo sm_encode_html_special_chars($report_email)?>" />
<input type="hidden" name="subject" value="reply anyway" />
<input type="hidden" name="identity" value="0" />
<input type="hidden" name="session" value="<?php echo $session?>" />
<?php
echo '<input type="submit" name="send1" value="' . _("Send Spam Report") . "\" />\n";
} else {
$spam_message = mime_fetch_body ($imap_stream, $passed_id, $passed_ent_id, 50000);
if (strlen($spam_message) == 50000) {
$Warning = "\n[truncated by SpamCop]\n";
$spam_message = substr($spam_message, 0, 50000 - strlen($Warning)) . $Warning;
}
$action_url="http://members.spamcop.net/sc";
if (isset($js_web) && $js_web) {
echo "<form method=\"post\" action=\"$action_url\" name=\"submitspam\"".
" enctype=\"multipart/form-data\">\n";
} else {
echo "<form method=\"post\" action=\"$action_url\" name=\"submitspam\"".
" enctype=\"multipart/form-data\" target=\"_blank\">\n";
} ?>
<input type="hidden" name="action" value="submit" />
<input type="hidden" name="oldverbose" value="1" />
<input type="hidden" name="spam" value="<?php echo sm_encode_html_special_chars($spam_message); ?>" />
<?php
echo '<input type="submit" name="x1" value="' . _("Send Spam Report") . "\" />\n";
}
?> </form>
</td>
</tr>
</table>
</body>
</html>

View file

@ -0,0 +1,132 @@
<?php
/**
* addrbook_addedit.tpl
*
* Display the form elements to add/edit an entry in the address book
*
* The following variables are available in this template:
* $current_backend - integer containing backend currently displayed.
* $edit - boolean TRUE if we are editing an existing address.
* FALSE if the form is blank for adding a new address.
* $writable_backends - array of address book backends that can be written
* to. This will be NULL if $edit is TRUE.
* $values - array containing values for each field. If $edit is TRUE,
* elements will contains the current values for each field
* of the entry. If $edit is FALSE, each element will be
* empty. The following elements will be present:
* $el['FirstName'] - The entry's first name
* $el['LastName'] - The entry's last name (surname)
* $el['NickName'] - The entry's nickname
* $el['Email'] - The entry's email. Note that this field
* could be an array!
* $el['Info'] - Additional info about this contact
*
* @copyright 1999-2021 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package squirrelmail
* @subpackage templates
*/
/** add required includes **/
/** extract template variables **/
extract($t);
/** Begin template **/
$formname = $edit ? 'editaddr' : 'addaddr';
?>
<div id="addrAddEdit">
<table class="table1" cellspacing="0">
<tr>
<td class="header2" colspan="2">
<?php echo $edit ? _("Update Address") : _("Add to Address Book"); ?>
</td>
</tr>
<tr>
<td class="fieldName">
<label for="nickname"><?php echo _("Nickname"); ?>:</label>
</td>
<td>
<input type="text" name="<?php echo $formname; ?>[nickname]" id="nickname" value=<?php echo '"'.$values['NickName'].'"'; ?> size="15" />
<small><?php echo _("Must be unique"); ?></small>
</td>
</tr>
<tr>
<td class="fieldName">
<label for="email"><?php echo _("E-mail"); ?>:</label>
</td>
<td>
<?php
if (is_array($values['Email'])) {
echo '<select name="'.$formname.'[email]" id="email">'."\n";
foreach ($values['Email'] as $email) {
//FIXME: sm_encode_html_special_chars should not be needed inside any template files - I think values are already sanitized by the time they get here
echo '<option value="'.sm_encode_html_special_chars($email).'">'.sm_encode_html_special_chars($email).'</option>'."\n";
}
echo '</select>'."\n";
} else {
echo '<input type="text" name="'.$formname.'[email]" id="email" value="'.$values['Email'].'" size="45" />'."\n";
}
?>
</td>
</tr>
<tr>
<td class="fieldName">
<label for="firstname"><?php echo _("First name"); ?>:</label>
</td>
<td>
<input type="text" name="<?php echo $formname; ?>[firstname]" id="firstname" value=<?php echo '"'.$values['FirstName'].'"'; ?> size="45" />
</td>
</tr>
<tr>
<td class="fieldName">
<label for="lastname"><?php echo _("Last name"); ?>:</label>
</td>
<td>
<input type="text" name="<?php echo $formname; ?>[lastname]" id="lastname" value=<?php echo '"'.$values['LastName'].'"'; ?> size="45" />
</td>
</tr>
<tr>
<td class="fieldName">
<label for="info"><?php echo _("Additional info"); ?>:</label>
</td>
<td>
<input type="text" name="<?php echo $formname; ?>[label]" id="info" value=<?php echo '"'.$values['Info'].'"'; ?> size="45" />
</td>
</tr>
<?php
if (!$edit) {
if (count($writable_backends) > 1) {
?>
<tr>
<td class="fieldName">
<label for="backend"><?php echo _("Add to:"); ?></label>
</td>
<td>
<select name="backend" id="backend">
<?php
foreach ($writable_backends as $id=>$name) {
//FIXME: sm_encode_html_special_chars should not be needed inside any template files - I think values are already sanitized by the time they get here
echo '<option value="' . $id
. ($current_backend == $id ? '" selected="selected"' : '"')
. '>' . sm_encode_html_special_chars($name) . '</option>' . "\n";
}
?>
</select>
</td>
</tr>
<?php
} else {
echo '<input type="hidden" name="backend" value="1" />'."\n";
}
}
?>
<tr>
<td colspan="2" class="addButton">
<input type="hidden" name="new_bnum" value="<?php echo $current_backend; ?>" />
<input type="submit" value=<?php echo '"'.($edit ? _("Update Address") : _("Add Address")).'"'; ?> name="<?php echo $formname; ?>[SUBMIT]" />
</td>
</tr>
</table>
</div>

View file

@ -0,0 +1,121 @@
<?php
/**
* addrbook_search_list.tpl
*
* Display a list of addresses from the search forms
*
* The following variables are available in this template:
* $use_js - boolean TRUE if we should use Javascript in this book.
* $include_abook_name - boolean TRUE if the resuls should also display
* the name of the address book the result is in.
* $addresses - array containing search results. Each element contains the
* following fields:
* $el['FirstName'] - The entry's first name
* $el['LastName'] - The entry's last name (surname)
* $el['FullName'] - The entry's full name (first + last)
* $el['NickName'] - The entry's nickname
* $el['Email'] - duh
* $el['FullAddress'] - Email with full name or nick name
* optionally prepended.
* $el['Info'] - Additional info about this contact
* $el['Extra'] - Additional field, if provided. NULL if this
* field is not provided by the book.
* $el['JSEmail'] - email address scrubbed for use with
* javascript functions.
*
* @copyright 1999-2021 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package squirrelmail
* @subpackage templates
*/
/** add required includes **/
/** extract template variables **/
extract($t);
/** Begin template **/
$colspan = $include_abook_name ? 5 : 4;
?>
<?php
if ($javascript_on) {
insert_javascript();
}
?>
<div id="addressList">
<table class="table2" cellspacing="0">
<tr>
<td class="colHeader" style="width:1%; font-size: 8pt; white-space: nowrap;">
<?php
if ($javascript_on && !$compose_addr_pop) {
?>
<input type="checkbox" id="checkAllTo" onClick="CheckAll('T');"><label for="checkAllTo"><?php echo _("All");?></label> &nbsp;
<input type="checkbox" id="checkAllCc" onClick="CheckAll('C');"><label for="checkAllCc"><?php echo _("Cc");?></label> &nbsp;
<input type="checkbox" id="checkAllBcc" onClick="CheckAll('B');"><label for="checkAllBcc"><?php echo _("Bcc");?></label>
<?php
}
?>
</td>
<td class="colHeader"><?php echo _("Name"); ?></td>
<td class="colHeader"><?php echo _("E-mail"); ?></td>
<td class="colHeader"><?php echo _("Info"); ?></td>
<?php
if ($include_abook_name) {
echo '<td class="colHeader">'. _("Source") .'</td>';
}
?>
</tr>
<?php
if (count($addresses) == 0) {
echo '<tr><td class="abookEmpty" colspan="'.$colspan.'">'._("Address book is empty").'</td></tr>'."\n";
}
if ($compose_addr_pop) {
$addr_str = '<a href="javascript:to_and_close(\'%1$s\')">%1$s</a>';
} else {
$addr_str = '%1$s';
}
foreach ($addresses as $index=>$contact) {
?>
<tr class=<?php echo '"'.(($index+1)%2 ? 'even' : 'odd').'"'; ?>>
<td class="abookCompose" style="width:1%">
<?php
if ($compose_addr_pop) {
?>
<a href="javascript:to_address('<?php echo $contact['JSEmail']; ?>')"><?php echo _("To"); ?></a> |
<a href="javascript:cc_address('<?php echo $contact['JSEmail']; ?>')"><?php echo _("Cc"); ?></a> |
<a href="javascript:bcc_address('<?php echo $contact['JSEmail']; ?>')"><?php echo _("Bcc"); ?></a>
<?php
} else {
?>
<input type="checkbox" name=<?php echo '"send_to_search[T'.$index.']"'; ?> value=<?php echo '"'.$contact['FullAddress'].'"'; ?> id=<?php echo '"send_to_search_T'.$index.'_"'; ?> /><label for=<?php echo '"send_to_search_T'.$index.'_"'; ?>><?php echo _("To"); ?></label>
<input type="checkbox" name=<?php echo '"send_to_search[C'.$index.']"'; ?> value=<?php echo '"'.$contact['FullAddress'].'"'; ?> id=<?php echo '"send_to_search_C'.$index.'_"'; ?> /><label for=<?php echo '"send_to_search_C'.$index.'_"'; ?>><?php echo _("Cc"); ?></label>
<input type="checkbox" name=<?php echo '"send_to_search[B'.$index.']"'; ?> value=<?php echo '"'.$contact['FullAddress'].'"'; ?> id=<?php echo '"send_to_search_B'.$index.'_"'; ?> /><label for=<?php echo '"send_to_search_B'.$index.'_"'; ?>><?php echo _("Bcc"); ?></label>
<?php
}
?>
</td>
<td class="abookField"><?php echo $contact['FullName']; ?></td>
<td class="abookField"><?php echo sprintf($addr_str, $contact['Email']); ?></td>
<td class="abookField"><?php echo $contact['Info']; ?></td>
<?php
if ($include_abook_name) {
echo '<td class="abookField">'.$contact['Source'].'</td>'."\n";
}
?>
</tr>
<?php
}
?>
</table>
<?php
if (!$compose_addr_pop) {
echo '<input type="submit" name="addr_search_done" value="'. _("Use Addresses") .'" />'."\n";
echo '<input type="submit" name="addr_search_cancel" value="'. _("Cancel") .'" />'."\n";
} else {
echo '<input type="submit" onClick="javascript:parent.close();" name="close_window" value="' . _("Close Window") . '" />'. "\n";
}
?>
</div>

View file

@ -0,0 +1,152 @@
<?php
/**
* addressbook_list.tpl
*
* Template for the basic address book list
*
* The following variables are available in this template:
*
* string $form_action The action for the main form tag
* array $current_page_args All known query string arguments for the
* current page request, for use when constructing
* links pointing back to same page (possibly
* changing one of them); structured as an
* associative array of key/value pairs
* boolean $compose_new_win Whether or not the user prefs are set to compose
* messages in a popup window
* int $compose_width Width of popup compose window if needed
* int $compose_height Height of popup compose window if needed
* int $current_backend Number of backend currently displayed.
* string $abook_select Code for widget to display the address book
* backend selection drop down
* boolean $abook_has_extra_field TRUE if the address book contains an
* additional field. FALSE otherwise.
* array $backends Contains all available abook backends for selection.
* This will be empty if only 1 backend is available!
* array $addresses Contains backends in the address book. Each element
* is an array containing the following fields:
* ['BackendID'] - integer unique identifier for each source of
* addresses in the book. this should also be
* the same as the array key for this value
* ['BackendSource'] - description of each source of addresses
* ['BackendWritable'] - boolean TRUE if the address book can be
* modified. FALSE otherwise.
* ['Addresses'] - array containing address from this source.
* Each array element contains the following:
* ['FirstName'] - The entry's first name
* ['LastName'] - The entry's last name (surname)
* ['FullName'] - The entry's full name (first + last)
* ['NickName'] - The entry's nickname
* ['Email'] - duh
* ['FullAddress'] - Email with full name or nick name
* optionally prepended.
* ['Info'] - Additional info about this contact
* ['Extra'] - Additional field, if provided. NULL if
* this field is not provided by the book.
* ['JSEmail'] - email address scrubbed for use with
* javascript functions.
*
* @copyright 1999-2021 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package squirrelmail
* @subpackage templates
*/
/** add required includes **/
include_once(SM_PATH . 'functions/template/abook_util.php');
/** extract template variables **/
extract($t);
/** Begin template **/
$source = $addresses[$current_backend];
$colspan = $abook_has_extra_field ? 6 : 5;
?>
<form action="<?php echo $form_action; ?>" method="post" id="address_book_form" name="address_book_form">
<input type="hidden" name="smtoken" value="<?php echo sm_generate_security_token(); ?>" />
<div id="addressList">
<table class="table1" cellspacing="0">
<tr>
<td colspan="<?php echo $colspan; ?>" class="header1">
<?php echo $source['BackendSource']; ?>
</td>
</tr>
<tr>
<td colspan="3" class="abookPaginationAndButtons">
<div class="abookPagination">
<?php
$this->display('addressbook_paginator.tpl');
if (!empty($plugin_output['address_book_navigation'])) echo $plugin_output['address_book_navigation'];
?>
</div><div class="abookButtons">
<input type="submit" value="<?php echo _("Edit"); ?>" name="editaddr" id="editaddr" />
<input type="submit" value="<?php echo _("Delete"); ?>" name="deladdr" id="deladdr" />
<input type="submit" value="<?php echo _("Compose To") . ($javascript_on && $compose_new_win ? '" onclick="var send_to = \'\'; var f = document.forms.length; var i = 0; var grab_next_hidden = \'\'; while (i < f) { var e = document.forms[i].elements.length; var j = 0; while (j < e) { if (document.forms[i].elements[j].type == \'checkbox\' && document.forms[i].elements[j].checked) { var pos = document.forms[i].elements[j].value.indexOf(\'_\'); if (pos >= 1) { grab_next_hidden = document.forms[i].elements[j].value; } } else if (document.forms[i].elements[j].type == \'hidden\' && grab_next_hidden == document.forms[i].elements[j].name) { if (send_to != \'\') { send_to += \', \'; } send_to += document.forms[i].elements[j].value; } j++; } i++; } if (send_to != \'\') { comp_in_new(\''. $base_uri . 'src/compose.php?send_to=\' + send_to, ' . $compose_width . ', ' . $compose_height . '); } return false;"' : '"'); ?> name="compose_to" id="compose_to" />
<?php if (!empty($plugin_output['address_book_buttons'])) echo $plugin_output['address_book_buttons']; ?>
</div>
</td>
<td colspan="<?php echo ($colspan - 3); ?>" class="abookSwitch">
<?php if (!empty($plugin_output['address_book_filter'])) echo $plugin_output['address_book_filter']; ?>
<?php
if (count($backends) > 0) {
?>
<select name="new_bnum">
<?php
foreach ($backends as $id=>$name) {
echo '<option value="' . $id . '"' . ($id == $current_backend ? ' selected="selected"' : '') . '>' . $name . '</option>' . "\n";
}
?>
</select>
<input type="submit" value="<?php echo _("Change"); ?>" name="change_abook" id="change_abook" />
<?php
} else {
echo '&nbsp;';
}
?>
</td>
</tr>
<tr>
<td class="colHeader" style="width:1%"><input type="checkbox" name="toggleAll" id="toggleAll" title="<?php echo _("Toggle All"); ?>" onclick="toggle_all('address_book_form', 'sel', false); return false;" /></td>
<td class="colHeader" style="width:15%"><?php echo addAbookSort('nickname', $current_page_args); ?></td>
<td class="colHeader"><?php echo addAbookSort('fullname', $current_page_args); ?></td>
<td class="colHeader"><?php echo addAbookSort('email', $current_page_args); ?></td>
<td class="colHeader"><?php echo addAbookSort('info', $current_page_args); ?></td>
<?php
if ($abook_has_extra_field) {
echo '<td class="colHeader"></td>';
}
?>
</tr>
<?php
$count = 1;
if (count($source['Addresses']) == 0) {
echo '<tr><td class="abookEmpty" colspan="'.$colspan.'">'._("Address book is empty").'</td></tr>'."\n";
}
foreach ($source['Addresses'] as $contact) {
echo '<tr class="' . ($count%2 ? 'even' : 'odd') . '">';
if (!empty($contact['special_message'])) {
echo '<td class="abookEmpty" colspan="' . $colspan . '">' . $contact['special_message'] . '</td>';
} else {
$id = $current_backend . '_' . $contact['NickName'];
?>
<td class="abookField" style="width:1%"><?php echo ($source['BackendWritable'] ? '<input type="checkbox" name="sel[' . $count . ']" value="'.$id.'" id="'.$id.'" ' . (!empty($plugin_output['address_book_checkbox_extra']) ? $plugin_output['address_book_checkbox_extra'] : '') . ' />' : ''); ?></td>
<td class="abookField" style="width:15%"><label for="<?php echo $id . '">' . $contact['NickName']; ?></label></td>
<td class="abookField"><label for="<?php echo $id . '">' . $contact['FullName']; ?></label></td>
<td class="abookField"><input type="hidden" name="<?php echo $id; ?>" value="<?php echo rawurlencode($contact['FullAddress']); ?>" /><?php echo composeLink($contact); ?></td>
<td class="abookField"><label for="<?php echo $id . '">' . $contact['Info']; ?></label></td>
<?php
if ($abook_has_extra_field) {
echo '<td class="abookField">'.$contact['Extra'].'</td>'."\n";
}
}
?>
</tr>
<?php
$count++;
}
?>
</table>
</div>
</form>

View file

@ -0,0 +1,82 @@
<?php
/**
* addressbook_search_form.tpl
*
* Display the form for searching the address book. Called from addrbook_search.php
*
* The following variables are available in this template:
* $use_js - boolean TRUE if we should use Javascript in the address book
* $backends - array containing list of all available backends.
*
* @copyright 1999-2021 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package squirrelmail
* @subpackage templates
*/
/** add required includes **/
/** extract template variables **/
extract($t);
/** Begin template **/
?>
<div id="addrBookSearch">
<table cellspacing="0" class="table1">
<tr>
<td class="header1">
<?php echo _("Address book search"); ?>
</td>
</tr>
<tr>
<td>
<table cellspacing="0">
<tr>
<td>
<label for="query"><?php echo _("Search for"); ?>:</label>
</td>
<td>
<input type="text" id="query" name="query" />
</td>
<td>
<?php
if (count($backends) > 1) {
?>
<label for="backend"><?php echo _("in"); ?></label>
<select name="backend" id="backend">
<?php
foreach ($backends as $id=>$name) {
echo '<option value="'.$id.'">'.sm_encode_html_special_chars($name).'</option>'."\n";
}
?>
</select>
<?php
} else {
?>
<input type="hidden" name="backend" value="-1" />
<?php
}
?>
</td>
</tr>
<tr>
<td colspan="3" class="buttons">
<input type="submit" name="show" value=<?php echo '"'._("Search").'"'; ?> />
&nbsp;&nbsp;
<input type="submit" name="listall" value=<?php echo '"'._("List all").'"'; ?> />
<?php
if ($javascript_on && $compose_addr_pop) {
?>
&nbsp;&nbsp;
<input type="submit" onclick="parent.close()" value=<?php echo '"'._("Close").'"'; ?> />
<?php
}
?>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>

View file

@ -0,0 +1,51 @@
<?php
/**
* Provides some basic configuration options to the template engine
*
* @copyright 1999-2021 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package squirrelmail
* @subpackage templates
*/
/**
* Indicates what template engine this template set uses.
*/
$template_engine = SQ_PHP_TEMPLATE;
/**
* Indicates what the content type is for this template set.
*/
$content_type = 'text/html';
/**
* If non-empty, indicates which template set this set is derived from.
*
* If a template file does not exist in this template set, then the
* parent set is searched for the file. If not found there and that
* set has a parent itself (the grandparent of this set), the file is
* searched for there.... This continues until there are no more parent
* template sets, and if the file is still not found, the fall-back
* template set (see $templateset_fallback in config/config.php) is the
* last placed searched for the file.
*
*/
$parent_template_set = 'default';
/**
* These settings allow this template set to change SquirrelMail's
* list of active plugins by adding or removing any of those listed
* herein. If the $remove_plugins list contains "*", then ALL plugins
* will be disabled, and only those in $add_plugins will be enabled.
*
*/
$add_plugins = array();
$remove_plugins = array();

View file

@ -0,0 +1,85 @@
body
{
color: #FFFFFF;
background-color: #305030;
background-image: url(//realityripple.com/images/nature.jpg);
background-size: cover !important;
background-repeat: no-repeat !important;
background-position: left bottom !important;
background-attachment: fixed !important;
text-shadow: 1px 1px 2px #000000;
}
#sqm_login
{
margin-top: 150px;
}
#sqm_login td.sqm_loginOrgName
{
font-size: 150%;
padding: 0.25em 0.5em;
border-radius: 0.5em 0.5em 0 0;
}
.sqm_loginOrgName, .sqm_signoutBar
{
background-color: #002000;
}
#sqm_login td.sqm_loginFieldName
{
text-align: left;
padding-top: 0.5em;
padding-bottom: 0.5em;
padding-left: 0.5em;
}
#sqm_login td.sqm_loginFieldName,
#sqm_login td.sqm_loginFieldInput,
#sqm_login td.sqm_loginSubmit
{
background: rgba(0, 0, 0, 0.7);
}
#sqm_login td.sqm_loginSubmit
{
padding-bottom: 0.5em;
border-radius: 0 0 1em 1em;
}
input[type="text"], input[type="password"], textarea, input:not([type])
{
background-color: #101010;
border: 1px solid #C0C0C0;
color: #FFFFFF;
min-width: 275px;
}
input[type="submit"]
{
color: #FFFFFF;
border-color: #464646;
background-image: linear-gradient(to bottom, #202020, #070707);
background-color: #070707;
display: inline-block;
outline: 0;
font-family: sans-serif;
font-size: 80%;
font-style: normal;
padding: 0.2em 0.63em;
margin: 0.15em 0.25em;
border-radius: 2px;
border-width: 1px;
border-style: solid;
text-indent: 0;
text-align: inherit;
white-space: normal;
cursor: pointer;
cursor: hand;
}
input[type="submit"]:hover:not([disabled]),
input[type="submit"]:focus:not([disabled])
{
border-color: #464646;
background-image: linear-gradient(to bottom, #202020, #070707);
background-color: #070707;
box-shadow: 0px 1px 1px #404040;
}
input[type="submit"]:hover:not([disabled]):active
{
box-shadow: inset 0px 1px 1px #404040;
}

View file

@ -0,0 +1,62 @@
<?php
/**
* error_box.tpl
*
* Displays the simple error box. This is different than the error list
* template that is displayed in footer.tpl.
*
* Variables available to this template:
* $errorMessage - Translated string containing error message to be
* displayed.
* $error - Translation of string "ERROR". This string is
* translated in functions that call this template to
* avoid making multiple translations on this string
* $link - Array containing link to display to go back, if desired.
* If no link is dsired, this will be NULL. The array
* will contain the following elements:
* $link['URL'] - URL target for link
* $link['FRAME'] - Frame target for link
* $link['TEXT'] - Text to display for link
*
* @copyright 1999-2021 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package squirrelmail
* @subpackage templates
*/
// Extract template variables
extract($t);
?>
<div style="text-align:center; width:100%">
<table class="table_errorBoxWrapper" cellspacing="0">
<tr>
<td>
<table class="table_errorBox" cellspacing="0">
<tr>
<td class="error_header">
<?php echo $error; ?>
</td>
</tr>
<tr>
<td class="error_message">
<?php echo $errorMessage."\n"; ?>
</td>
</tr>
<?php
if (!is_null($link)) {
?>
<tr>
<td class="error_header">
<a href="<?php echo $link['URL']; ?>" target="<?php echo $link['FRAME']; ?>"><?php echo $link['TEXT']; ?></a>
</td>
</tr>
<?php
}
?>
</table>
</td>
</tr>
</table>
</div>

Some files were not shown because too many files have changed in this diff Show more