From 4e207ef7868f6b92dc72251d9b1178454c6fe01a Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 25 May 2019 23:45:10 -0400 Subject: [PATCH] Enable addon using emailer hooks to skip default call to mail() --- doc/Addons.md | 2 ++ src/Util/Emailer.php | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/doc/Addons.md b/doc/Addons.md index 858d64355f..47d16085a1 100644 --- a/doc/Addons.md +++ b/doc/Addons.md @@ -358,6 +358,7 @@ Called from `Emailer::send()` before building the mime message. - **htmlVersion**: html version of the message - **textVersion**: text only version of the message - **additionalMailHeader**: additions to the smtp mail header +- **sent**: default false, if set to true in the hook, the default mailer will be skipped. ### emailer_send Called before calling PHP's `mail()`. @@ -367,6 +368,7 @@ Called before calling PHP's `mail()`. - **subject** - **body** - **headers** +- **sent**: default false, if set to true in the hook, the default mailer will be skipped. ### load_config Called during `App` initialization to allow addons to load their own configuration file(s) with `App::loadConfigFile()`. diff --git a/src/Util/Emailer.php b/src/Util/Emailer.php index 6a19e8e458..4310046c23 100644 --- a/src/Util/Emailer.php +++ b/src/Util/Emailer.php @@ -32,10 +32,16 @@ class Emailer * @return bool * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function send($params) + public static function send(array $params) { + $params['sent'] = false; + Hook::callAll('emailer_send_prepare', $params); + if ($params['sent']) { + return true; + } + $email_textonly = false; if (!empty($params['uid'])) { $email_textonly = PConfig::get($params['uid'], "system", "email_textonly"); @@ -87,11 +93,16 @@ class Emailer 'subject' => $messageSubject, 'body' => $multipartMessageBody, 'headers' => $messageHeader, - 'parameters' => $sendmail_params + 'parameters' => $sendmail_params, + 'sent' => false, ]; Hook::callAll("emailer_send", $hookdata); + if ($hookdata['sent']) { + return true; + } + $res = mail( $hookdata['to'], $hookdata['subject'],