email settings for post by email

darcs-hash:20080719202625-84dde-52b3d6710302f55e35ef57ea0aa4aff07cbeafaa.gz
This commit is contained in:
Evan Prodromou 2008-07-19 16:26:25 -04:00
parent 1d7450ca16
commit 594811350c
6 changed files with 112 additions and 14 deletions

View File

@ -63,14 +63,36 @@ class EmailsettingsAction extends SettingsAction {
} }
} }
common_element('h2', NULL, _('Preferences')); if ($user->email) {
common_element('h2', NULL, _('Incoming email'));
common_checkbox('emailnotifysub',
_('Send me notices of new subscriptions through email.'), if ($user->incomingemail) {
$user->emailnotifysub); common_element_start('p');
common_element('span', 'address', $user->incomingemail);
common_element('span', 'input_instructions',
_('Send email to this address to post new notices.'));
common_element_end('p');
common_submit('removeincoming', _('Remove'));
}
common_element_start('p');
common_element('span', 'input_instructions',
_('Make a new email address for posting to; cancels the old one.'));
common_element_end('p');
common_submit('newincoming', _('New'));
}
common_element('h2', NULL, _('Preferences'));
common_checkbox('emailnotifysub',
_('Send me notices of new subscriptions through email.'),
$user->emailnotifysub);
common_checkbox('emailpost',
_('I want to post notices by email.'),
$user->emailpost);
common_submit('save', _('Save')); common_submit('save', _('Save'));
common_element_end('form'); common_element_end('form');
common_show_footer(); common_show_footer();
} }
@ -97,6 +119,10 @@ class EmailsettingsAction extends SettingsAction {
$this->cancel_confirmation(); $this->cancel_confirmation();
} else if ($this->arg('remove')) { } else if ($this->arg('remove')) {
$this->remove_address(); $this->remove_address();
} else if ($this->arg('removeincoming')) {
$this->remove_incoming();
} else if ($this->arg('newincoming')) {
$this->new_incoming();
} else { } else {
$this->show_form(_('Unexpected form submission.')); $this->show_form(_('Unexpected form submission.'));
} }
@ -228,11 +254,42 @@ class EmailsettingsAction extends SettingsAction {
} }
$user->query('COMMIT'); $user->query('COMMIT');
# XXX: unsubscribe to the old address
$this->show_form(_('The address was removed.'), TRUE); $this->show_form(_('The address was removed.'), TRUE);
} }
function remove_incoming() {
$user = common_current_user();
if (!$user->incomingemail) {
$this->show_form(_('No incoming email address.'));
return;
}
$orig = clone($user);
$user->incomingemail = NULL;
if (!$user->update($orig)) {
common_log_db_error($user, 'UPDATE', __FILE__);
$this->server_error(_("Couldn't update user record."));
}
$this->show_form(_('Incoming email address removed.'), TRUE);
}
function new_incoming() {
$user = common_current_user();
$orig = clone($user);
$user->incomingemail = mail_new_incoming_address();
if (!$user->update($orig)) {
common_log_db_error($user, 'UPDATE', __FILE__);
$this->server_error(_("Couldn't update user record."));
}
$this->show_form(_('New incoming email address added.'), TRUE);
}
function email_exists($email) { function email_exists($email) {
$user = common_current_user(); $user = common_current_user();
$other = User::staticGet('email', $email); $other = User::staticGet('email', $email);

View File

@ -36,6 +36,7 @@ class User extends DB_DataObject
public $email; // varchar(255) unique_key public $email; // varchar(255) unique_key
public $incomingemail; // varchar(255) unique_key public $incomingemail; // varchar(255) unique_key
public $emailnotifysub; // tinyint(1) default_1 public $emailnotifysub; // tinyint(1) default_1
public $emailpost; // tinyint(1) default_1
public $jabber; // varchar(255) unique_key public $jabber; // varchar(255) unique_key
public $jabbernotify; // tinyint(1) public $jabbernotify; // tinyint(1)
public $jabberreplies; // tinyint(1) public $jabberreplies; // tinyint(1)

View File

@ -160,6 +160,7 @@ password = 2
email = 2 email = 2
incomingemail = 2 incomingemail = 2
emailnotifysub = 17 emailnotifysub = 17
emailpost = 17
jabber = 2 jabber = 2
jabbernotify = 17 jabbernotify = 17
jabberreplies = 17 jabberreplies = 17

View File

@ -47,6 +47,7 @@ create table user (
email varchar(255) unique key comment 'email address for password recovery etc.', email varchar(255) unique key comment 'email address for password recovery etc.',
incomingemail varchar(255) unique key comment 'email address for post-by-email', incomingemail varchar(255) unique key comment 'email address for post-by-email',
emailnotifysub tinyint default 1 comment 'Notify by email of subscriptions', emailnotifysub tinyint default 1 comment 'Notify by email of subscriptions',
emailpost tinyint default 1 comment 'Post by email',
jabber varchar(255) unique key comment 'jabber ID for notices', jabber varchar(255) unique key comment 'jabber ID for notices',
jabbernotify tinyint default 0 comment 'whether to send notices to jabber', jabbernotify tinyint default 0 comment 'whether to send notices to jabber',
jabberreplies tinyint default 0 comment 'whether to send notices to jabber on replies', jabberreplies tinyint default 0 comment 'whether to send notices to jabber on replies',

View File

@ -48,13 +48,21 @@ function mail_send($recipients, $headers, $body) {
return true; return true;
} }
function mail_notify_from() { function mail_domain() {
global $config; $maildomain = common_config('mail', 'domain');
if ($config['mail']['notifyfrom']) { if (!$maildomain) {
return $config['mail']['notifyfrom']; $maildomain = common_config('site', 'server');
} else {
return $config['site']['name'] . ' <noreply@'.$config['site']['server'].'>';
} }
return $maildomain;
}
function mail_notify_from() {
$notifyfrom = common_config('mail', 'notifyfrom');
if (!$notifyfrom) {
$domain = mail_domain();
$notifyfrom = common_config('site', 'name') .' <noreply@'.$domain.'>';
}
return $notifyfrom;
} }
function mail_to_user(&$user, $subject, $body, $address=NULL) { function mail_to_user(&$user, $subject, $body, $address=NULL) {
@ -121,3 +129,31 @@ function mail_subscribe_notify($listenee, $listener) {
mail_send($recipients, $headers, $body); mail_send($recipients, $headers, $body);
} }
} }
function mail_new_incoming_notify($user) {
$profile = $user->getProfile();
$name = $profile->getBestName();
$headers['From'] = $user->incomingemail;
$headers['To'] = $name . ' <' . $user->email . '>';
$headers['Subject'] = sprintf(_('New email address for posting to %s'),
common_config('site', 'name'));
$body = sprintf(_("You have a new posting address on %1\$s.\n\n".
"Send email to %2\$s to post new messages.\n\n".
"More email instructions at %3\$s.\n\n".
"Faithfully yours,\n%4\$s"),
common_config('site', 'name'),
$user->incomingemail,
common_local_url('doc', array('title' => 'email')),
common_config('site', 'name'));
mail_send($user->email, $headers, $body);
}
function mail_new_incoming_address() {
$prefix = common_good_rand(8);
$suffix = mail_domain();
return $prefix . '@' . $suffix;
}

View File

@ -50,6 +50,8 @@ class MailerDaemon {
if (!$this->user_match_to($user, $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.'));
} }
if (!$user->emailpost) {
}
$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);