[cvs] [Wiki] created: SorkVacationWithVpopmail

Wiki Guest wikiguest at horde.org
Fri Jun 22 12:43:56 UTC 2007


guest [64.243.213.210]  Fri, 22 Jun 2007 05:43:56 -0700

Created page: http://wiki.horde.org/SorkVacationWithVpopmail

The software used is:

MTA: qmail/vpopmail with MySQL backend - all domains loaded in
vpopmail.vpopmail table
vacation program: Autorespond
Horde version: 3.1.3
vacation version: 3.0

These changes will make sork vacations compatible with qmailadmin vacation
changes.  So you can modify your
vacation message from either location.

Like the original Qmail Driver, It still uses ftp to put the data into the
user's 'home' directory.
Personally, I use Pureftp it will do SQL auths and grab the home dir from
SQL, you can also specify a uid (89
is usually vpopmail), and set the users chroot.   All your users will have
ftp access to their Maildir with
the own vpopmail username/password.   I would suggest only binding Pureftp
to 127.0.0.1 if you don't want your
users to do that externally.

First, get the vpopmailsql.php Driver, place into vacation/lib/Driver/
directory.
This file will do all the heavy lifting, but you will need to make a couple
changes to it.
Change the vpopmail/vpoppass to be your Vpopmail MySQL username password. 
Ultimately this driver should include
the code from sql.php driver to connect to the database, and your
username/password will be in the config.php
<code>
 <snip>
  if (!empty($alias)) {
            $alias = $this->_makeEmailAddress($alias, $realm);
            if ($alias === false) {
                return false;
            }
        }

        $link = mysql_connect('localhost', 'vpopmail', 'vpoppass');
        if (!$link) {
                die('Could not connect: ' . mysql_error());
        }
  </snip>
</code>

Next, add the following to conf.php:
<code>
$conf['server']['params']['default']['table'] = 'vpopmail.vpopmail';
$conf['server']['params']['default']['path_col'] = 'pw_dir';
$conf['server']['params']['default']['user_col'] = 'pw_name';
$conf['server']['params']['default']['domain_col'] = 'pw_domain';
$conf['vacation']['path'] = '/usr/local/bin/autorespond';
</code>

Make sure your autorespond is actually in the path.

Finally, main.php needs to be modified to work with the vacation message
format that autorespond uses.
An autorespond vacation message looks like:
From: email at home.com <newline>
Subject: Vacation <newline>
<newline>
Text
<newline>

Finally, apply the following diff to main.php v1.55.  This will fix the
display of the existing vacation notice,
and properly submit a new one.

<code>
--- main.php    Thu May 31 09:32:42 2007
+++ mainold.php Fri Jun 22 07:42:45 2007
@@ -70,11 +70,10 @@
             }
         }
         $vacationmsg = Util::getFormData('mess', false);
+
         // Include the mail subject if the driver supports it.
-        $my_email = Auth::getAuth();
-       if ($conf['vacation']['subject']) {
-            $vacationtxt = 'From: ' . $my_email . "\n";
-            $vacationtxt .= 'Subject: ' . Util::getFormData('subject') .
"\n\n" . $vacationmsg;
+        if ($conf['vacation']['subject']) {
+            $vacationtxt = 'Subject: ' . Util::getFormData('subject') .
"\n" . $vacationmsg;
         } else {
             $vacationtxt = $vacationmsg;
         }
@@ -124,11 +123,11 @@
 $onVacation = false;
 if ($status == 'Y') {
     $curmessage = $driver->currentMessage($user, $realm, $pass);
-    $notification->push(_("Your vacation notice is currently enabled."),
'horde.success');
+    $notification->push(_("Your vacation notice is currently enabled."),
'horde.message');
     $onVacation = true;
 } elseif ($status == 'N') {
     $curmessage = $driver->currentMessage($user, $realm, $pass);
-    $notification->push(_("Your vacation notice is currently disabled."),
'horde.warning');
+    $notification->push(_("Your vacation notice is currently disabled."),
'horde.message');
 } else {
     // If the driver can't tell the difference between "disabled" and
     // "unknown", be inscrutable.
@@ -142,19 +141,11 @@
     if (preg_match('/^Subject: ([^\n]+)\n(.+)$/s', $curmessage, $matches))
{
         $cursubject = $matches[1];
         $curmessage = $matches[2];
-
     } else {
         $cursubject = '';
     }
 }

-if ($cursubject == ""){
-    if (empty($cursubject)){
-        list($curFrom,$cursubject,$curmessage)=split("[\n]",$curmessage,3);
-    }
-    list($subheader,$cursubject)=split(":",$cursubject,2);
-}
-
 $alias = Util::getFormData('alias');
 if (is_null($alias)) {
     $aliases = &Vacation_AliasDriver::singleton();

</code>





More information about the cvs mailing list