Sorry for the dumb question prior to actually inspecting the code -- I see that the system is configured so that it's supposed to do this! However, it does not work when using an external auth (in my case, IMAP).
The problem is that the 'email' field of the oc_accounts table is not populated, nor can it be set by the user. Additionally, a success message is displayed if the user attempts to change the email address, even though it does not take effect, due to an error in unchecked return types. I've attached a patch that fixes the lack of an error message, but not one that addresses the underlying problem as I don't understand the system architecture well. It appears that the reason setting the address fails is because the user is not given permissions to edit their account (by the GroupManager object) when the backend is IMAP. I'm not sure the right way to go about fixing this problem. Regards, --Jered --- UsersController.php 2018/01/28 12:15:31 1.1 +++ UsersController.php 2018/01/28 12:59:22 @@ -35,7 +35,6 @@ use OCP\App\IAppManager; use OCP\AppFramework\Controller; use OCP\AppFramework\Http\DataResponse; -use OCP\AppFramework\Http\JSONResponse; use OCP\AppFramework\Http\RedirectResponse; use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Utility\ITimeFactory; @@ -600,21 +599,21 @@ ); } - // admins can set email without verification - if ($mailAddress === '' || $this->isAdmin) { - $this->setEmailAddress($userId, $mailAddress); - return new DataResponse( - [ - 'status' => 'success', - 'data' => [ - 'message' => (string)$this->l10n->t('Email has been changed successfully.') - ] - ], - Http::STATUS_OK - ); - } - try { + // admins can set email without verification + if ($mailAddress === '' || $this->isAdmin) { + $this->setEmailAddress($userId, $mailAddress); + return new DataResponse( + [ + 'status' => 'success', + 'data' => [ + 'message' => (string)$this->l10n->t('Email has been changed successfully.') + ] + ], + Http::STATUS_OK + ); + } + if ($this->sendEmail($userId, $mailAddress)) { return new DataResponse( [ @@ -794,6 +793,7 @@ * * @param string $id * @param string $mailAddress + * @throws \Exception */ public function setEmailAddress($id, $mailAddress) { $user = $this->userManager->get($id); @@ -805,10 +805,9 @@ $this->config->deleteUserValue($id, 'owncloud', 'changeMail'); } } else { - return new JSONResponse([ - 'error' => 'cannotSetEmailAddress', - 'message' => 'Cannot set email address for user' - ], HTTP::STATUS_NOT_FOUND); + throw new \Exception($this->l10n->t( + 'Cannot set email address for user.' + )); } } @@ -843,7 +842,12 @@ $splittedToken = explode(':', $this->config->getUserValue($userId, 'owncloud', 'changeMail', null)); $mailAddress = $splittedToken[2]; - $this->setEmailAddress($userId, $mailAddress); + try { + $this->setEmailAddress($userId, $mailAddress); + } catch (\Exception $e) { + $this->log->error($e->getMessage(), ['app' => 'settings']); + return new RedirectResponse($this->urlGenerator->linkToRoute('settings.SettingsPage.getPersonal', ['changestatus' => 'error'])); + } if ($oldEmailAddress !== null && $oldEmailAddress !== '') { $tmpl = new \OC_Template('settings', 'changemail/notify'); ----- On Jan 26, 2018, at 2:53 PM, Jered Floyd <je...@convivian.com> wrote: OwnCloud Community, Is there any way to configure OwnCloud to send the email notifications of external shares with a "From:" address of the sharing user, rather than an owncloud administrative address? Or, at least, a "Reply-To"? I get constant replies from outside users meaning to reply to the sharing user. Thanks, --Jered _______________________________________________ User mailing list User@owncloud.org http://mailman.owncloud.org/mailman/listinfo/user
_______________________________________________ User mailing list User@owncloud.org http://mailman.owncloud.org/mailman/listinfo/user