2014-09-16 23:53:49 -05:00
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
|
|
<title></title>
|
2014-09-17 00:47:00 -05:00
|
|
|
<link href="../css/markdown.css" rel="stylesheet"></head>
|
2014-09-16 23:53:49 -05:00
|
|
|
</head>
|
|
|
|
|
|
|
|
<body>
|
|
|
|
<h1 id="how-to-pipe-incoming-email-for-certain-user-to-external-script">How to pipe incoming email for certain user to external script</h1>
|
|
|
|
<p>This tutorial explains how to pipe incoming email for certain user to external script.</p>
|
|
|
|
<h2 id="configure-postfix-to-use-your-external-script-as-transport">Configure Postfix to use your external script as transport</h2>
|
|
|
|
<p>To pipe incoming emails to external script, you must add your external script
|
|
|
|
as Postfix transport program. Please add below line at the bottom of Postfix
|
|
|
|
config file <code>/etc/postfix/master.cf</code>:</p>
|
|
|
|
<pre><code>external-pipe unix - n n - - pipe
|
|
|
|
flags= user=vmail:vmail argv=/path/to/your/external/script.sh
|
|
|
|
</code></pre>
|
|
|
|
|
|
|
|
<p><strong>Note</strong>:</p>
|
|
|
|
<ul>
|
|
|
|
<li>You can use some macros to replace with corresponding information from the
|
|
|
|
Postfix queue manager delivery request. Refer to Postfix manual page for more
|
|
|
|
detail: ()[http://www.postfix.org/pipe.8.html]. For example:</li>
|
|
|
|
</ul>
|
|
|
|
<pre><code>external-pipe unix - n n - - pipe
|
|
|
|
flags=DRhu user=vmail:vmail argv=/path/to/your/external/script.sh -f ${sender} -d ${user}@${domain} -m ${extension}
|
|
|
|
</code></pre>
|
|
|
|
|
|
|
|
<ul>
|
|
|
|
<li>the second line needs to be right under the first line and must start with
|
|
|
|
one (or more) whitespace, and the first line cannot start with whitespace,
|
|
|
|
otherwise postfix will fail with <code>unexpected command-line argument</code> errors.
|
|
|
|
Also make sure the <code>user=</code> line is pointing to a valid user with permissions
|
|
|
|
to execute the script. This user must not be the postfix or root user, otherwise
|
|
|
|
or the pipe will fail.</li>
|
|
|
|
</ul>
|
|
|
|
<p>Now restart Postfix service to make this new transport available:</p>
|
|
|
|
<pre><code># /etc/init.d/postfix restart
|
|
|
|
</code></pre>
|
|
|
|
|
|
|
|
<h2 id="update-per-user-transport-to-use-this-new-transport">Update per-user transport to use this new transport</h2>
|
|
|
|
<p>We need to update per-user transport setting, so that all emails delivered to
|
|
|
|
this user will be piped to this new transport - your script.</p>
|
|
|
|
<ul>
|
|
|
|
<li>
|
|
|
|
<p>If you have iRedAdmin-Pro:</p>
|
|
|
|
<ul>
|
|
|
|
<li>
|
|
|
|
<p>For iRedAdmin-Pro-LDAP installed, please go to user profile page, under
|
|
|
|
tab <code>Advanced</code>, set <code>Relay/Transport setting</code> to <code>external-pipe</code>. Screenshot for
|
|
|
|
your reference: ()[http://www.iredmail.org/images/iredadmin/user_profile_relay.png]</p>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<p>For iRedAdmin-Pro-MySQL or iRedAdmin-Pro-PGSQL installed, please go
|
|
|
|
to user profile page, under tab <code>Relay</code>, set <code>/Transport setting</code> to
|
|
|
|
<code>external-pipe</code>.</p>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<p>If you don't have iRedAdmin-Pro, please update LDAP/MySQL/PgSQL database to
|
|
|
|
use this new transport.</p>
|
|
|
|
<ul>
|
|
|
|
<li>
|
|
|
|
<p>For OpenLDAP backend, please login to phpLDAPadmin, add new attribute
|
|
|
|
<code>mtaTransport</code> for your user, set its value to <code>external-pipe</code>.</p>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<p>For MySQL/PostgreSQL backend, please execute below command with SQL
|
|
|
|
command line tool (Replace 'user@domain.ltd' by the real email address):</p>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
<pre><code class="mysql">sql> USE vmail;
|
|
|
|
sql> UPDATE mailbox SET transport='external-pipe' WHERE username='user@domain.ltd';
|
|
|
|
</code></pre>
|
|
|
|
|
|
|
|
<p>That's all.</p></body></html>
|