LinuxHowtoCourierMailfilterAutoreply
Automatické odpovědi
Automatické odpovědi pomocí SquirrelMail pluginu Courier Vacation
[+]
- Nainstalovat do SquirrelMail plugin Courier Vacation
- V sobuoru config.php změnit a přidat následující hodnoty
$messageFileName = 'vacation/vacation.txt';
$subjectFileName = 'vacation/vacation_subject.txt';
$ccAddressesFileName = 'vacation/vacation_cc_addresses.txt';
$keepMessagesFileName = 'vacation/vacation_keep_messages.txt';
$backend = 'ldap';
$ldap_server="localhost";
$ldap_port=389;
$ldap_bind_dn="uid=reader,dc=service_accounts,dc=jalovice,dc=servers,dc=uvt,dc=cz";
$ldap_bind_pw="readerpass";
$ldap_base_dn="dc=users,dc=uvt.cz,dc=accounts,dc=uvt,dc=cz";
$ldap_filter="(objectClass=CourierMailAccount)";
$ldap_home_attrib="homeDirectory";
$ldap_mail_attrib="mail";
$ldap_uid_attrib="uid";
$ldap_uidnum_attrib="uidNumber";
- Do souboru options.php přidat kód
function ldap_get_home_directory($user)
{
global $ldap_server, $ldap_port, $ldap_bind_dn, $ldap_bind_pw, $ldap_base_dn, $ldap_filter, $ldap_home_attrib, $ldap_uid_attrib, $ldap_mail_attrib, $ldap_uidnum_attrib;
$ds=ldap_connect($ldap_server,isset($ldap_port)?$ldap_port:389);
if (!$ds) {
showError(sprintf('Error: Could not connect to LDAP server %s:%s',$ldap_server,isset($ldap_port)?$ldap_port:389));
exit(1);
}
if (isset($ldap_bind_dn)) {
if (isset($ldap_bind_pw)) {
$r=ldap_bind($ds,$ldap_bind_dn,$ldap_bind_pw);
} else {
$r=ldap_bind($ds,$ldap_bind_dn);
}
} else {
$r=ldap_bind($ds);
}
if (!$r) {
showError(sprintf('Error: Bind to LDAP server %s:%s as user %s',$ldap_server,isset($ldap_port)?$ldap_port:389,isset($ldap_bind_dn)?$ldap_bind_dn:"anonymous"));
exit(1);
}
$rs=ldap_search($ds,isset($ldap_base_dn)?$ldap_base_dn:"",
sprintf('(&(|(%s=%s)(%s=%s)(%s=%s))%s)',$ldap_uid_attrib,$user,$ldap_mail_attrib,$user,$ldap_uidnum_attrib,$user,isset($ldap_filter)?$ldap_filter:""),array($ldap_home_attrib));
if (!$rs) {
showError('Error: Unable to search in LDAP tree');
exit(1);
}
$items=ldap_get_entries($ds,$rs);
if (!$items or ($items["count"]==0)) {
showError("Error: Could not found any record");
exit(1);
}
// ob_start();
// var_dump($items);
// showError(htmlspecialchars(ob_get_flush()));
if ($items[0][strtolower($ldap_home_attrib)]["count"]==0) {
showError("Error: User's home directory not found:");
exit(1);
}
ldap_close($ds);
return $items[0][strtolower($ldap_home_attrib)][0];
}
- do souboru maildroprc Couriera přidat kód
MAILBOT="/usr/lib/courier/bin/mailbot"
`test -f vacation/vacation.txt`
if ($RETURNCODE==0)
{
/^Delivered-To:.*/
getaddr($MATCH) =~ /^.*/;
# test for vacation message subject, use it if found
#
`test -f vacation/vacation_subject.txt`
if ($RETURNCODE==0)
{
SUBJECT=`cat vacation/vacation_subject.txt`
cc "| $MAILBOT -t vacation/vacation.txt -A 'From: $MATCH' -s '$SUBJECT' $SENDMAIL -f ''"
# otherwise, regular "Re:" syntax for subject is automatic
#
}
else
{
cc "| $MAILBOT -t vacation/vacation.txt -A 'From: $MATCH' $SENDMAIL -f ''"
# test for any cc addresses, forward to those addresses if present
#
}
`test -f vacation/vacation_cc_addresses.txt`
if ($RETURNCODE==0)
{
# grab cc addresses
#
CCADDRESSES=`cat vacation/vacation_cc_addresses.txt`
# do we need to keep a copy of messages in this account or not?
#
`test -f vacation/vacation_keep_messages.txt`
if ($RETURNCODE==0)
{
cc "! -f \"$FROM\" $CCADDRESSES"
}
else
{
to "! -f \"$FROM\" $CCADDRESSES"
}
}
}
- Připojit uživatelské mailové adresáře do web chrootu mkdir /data/web/home;mount -o bind /data/mail/home /data/web/home
- Vytvořit uživatelům adresář vacation a nastavit mu práva drwxrwx--- USER apache a na uživatelský adresář přidat právo x pro ostatní např. pomocí:
find /data/mail/home/ -mindepth 2 -maxdepth 2 -type d -name Maildir -print0 | xargs -0l dirname | while read d;do if ! [ -e "$d"/vacation ];then mkdir "$d"/vacation;chmod -v o+x "$d";chown -v "$( stat -c "%u" "$d")":apache "$d"/vacation;chmod -v 770 "$d"/vacation;fi;done
- Do skeletonu uživatele přidat adresář vacation
- Upravit skript na přidávání emailového uživatele tak, aby při vytvoření uživatele:
- nastavil právo x pro ostatní na home adresáři uživatele
- nastavil práva drwxrwx--- USER apache na adresář vacation v home adresáři uživatele
Návod pro uživatele pro nastavení automatické odpovědi pomocí courier_vacation
[+]
- Přihlásit se na email na obloze (mail.obloha.cz), přihlašovací jméno je celý email
- Z nabídky vybrat "Možnosti" (nebo "Options")
- Dále vybrat položku "Vacation / Autoresponder"
- Vyplnit pole
- Zaškrtávací políčko "Activate vacation autoresponder" znamená, jestli se má posílat automatická odpověď
- "Message text:" obsahuje zprávu, která se odešle jako odpověď
- "Message subject" obsahuje text, který se dosadí do předmětu automatické odpovědi, pokud se nechá prázdné, tak se jako předmět dosadí "Re: Původni předmět"
- "Send copy of messages to" obsahuje čárkami oddělený seznam emailových adres, na které se zpráva přepošle
- Zaškrtávací políčko "Keep copies of incoming messages in this account" má význam v případě, že jsou zadané emailové adresy, kam se zpráva přepošle. Pokud je toto políčko prázdné, pak se příchozí zprávy pouze přepošlou na zadané emaily. Pokud je volba zaškrtnuta, pak se emaily přepošlou, ale také se doručí kopie do Příchozí pošty.
- Po vyplnění všech požadovaných polí kliknout na tlačítko "Odeslat" (nebo "Submit")
Časově neomezené
[+]
V Maildiru uživatele založit nový adresář <tt>autoresponses</tt> a do něj umístit zprávu např. do souboru <tt>Away</tt>. Soubor i adresář musí být vlastnění uživatelem.
Do souboru <tt>/home/UZIVATEL/Maildir/.mailfilter</tt> zapsat kód pro zaslání automatické odpovědi, např takto:
FROM='!!!EMAIL!!!'
import SENDER
if ($SENDER eq "")
{
SENDER=$FROM
}
AUTOREPLYFROM=$FROM
`/usr/local/courier/lib/courier/bin/mailbot -A "X-Sender: $FROM" -A "From: $AUTOREPLYFROM" -m "./Maildir/autoresponses/Away" $SENDMAIL -t -f ""`
to "./Maildir/."
Pokud zpráva neobsahuje čistý plain text bez diakritiky, přidej ještě na začátek souboru označení kódování.
Content-Type: text/plain; format=flowed; charset="UTF-8"
Content-Transfer-Encoding: 8bit
S časovým omezením
[+]
Pro časové omezení stačí přidat nastavení proměnných s datem začatku a konce. Při zadávání času pozor na pásma a posun času (CET a CEST).
CAS=time
# date -d "2006/3/21 0:0:0 cet" +"%s"
ZACATEK=1142895600
# date -d "2006/4/3 0:0:0 cet" +"%s"
KONEC=1144018800
a dále odeslání odpovědi umístit do podmínky
if ( ( $CAS >= $ZACATEK ) && ( $CAS <= $KONEC ) )
{
AUTOREPLYFROM=$FROM
`/usr/local/courier/lib/courier/bin/mailbot -A "X-Sender: $FROM" -A "From: $AUTOREPLYFROM" -m "./Maildir/autoresponses/Away" $SENDMAIL -t -f ""`
}
Kompletní vzor
[+]
FROM='!!!EMAIL!!!'
import SENDER
if ($SENDER eq "")
{
SENDER=$FROM
}
CAS=time
# date -d "2006/3/21 0:0:0 cet" +"%s"
ZACATEK=1142895600
# date -d "2006/4/3 0:0:0 cet" +"%s"
KONEC=1144018800
if ( ( $CAS >= $ZACATEK ) && ( $CAS <= $KONEC ) )
{
AUTOREPLYFROM=$FROM
`/usr/local/courier/lib/courier/bin/mailbot -A "X-Sender: $FROM" -A "From: $AUTOREPLYFROM" -m "./Maildir/autoresponses/Away" $SENDMAIL -t -f ""`
}
Důležité!
Soubor <tt>.mailfilter</tt> musí být vlastněný uživatelem a musí být i práva na <tt>rwx--</tt>