use mailparse
darcs-hash:20080719142058-84dde-60908b20612ee8965015b96d7e279de28cd9b112.gz
This commit is contained in:
parent
53f59ca9d2
commit
1d7450ca16
@ -42,26 +42,47 @@ class MailerDaemon {
|
|||||||
$this->error(NULL, _t('Could not parse message.'));
|
$this->error(NULL, _t('Could not parse message.'));
|
||||||
}
|
}
|
||||||
common_log(LOG_INFO, "Mail from $from to $to: " .substr($msg, 0, 20));
|
common_log(LOG_INFO, "Mail from $from to $to: " .substr($msg, 0, 20));
|
||||||
$user = User::staticGet('email', common_canonical_email($from));
|
$user = $this->user_from($from);
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
$this->error($from, _('Not a registered user.'));
|
$this->error($from, _('Not a registered user.'));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if ($user->incomingemail != common_canonical_email($to)) {
|
if (!$this->user_match_to($user, $to)) {
|
||||||
$this->error($from, _('Sorry, that is not your incoming email address.'));
|
$this->error($from, _('Sorry, that is not your incoming email address.'));
|
||||||
}
|
}
|
||||||
$response = $this->handle_command($user, $msg);
|
$response = $this->handle_command($user, $msg);
|
||||||
if ($response) {
|
if ($response) {
|
||||||
$this->respond($from, $to, $response);
|
$this->respond($from, $to, $response);
|
||||||
}
|
}
|
||||||
|
$msg = $this->cleanup_msg($msg);
|
||||||
$this->add_notice($user, $msg);
|
$this->add_notice($user, $msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
function error($from, $msg) {
|
function error($from, $msg) {
|
||||||
file_put_contents("php://stderr", $msg);
|
file_put_contents("php://stderr", $msg . "\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function user_from($from_hdr) {
|
||||||
|
$froms = mailparse_rfc822_parse_addresses($from_hdr);
|
||||||
|
if (!$froms) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
$from = $froms[0];
|
||||||
|
return User::staticGet('email', common_canonical_email($from['address']));
|
||||||
|
}
|
||||||
|
|
||||||
|
function user_match_to($user, $to_hdr) {
|
||||||
|
$incoming = $user->incomingemail;
|
||||||
|
$tos = mailparse_rfc822_parse_addresses($to_hdr);
|
||||||
|
foreach ($tos as $to) {
|
||||||
|
if (strcasecmp($incoming, $to['address']) == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
function handle_command($user, $msg) {
|
function handle_command($user, $msg) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -122,7 +143,9 @@ class MailerDaemon {
|
|||||||
if (!$parsed) {
|
if (!$parsed) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
$from = $parsed->headers['from'];
|
$from = $parsed->headers['from'];
|
||||||
|
|
||||||
$to = $parsed->headers['to'];
|
$to = $parsed->headers['to'];
|
||||||
|
|
||||||
$type = $parsed->ctype_primary . '/' . $parsed->ctype_secondary;
|
$type = $parsed->ctype_primary . '/' . $parsed->ctype_secondary;
|
||||||
@ -147,6 +170,13 @@ class MailerDaemon {
|
|||||||
function unsupported_type($type) {
|
function unsupported_type($type) {
|
||||||
$this->error(NULL, "Unsupported message type: " . $type);
|
$this->error(NULL, "Unsupported message type: " . $type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function cleanup_msg($msg) {
|
||||||
|
# XXX: signatures
|
||||||
|
# XXX: quoting
|
||||||
|
preg_replace('/\s+/', ' ', $msg);
|
||||||
|
return $msg;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$md = new MailerDaemon();
|
$md = new MailerDaemon();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user