diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index 227b014cd6a850ae0ebc4b6bf2eb0408ec0f780c..2c0caf2914b9a17e8d1bd58dd3a8912636304116 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -560,6 +560,7 @@ CREATE TABLE `mail_user` ( `gid` int(11) unsigned NOT NULL default '5000', `maildir` varchar(255) NOT NULL default '', `quota` bigint(20) NOT NULL default '-1', + `cc` varchar(255) NOT NULL default '', `homedir` varchar(255) NOT NULL, `autoresponder` enum('n','y') NOT NULL default 'n', `autoresponder_start_date` datetime NOT NULL default '0000-00-00 00:00:00', diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php index 5214b6209090453ff920ad88c430e112375fdae2..06fa18a230a023aab0753adc5fe76fcd3325b2d4 100644 --- a/interface/web/mail/form/mail_user.tform.php +++ b/interface/web/mail/form/mail_user.tform.php @@ -110,6 +110,18 @@ $form["tabs"]['mailuser'] = array ( 'width' => '30', 'maxlength' => '255' ), + 'cc' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'validators' => array ( 0 => array ( 'type' => 'REGEX', + 'regex' => '/^(\w+[\w\.\-\+]*\w{0,}@\w+[\w.-]*\w+\.[a-z]{2,10}){0,1}$/i', + 'errmsg'=> 'cc_error_isemail'), + ), + 'default' => '', + 'value' => '', + 'width' => '30', + 'maxlength' => '255' + ), 'maildir' => array ( 'datatype' => 'VARCHAR', 'formtype' => 'TEXT', diff --git a/interface/web/mail/lib/lang/en_mail_user.lng b/interface/web/mail/lib/lang/en_mail_user.lng index 7ce7b52f93fac47caf19515ac2dec0cb2604dd79..d49bfb72259dbb36b00529526c3fbfd2132ea00a 100644 --- a/interface/web/mail/lib/lang/en_mail_user.lng +++ b/interface/web/mail/lib/lang/en_mail_user.lng @@ -37,4 +37,6 @@ $wb["move_junk_txt"] = 'Move Spam Emails to Junk directory'; $wb["name_txt"] = 'Realname'; $wb["name_optional_txt"] = '(Optional)'; $wb['autoresponder_active'] = 'Enable the autoresponder'; +$wb['cc_txt'] = 'Send copy to'; +$wb['cc_error_isemail'] = 'The "Send copy to" field does not conatin a valid email address'; ?> diff --git a/interface/web/mail/templates/mail_user_mailbox_edit.htm b/interface/web/mail/templates/mail_user_mailbox_edit.htm index 708ff8a9e780792ac1bd670313c999580c0bbad4..ba0c4d8298b06a1cb40b83b12c3857bf90e025b8 100644 --- a/interface/web/mail/templates/mail_user_mailbox_edit.htm +++ b/interface/web/mail/templates/mail_user_mailbox_edit.htm @@ -30,6 +30,10 @@ <label for="quota">{tmpl_var name='quota_txt'}</label> <input name="quota" id="quota" value="{tmpl_var name='quota'}" size="30" maxlength="255" type="text" class="textInput formLengthLimit" /><p class="formInputUnity"> MB</p> </div> + <div class="ctrlHolder"> + <label for="name">{tmpl_var name='cc_txt'}</label> + <input name="cc" id="cc" value="{tmpl_var name='cc'}" size="30" maxlength="255" type="text" class="textInput" /> {tmpl_var name='name_optional_txt'} + </div> <div class="ctrlHolder"> <label for="policy">{tmpl_var name='policy_txt'}</label> <select name="policy" id="policy" class="selectInput"> diff --git a/server/conf/sieve_filter.master b/server/conf/sieve_filter.master index c3393cf7c98c434e812755c55c96128c54c2eb27..2b4a9fc2f8dcbc49c7cc17e43d5c013d7ff20b3b 100644 --- a/server/conf/sieve_filter.master +++ b/server/conf/sieve_filter.master @@ -1,6 +1,12 @@ require ["fileinto", "regex", "vacation"]; +<tmpl_if name="cc"> +# Send a copy of email to +redirect "<tmpl_var name='cc'>"; +keep; +</tmpl_if> + <tmpl_if name="move_junk" op="==" value="y"> # Move spam to spam folder if header :contains "X-Spam-Flag" "YES" { diff --git a/server/plugins-available/maildeliver_plugin.inc.php b/server/plugins-available/maildeliver_plugin.inc.php index 7fc8a4e7620f2c8330f1883dbe5c475c10add4d8..b2a11462316b23b5703a445363d5e7fcae3e4892 100644 --- a/server/plugins-available/maildeliver_plugin.inc.php +++ b/server/plugins-available/maildeliver_plugin.inc.php @@ -89,7 +89,9 @@ class maildeliver_plugin { or $data["old"]["autoresponder"] != $data["new"]["autoresponder"] or (isset($data["new"]["email"]) and $data["old"]["email"] != $data["new"]["email"]) or $data["old"]["autoresponder_start_date"] != $data["new"]["autoresponder_start_date"] - or $data["old"]["autoresponder_end_date"] != $data["new"]["autoresponder_end_date"]) { + or $data["old"]["autoresponder_end_date"] != $data["new"]["autoresponder_end_date"] + or $data["old"]["cc"] != $data["new"]["cc"] + ) { $app->log("Mailfilter config has been changed",LOGLEVEL_DEBUG); diff --git a/server/plugins-available/maildrop_plugin.inc.php b/server/plugins-available/maildrop_plugin.inc.php index 58cbaa47747d8e53a68e4793ca59059402bc209e..6296653b6174a376f656037f09e4c9d2719839b5 100644 --- a/server/plugins-available/maildrop_plugin.inc.php +++ b/server/plugins-available/maildrop_plugin.inc.php @@ -166,8 +166,10 @@ class maildrop_plugin { } // Write the custom mailfilter script, if mailfilter recipe has changed - if($data["old"]["custom_mailfilter"] != $data["new"]["custom_mailfilter"] or - $data["old"]["move_junk"] != $data["new"]["move_junk"]) { + if($data["old"]["custom_mailfilter"] != $data["new"]["custom_mailfilter"] + or $data["old"]["move_junk"] != $data["new"]["move_junk"] + or $data["old"]["cc"] != $data["new"]["cc"]) { + $app->log("Mailfilter config has been changed",LOGLEVEL_DEBUG); if(trim($data["new"]["custom_mailfilter"]) != '' or $data["new"]["move_junk"] != 'n') { // Delete the old filter recipe @@ -184,6 +186,11 @@ class maildrop_plugin { $config_file_path = $this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0].'/.mailfilter'; $mailfilter_content = ''; + + if($data["new"]["cc"] != '') { + $mailfilter_content .= "cc \"!".$data["new"]["cc"]."\"\n"; + } + if($data["new"]["move_junk"] == 'y') { $mailfilter_content .= file_get_contents($conf["rootpath"].'/conf/mailfilter_move_junk.master')."\n"; }