From 4e207ef7868f6b92dc72251d9b1178454c6fe01a Mon Sep 17 00:00:00 2001
From: Hypolite Petovan <hypolite@mrpetovan.com>
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 858d64355..47d16085a 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 6a19e8e45..4310046c2 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'],