From c4040c8227e5d5d5fd6d2acb0bd4daa03aba2e50 Mon Sep 17 00:00:00 2001 From: Christian Boltz Date: Sun, 7 Oct 2007 23:12:07 +0000 Subject: [PATCH] - initial version of fetchmail support (by Viktor Gotwig,info AT symateam.de) (see postfixadmin-devel mailinglist for detailed description and known problems, subject "fetchmail support") - encoded some german umlauts as htmlentities git-svn-id: https://svn.code.sf.net/p/postfixadmin/code/trunk@140 a1433add-5e2c-0410-b055-b7f2511e0802 --- fetchmail.php | 174 ++++++++++++++++++++++++++++++++++++++++ languages/de.lang | 23 +++--- languages/en.lang | 5 ++ templates/fetchmail.tpl | 155 +++++++++++++++++++++++++++++++++++ 4 files changed, 348 insertions(+), 9 deletions(-) create mode 100644 fetchmail.php create mode 100644 templates/fetchmail.tpl diff --git a/fetchmail.php b/fetchmail.php new file mode 100644 index 00000000..083d0b3d --- /dev/null +++ b/fetchmail.php @@ -0,0 +1,174 @@ +array(0,1,'id', 'ID','Record ID'), + "mailbox" =>array(1,1,'enum', 'Mailbox','Local mailbox'), + "src_server" =>array(1,1,'text', 'Server','Remote Server'), + "src_auth" =>array(1,1,'enum', 'Auth Type','Mostly password'), + "src_user" =>array(1,1,'text', 'User','Remote User'), + "src_password" =>array(1,1,'password', 'Password','Remote Password'), + "src_folder" =>array(1,1,'text', 'Folder','Remote Folder'), + "pool_time" =>array(1,1,'num', 'Poll','Poll Time (min)'), + "fetchall" =>array(1,1,'bool', 'Fetch All','Retrieve both old (seen) and new messages'), + "keep" =>array(1,1,'bool', 'Keep','Keep retrieved messages on the remote mailserver'), + "protocol" =>array(1,1,'enum', 'Protocol','Protocol to use'), + "extra_options" =>array(1,1,'longtext', 'Extra Options','Extra fetchmail Options'), + "mda" =>array(1,1,'longtext', 'MDA','Mail Delivery Agent'), + "date" =>array(0,1,'text', 'Date','Date of last pooling/configuration change'), + "returned_text" =>array(0,1,'longtext', 'Returned Text','Text message from last pooling'), +); + +$SESSID_USERNAME = authentication_get_username(); +if (!$SESSID_USERNAME ) + exit; + +$fm_defaults=array( + "id" =>0, + "mailbox" => array($SESSID_USERNAME), + "pool_time" =>10, + "src_auth" => + array('password','kerberos_v5','kerberos','kerberos_v4','gssapi','cram-md5','otp','ntlm','msn','ssh','any'), + "protocol" => + array('POP3','IMAP','POP2','ETRN','AUTO'), +); + + +$list_domains = list_domains_for_admin ($SESSID_USERNAME); +$user_domains=implode("','",array_values($list_domains)); +$sql="SELECT username FROM mailbox WHERE domain in ('".$user_domains."')"; + +$res = db_query ($sql); +if ($res['rows'] > 0){ + $fm_defaults["mailbox"]=array(); + while ($name = db_array ($res['result'])){ + $fm_defaults["mailbox"][] = $name["username"]; + } +} +else{ + $fm_defaults["mailbox"]=array(); + $fm_defaults["mailbox"][]=$SESSID_USERNAME; +} + +$new=$_REQUEST["new"]; +$edit=(int)$_REQUEST["edit"]; +$delete=$_REQUEST["delete"]; +$save=$_REQUEST["save"]; +$cancel=$_REQUEST["cancel"]; + +if ($cancel){ + $edit=0; +} +elseif($edit && $save){ + $_vals=array(); + foreach($fm_struct as $key=>$row){ + list($editible,$view,$type,$title,$comment)=$row; + if ($editible){ + $func="_inp_".$type; + $val=$_REQUEST[$key]; + if ($type!="password" || substr($val,0,1)!="*"){ + $_vals[]=$key."='".mysql_escape_string( + function_exists($func) + ?$func($val) + :$val)."'"; + } + } + } + $sql="UPDATE fetchmail SET ".implode(",",$_vals).",returned_text='' WHERE id=".$edit; + $res= db_query ($sql); +} +elseif($delete){ + db_query ("delete from fetchmail WHERE id=".$edit); +} +elseif ($new){ + $_keys=array(); + $_vals=array(); + foreach($fm_defaults as $key=>$val){ + $_keys[]=$key; + $_vals[]="'".(is_array($val)?$val[0]:mysql_escape_string($val))."'"; + } + $sql="INSERT fetchmail (".implode(",",$_keys).") VALUES (".implode(",",$_vals).")"; + $res= db_query ($sql); + $sql="SELECT id FROM fetchmail order by id desc limit 1"; + $res= db_query ($sql); + list($edit)=mysql_fetch_row($res['result']); +} + +$res = db_query ("SELECT ".implode(",",array_keys($fm_struct))." FROM fetchmail order by id desc"); +if ($res['rows'] > 0){ + while ($row = db_array ($res['result'])){ + $tFmail[] = $row; + } +} + +function _inp_num($val){ + return (int)($val); +} + +function _inp_bool($val){ + return $val?1:0; +} + +function _inp_password($val){ + return base64_encode($val); +} + + include ("./templates/header.tpl"); + include ("./templates/menu.tpl"); + include ("./templates/fetchmail.tpl"); + include ("./templates/footer.tpl"); + +?> diff --git a/languages/de.lang b/languages/de.lang index 58c255de..85f7edf6 100644 --- a/languages/de.lang +++ b/languages/de.lang @@ -25,6 +25,7 @@ $PALANG['pLogin_login_users'] = 'eMail-Benutzer bitte hier einloggen.'; $PALANG['pMenu_overview'] = 'Überblick'; $PALANG['pMenu_create_alias'] = 'Alias hinzufügen'; $PALANG['pMenu_create_mailbox'] = 'Mailbox hinzufügen'; +$PALANG['pMenu_fetchmail'] = 'E-Mail Abruf bearbeiten'; $PALANG['pMenu_sendmail'] = 'Email versenden'; $PALANG['pMenu_password'] = 'Passwort ändern'; $PALANG['pMenu_viewlog'] = 'Log ansehen'; @@ -32,7 +33,7 @@ $PALANG['pMenu_logout'] = 'Logout'; $PALANG['pMain_welcome'] = 'Willkommen zu Postfix Admin!'; $PALANG['pMain_overview'] = 'Listet Ihre Aliase und Mailboxen auf. Sie können sie hier editieren und löschen.'; -$PALANG['pMain_create_alias'] = 'Fügt einen neuen Alias für Ihre Domain hinzu.'; +$PALANG['pMain_create_alias'] = 'Fügt einen neuen Alias für Ihre Domain hinzu.'; $PALANG['pMain_create_mailbox'] = 'Legt eine neue Mailbox für Ihre Domain an.'; $PALANG['pMain_sendmail'] = 'Versenden Sie eine Email.'; $PALANG['pMain_password'] = 'Ändern Sie Ihr Admin-Passwort.'; @@ -280,24 +281,28 @@ $PALANG['pUsersVacation_subject'] = 'Betreff'; $PALANG['pUsersVacation_subject_text'] = 'Ich bin weg...'; $PALANG['pUsersVacation_body'] = 'Text'; $PALANG['pUsersVacation_body_text'] = << bis nicht zu Hause / im Büro. -In dringenden Fällen setzen Sie sich bitte mit in Verbindung. -Vielen Dank für Ihr Verständniss. +Ich bin vom bis nicht zu Hause / im Büro. +In dringenden Fällen setzen Sie sich bitte mit in Verbindung. +Vielen Dank für Ihr Verständnis. EOM; $PALANG['pUsersVacation_button_away'] = 'Ich gehe weg'; $PALANG['pUsersVacation_button_back'] = 'Ich bin zurück'; $PALANG['pUsersVacation_result_error'] = 'Konnte Ihre Automatische Antwort nicht einstellen!'; $PALANG['pUsersVacation_result_success'] = 'Ihre Automatische Antwort wurde gelöscht!'; -$PALANG['pCreate_dbLog_createmailbox'] = 'Mailbox hinzufügen'; -$PALANG['pCreate_dbLog_createalias'] = 'Alias hinzufügen'; -$PALANG['pDelete_dbLog_deletealias'] = 'Alias löschen'; -$PALANG['pDelete_dbLog_deletemailbox'] = 'Mailbox löschen'; +$PALANG['pCreate_dbLog_createmailbox'] = 'Mailbox hinzufügen'; +$PALANG['pCreate_dbLog_createalias'] = 'Alias hinzuü¼gen'; +$PALANG['pDelete_dbLog_deletealias'] = 'Alias lüschen'; +$PALANG['pDelete_dbLog_deletemailbox'] = 'Mailbox löschen'; -$PALANG['pEdit_dbLog_editactive'] = 'Aktiv-Status ändern'; +$PALANG['pEdit_dbLog_editactive'] = 'Aktiv-Status ändern'; $PALANG['pEdit_dbLog_editalias'] = 'Alias bearbeiten'; $PALANG['pEdit_dbLog_editmailbox'] = 'Mailbox bearbeiten'; $PALANG['pSearch'] = 'suche'; $PALANG['pSearch_welcome'] = 'Suche nach: '; + +$PALANG['pFetchmail_welcome'] = 'E-Mail Abruf für: '; +$PALANG['pFetchmail_new_entry'] = 'Neuer Eintrag'; + ?> diff --git a/languages/en.lang b/languages/en.lang index e0bbbd6f..5ce10554 100644 --- a/languages/en.lang +++ b/languages/en.lang @@ -28,6 +28,7 @@ $PALANG['pMenu_main'] = 'Main'; $PALANG['pMenu_overview'] = 'Overview'; $PALANG['pMenu_create_alias'] = 'Add Alias'; $PALANG['pMenu_create_mailbox'] = 'Add Mailbox'; +$PALANG['pMenu_fetchmail'] = 'Fetch Email'; $PALANG['pMenu_sendmail'] = 'Send Email'; $PALANG['pMenu_password'] = 'Password'; $PALANG['pMenu_viewlog'] = 'View Log'; @@ -354,4 +355,8 @@ $PALANG['pStatus_custom'] = 'Delivers to '; $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['pPasswordTooShort'] = "Password is too short - requires %s characters"; + +$PALANG['pFetchmail_welcome'] = 'Fetch mail for:'; +$PALANG['pFetchmail_new_entry'] = 'New entry'; + ?> diff --git a/templates/fetchmail.tpl b/templates/fetchmail.tpl new file mode 100644 index 00000000..f2f383cb --- /dev/null +++ b/templates/fetchmail.tpl @@ -0,0 +1,155 @@ +
+
+ +\n"; + print " \n"; + print "

