diff options
author | Christoph Wurst <ChristophWurst@users.noreply.github.com> | 2019-01-31 10:54:46 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-31 10:54:46 +0300 |
commit | d57afb3e54d293f7b4ec908324cb6e29c476cff4 (patch) | |
tree | aab4ef90e1944b3d55def5a1d9d5df4ae11a37c4 | |
parent | d34b7e594becd98e95219efcc826e91c7b49d7fa (diff) | |
parent | 13eb255277409812fd5c40ea0e01d5ea8b63d09c (diff) |
Merge pull request #13930 from nextcloud/backport/12636/stable15
[stable15] handle mail send error gracefully
-rw-r--r-- | lib/private/Share20/Manager.php | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php index e76269f9d86..b04f1acbd87 100644 --- a/lib/private/Share20/Manager.php +++ b/lib/private/Share20/Manager.php @@ -692,15 +692,15 @@ class Manager implements IManager { $emailAddress, $share->getExpirationDate() ); - $this->logger->debug('Send share notification to ' . $emailAddress . ' for share with ID ' . $share->getId(), ['app' => 'share']); + $this->logger->debug('Sent share notification to ' . $emailAddress . ' for share with ID ' . $share->getId(), ['app' => 'share']); } else { - $this->logger->debug('Share notification not send to ' . $share->getSharedWith() . ' because email address is not set.', ['app' => 'share']); + $this->logger->debug('Share notification not sent to ' . $share->getSharedWith() . ' because email address is not set.', ['app' => 'share']); } } else { - $this->logger->debug('Share notification not send to ' . $share->getSharedWith() . ' because user could not be found.', ['app' => 'share']); + $this->logger->debug('Share notification not sent to ' . $share->getSharedWith() . ' because user could not be found.', ['app' => 'share']); } } else { - $this->logger->debug('Share notification not send because mailsend is false.', ['app' => 'share']); + $this->logger->debug('Share notification not sent because mailsend is false.', ['app' => 'share']); } } @@ -708,13 +708,16 @@ class Manager implements IManager { } /** + * Send mail notifications + * + * This method will catch and log mail transmission errors + * * @param IL10N $l Language of the recipient * @param string $filename file/folder name * @param string $link link to the file/folder * @param string $initiator user ID of share sender * @param string $shareWith email address of share receiver * @param \DateTime|null $expiration - * @throws \Exception If mail couldn't be sent */ protected function sendMailNotification(IL10N $l, $filename, @@ -773,7 +776,15 @@ class Manager implements IManager { } $message->useTemplate($emailTemplate); - $this->mailer->send($message); + try { + $failedRecipients = $this->mailer->send($message); + if(!empty($failedRecipients)) { + $this->logger->error('Share notification mail could not be sent to: ' . implode(', ', $failedRecipients)); + return; + } + } catch (\Exception $e) { + $this->logger->logException($e, ['message' => 'Share notification mail could not be sent']); + } } /** |