+ $thisone = $i;
+ }
+ $allinactive &= !$mail->active || $mail->email == $email;
+ }
+ if ($thisone === false) {
+ return ERROR_INVALID_EMAIL;
+ }
+ if ($allinactive || $activate) {
+ $this->emails[$thisone]->activate($this->uid);
+ } else {
+ $this->emails[$thisone]->deactivate($this->uid);
+ }
+ check_redirect($this);
+ if ($allinactive && !$activate) {
+ return ERROR_INACTIVE_REDIRECTION;
+ } else {
+ return SUCCESS;
+ }
+ }
+
+ function modify_one_email_redirect($email, $redirect) {
+ foreach ($this->emails as $i=>$mail) {
+ if ($mail->email == $email) {
+ $this->emails[$i]->rewrite($redirect, $this->uid);
+ check_redirect($this);
+ return;
+ }
+ }
+ }
+ // }}}
+ // {{{ function get_broken_mx()
+
+ function get_broken_mx()
+ {
+ $res = XDB::query("SELECT host, text
+ FROM mx_watch
+ WHERE state != 'ok'");
+ if (!$res->numRows()) {
+ return array();
+ }
+ $mxs = $res->fetchAllAssoc();
+ $mails = array();
+ foreach ($this->emails as &$mail) {
+ if ($mail->active) {
+ list(,$domain) = explode('@', $mail->email);
+ getmxrr($domain, $lcl_mxs);
+ if (empty($lcl_mxs)) {
+ $lcl_mxs = array($domain);
+ }
+ $broken = false;
+ foreach ($mxs as &$mx) {
+ foreach ($lcl_mxs as $lcl) {
+ if (fnmatch($mx['host'], $lcl)) {
+ $broken = $mx['text'];
+ break;
+ }
+ }
+ if ($broken) {
+ $mails[] = array('mail' => $mail->email, 'text' => $broken);
+ }
+ }