".$PALANG['pFetchmail_welcome'].$user_domains."

\n"; + print " >> ".$PALANG['pFetchmail_new_entry']."\n"; + print " \n"; + print " \n"; + foreach($headers as $row){ + list($editible,$view,$type,$title,$comment)=$row; + print " " . $title . "\n"; + } + print " \n"; + + if (sizeof ($tFmail) > 0){ + foreach($tFmail as $row){ + if ($edit && $edit==$row["id"]){ + print "".fetchmail_edit_row($row)."\n"; + } + else{ + print " \n"; + foreach($row as $key=>$val){ + list($editible,$view,$type,$title,$comment)=$fm_struct[$key]; + if ($view){ + $func="_listview_".$type; + print " " . (function_exists($func)?$func($val):$val) . "\n"; + } + } + print " \n"; + } + } + + } + +function fetchmail_edit_row($data=array()){ + global $fm_struct,$fm_defaults; + $id=$data["id"]; + $_id=$data["id"]*100+1; + $ret=""; + foreach($fm_struct as $key=>$struct){ + list($editible,$view,$type,$title,$comment)=$struct; + if ($editible){ + $ret.=""; + $ret.="\n"; + } + elseif($view){ + $func="_view_".$type; + $val=isset($data[$key]) + ?(function_exists($func) + ?$func($data[$key]) + :nl2br($data[$key]) + ) + :"--x--"; + $ret.=""; + $ret.="\n"; + } + } + $ret.="\n"; + $ret.="
"; + $func="_edit_".$type; + if (! function_exists($func)) + $func="_edit_text"; + $val=isset($data[$key]) + ?$data[$key] + :(! is_array($fm_defaults[$key]) + ?$fm_defaults[$key] + :'' + ); + $ret.=$func($_id++,$key,$fm_defaults[$key],$val); + $ret.=" ${comment}
${title}: ".$val; + $ret.=" ${comment}
"; + if ($id){ + $ret.=""; + } + $ret.="
\n"; + return $ret; +} + +function _edit_text($id,$key,$def_vals,$val=""){ + $val=htmlspecialchars($val); + return ""; +} + +function _edit_password($id,$key,$def_vals,$val=""){ + $val=preg_replace("{.}","*",$val); + return ""; +} + +function _edit_num($id,$key,$def_vals,$val=""){ + $val=(int)($val); + return ""; +} + +function _edit_bool($id,$key,$def_vals,$val=""){ + $ret="${val}"; +} + +function _edit_enum($id,$key,$def_vals,$val=""){ + $ret="