* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
***************************************************************************/
+/* Number of consecutive month of bounce before deactivating a redirection
+ */
+$panne_level = 3;
+
require('./connect.db.inc.php');
+/*
+ * Check duplicated addresses
+ */
$sql = "SELECT a1.alias, a2.alias, e1.email
FROM emails AS e1
INNER JOIN emails AS e2 ON (e1.email = e2.email AND e1.uid != e2.uid
}
}
+/*
+ * Check dead emails
+ */
+if ($panne_level > 0) {
+ $sql = "SELECT e.email, a.alias AS forlife
+ FROM emails AS e
+ INNER JOIN aliases AS a ON a.id = e.uid AND a.type = 'a_vie'
+ WHERE e.panne_level = $panne_level AND e.flags = 'active'
+ ORDER BY a.alias";
+ $res = Xdb::query($sql);
+
+ if ($res->numRows()) {
+ $result = $res->fetchAllAssoc();
+ echo "Nouvelles adresses en panne détectées :\n";
+ foreach ($result as $assoc) {
+ echo '* ' . $assoc['email'] . ' pour ' . $assoc['forlife'] . "\n";
+ }
+ echo "\n\n";
+ Xdb::execute("UPDATE emails
+ SET flags = 'panne'
+ WHERE panne_level = 3 AND flags = 'active'");
+ }
+
+ Xdb::execute("UPDATE emails
+ SET panne_level = $panne_level
+ WHERE panne_level > $panne_level");
+}
?>
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
***************************************************************************/
-ini_set('include_path', '../include:/usr/share/php');
-
-require_once('../include/xorg.inc.php');
-require_once('../include/emails.inc.php');
+ini_set('include_path', '.:../include:/usr/share/php');
+
+require_once('connect.db.inc.php');
+require_once('xorg.inc.php');
+require_once('emails.inc.php');
$opts = getopt('i:o:');
if (($opts['i'] && $opts['i'] == '-') || empty($opts['i'])) {
$emails = explode("\n", file_get_contents($file));
$list = array();
+
foreach ($emails as $_email) {
$email = valide_email($_email);
if (empty($email) || $email=='@') {
GROUP BY e1.uid", $email);
if ($x = $sel->fetchOneAssoc()) {
if (!$x['panne']) {
- XDB::execute("UPDATE emails SET panne=NOW() WHERE email = {?}", $email);
+ XDB::execute("UPDATE emails
+ SET panne=NOW(), last=NOW()
+ panne_level = 1
+ WHERE email = {?}",
+ $email);
+ } else {
+ XDB::execute("UPDATE emails
+ SET last = CURDATE(),
+ panne_level = panne_level + 1
+ WHERE email = {?}
+ AND DATE_ADD(last, INTERVAL 15 DAY) < CURDATE()", $email);
}
if (empty($x['nb_mails'])) {
}
}
+XDB::execute("UPDATE emails
+ SET panne_level = panne_level - 1
+ WHERE flags = 'active' AND panne_level > 1
+ AND last != CURDATE()");
+
$csv = "nom;prenom;promo;alias;bounce;nbmails\n";
foreach ($list as $alias=>$mails) {
$sel = Xdb::query(
var $email;
var $active;
+ var $broken;
var $rewrite;
var $panne;
+ var $last;
// }}}
// {{{ constructor
function Email($row)
{
- list($this->email, $this->active, $this->rewrite, $this->panne) = $row;
+ list($this->email, $flags, $this->rewrite, $this->panne, $this->last) = $row;
+ $this->active = ($flags == 'active');
+ $this->broken = ($flags == 'panne');
}
// }}}
function activate($uid)
{
if (!$this->active) {
- XDB::execute("UPDATE emails SET flags = 'active'
- WHERE uid={?} AND email={?}", $uid, $this->email);
+ XDB::execute("UPDATE emails
+ SET panne_level = IF(flags = 'panne', panne_level - 1, panne_level),
+ flags = 'active'
+ WHERE uid={?} AND email={?}", $uid, $this->email);
$_SESSION['log']->log("email_on", $this->email.($uid!=S::v('uid') ? "(admin on $uid)" : ""));
$this->active = true;
+ $this->broken = false;
}
}
{
$this->uid=$_uid;
$res = XDB::iterRow("
- SELECT email, flags='active', rewrite, panne
+ SELECT email, flags, rewrite, panne, last
FROM emails WHERE uid = {?} AND flags != 'filter'", $_uid);
$this->emails=Array();
while ($row = $res->next()) {
{if $mail->active}active{/if}
</td>
<td>
- <span class="smaller"><a href="javascript:act_fwd('{$mail->email}',{if $mail->active}false{else}true{/if})">{if $mail->active}des{/if}activer</a></span>
+ <span class="smaller"><a href="javascript:act_fwd('{$mail->email}',{if $mail->active}false{else}true{/if})">{if $mail->active}des{elseif $mail->broken}ré{/if}activer</a></span>
</td>
<td>
+ {if $mail->broken}<span style="color: #f00">{/if}
{$mail->email}
+ {if $mail->broken}<em> (en panne)</em></span>{/if}
</td>
<td class="action">
<a href="javascript:del_fwd('{$mail->email}')">delete</a>
</tr>
<tr class="impair">
<td>
+ {if $mails->total() eq 0}
+ <p class="erreur">
+ Tu n'as actuellement aucune adressse de redirection. Tout courrier électronique qui t'es adresses
+ ci-dessus génère une erreur. Modifie au plus vite ta liste de redirection.<br/>
+ </p>
+ {else}
Actuellement, tout courrier électronique qui t'y est adressé, est envoyé
{if $mails->total() eq 1} à l'adresse {else} aux adresses {/if}
<ul>
<li><strong>{$m.email}</strong></li>
{/iterate}
</ul>
+ {/if}
Si tu souhaites <strong>modifier ce reroutage de ton courrier,</strong>
<a href="emails/redirect">il te suffit de te rendre ici !</a>
</td>
</tr>
{foreach from=$emails item=e}
<tr class="{cycle values="pair,impair"}">
- <td><strong>{$e->email}</strong></td>
+ <td>
+ <strong>
+ {if $e->broken}<span class="erreur">{/if}
+ {$e->email}
+ {if $e->broken}{icon name=error title="En panne"}</span>{/if}
+ </strong>
+ </td>
<td>
<input type="checkbox" name="emails_actifs[]" value="{$e->email}" {if $e->active}checked="checked"{/if} /></td>
<td>
<input type="submit" value="Valider les modifications" name="emailop" />
</div>
</form>
+<p class="smaller">
+ Les adresses marquées {icon name=error title="En panne"} sont des adresses qui sont considérées comme étant en panne
+ depuis plusieurs mois. Si tu penses qu'il s'agit d'une erreur, tu peux la réactiver. Si une nouvelle panne était détectée
+ sur cette adresse, elle serait immédiatement redésactivée.
+</p>
<h1>Pour les Élèves (non encore diplômés)</h1>
<p>
--- /dev/null
+alter table emails add column panne_level tinyint(1) not null default 0 after panne;
+alter table emails change flags flags enum('active', 'filter', 'panne') not null default 'active';
+UPDATE emails SET last = panne WHERE last = 0 AND panne != 0;
+UPDATE emails
+ SET panne_level = 1
+ WHERE flags = 'active'
+ AND DATE_ADD(panne, INTERVAL 2 MONTH) > CURDATE();
+