<?php
-
-ini_set('display_errors', 1);
-ini_set('display_startup_errors', 1);
-error_reporting(E_ALL);
-
/**
* Name: PHP Mailer SMTP
* Description: Connects to a SMTP server based on the config
- * Version: 0.1
- * Author: Marcus Mueller <http://mat.exon.name>
+ * Version: 0.2
+ * Author: Marcus Mueller
+ * Maintainer: Hypolite Petovan <hypolite@friendica.mrpetovan.com>
*/
use Friendica\App;
-use Friendica\Core\Addon;
+use Friendica\Core\Hook;
+use Friendica\DI;
+use Friendica\Object\EMail\IEmail;
+use Friendica\Util\ConfigFileLoader;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
-function phpmailer_install()
-{
- Addon::registerHook(
- 'emailer_send_prepare',
- 'addon/phpmailer/phpmailer.php',
- 'phpmailer_emailer_send_prepare'
- );
-}
+require_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
-function phpmailer_uninstall()
+function phpmailer_install()
{
- Addon::unregisterHook(
- 'emailer_send_prepare',
- 'addon/phpmailer/phpmailer.php',
- 'phpmailer_emailer_send_prepare'
- );
+ Hook::register('load_config' , __FILE__, 'phpmailer_load_config');
+ Hook::register('emailer_send_prepare', __FILE__, 'phpmailer_emailer_send_prepare');
}
-function phpmailer_module()
+function phpmailer_load_config(App $a, ConfigFileLoader $loader)
{
+ $a->getConfigCache()->load($loader->loadAddonConfig('phpmailer'));
}
/**
* @param App $a
- * @param array $b
+ * @param IEmail $email
*/
-function phpmailer_emailer_send_prepare(App $a, array &$b)
+function phpmailer_emailer_send_prepare(App $a, IEmail &$email)
{
- require_once __DIR__ . '/phpmailer/src/PHPMailer.php';
- require_once __DIR__ . '/phpmailer/src/SMTP.php';
- require_once __DIR__ . '/phpmailer/src/Exception.php';
-
// Passing `true` enables exceptions
- $mail = new PHPMailer(true);
+ $mailer = new PHPMailer(true);
try {
- if (!empty($a->config['system']['smtp']) && (bool)$a->config['system']['smtp'] === true) {
+ if (DI::config()->get('phpmailer', 'smtp')) {
// Set mailer to use SMTP
- $mail->isSMTP();
- /*
- // Enable verbose debug output
- $mail->SMTPDebug = 2;
- */
+ $mailer->isSMTP();
+
+ // Setup encoding.
+ $mailer->CharSet = 'UTF-8';
+ $mailer->Encoding = 'base64';
+
// Specify main and backup SMTP servers
- $mail->Host = $a->config['system']['smtp_server'];
- $mail->Port = $a->config['system']['smtp_port'];
+ $mailer->Host = DI::config()->get('phpmailer', 'smtp_server');
+ $mailer->Port = DI::config()->get('phpmailer', 'smtp_port');
- /*
- if (!empty($a->config['system']['smtp_secure']) && (bool)$a->config['system']['smtp_secure'] !== '') {
- $mail->SMTPSecure = $a->config['system']['smtp_secure'];
- $mail->Port = $a->config['system']['smtp_port_s'];
+ if (DI::config()->get('system', 'smtp_secure') && DI::config()->get('phpmailer', 'smtp_port_s')) {
+ $mailer->SMTPSecure = DI::config()->get('phpmailer', 'smtp_secure');
+ $mailer->Port = DI::config()->get('phpmailer', 'smtp_port_s');
}
- */
- if (!empty($a->config['system']['smtp_username']) && !empty($a->config['system']['smtp_password'])) {
- $mail->SMTPAuth = true;
- $mail->Username = $a->config['system']['smtp_username'];
- $mail->Password = $a->config['system']['smtp_password'];
+ if (DI::config()->get('phpmailer', 'smtp_username') && DI::config()->get('phpmailer', 'smtp_password')) {
+ $mailer->SMTPAuth = true;
+ $mailer->Username = DI::config()->get('phpmailer', 'smtp_username');
+ $mailer->Password = DI::config()->get('phpmailer', 'smtp_password');
}
- if (!empty($a->config['system']['smtp_from']) && !empty($a->config['system']['smtp_domain'])) {
- $mail->setFrom($a->config['system']['smtp_from'], $a->config['sitename']);
+ if (DI::config()->get('phpmailer', 'smtp_from')) {
+ $mailer->setFrom(DI::config()->get('phpmailer', 'smtp_from'), $email->getFromName());
}
+ } else {
+ $mailer->setFrom($email->getFromAddress(), $email->getFromName());
}
// subject
- $mail->Subject = $b['messageSubject'];
+ $mailer->Subject = $email->getSubject();
- // add text
- $mail->AltBody = $b['textVersion'];
+ if (!empty($email->getToAddress())) {
+ $mailer->addAddress($email->getToAddress());
+ }
// html version
- if (!empty($b['htmlVersion'])) {
- $mail->isHTML(true);
- $mail->Body = $b['htmlVersion'];
+ if (!empty($email->getMessage())) {
+ $mailer->isHTML(true);
+ $mailer->Body = $email->getMessage();
+ $mailer->AltBody = $email->getMessage(true);
+ } else {
+ // add text
+ $mailer->Body = $email->getMessage(true);
+ }
+
+ if (!empty($email->getReplyTo())) {
+ $mailer->addReplyTo($email->getReplyTo(), $email->getFromName());
}
- /*
// additional headers
- if (!empty($b['additionalMailHeader'])) {
- $mail->addCustomHeader($b['additionalMailHeader']);
+ if (!empty($email->getAdditionalMailHeader())) {
+ foreach ($email->getAdditionalMailHeader() as $name => $values) {
+ // Set the "Message-ID" header for PHP-Mailer directly
+ if (strtolower($name) === 'message-id') {
+ // implode all values to one entry, because there's only one value possible
+ $mailer->MessageID = trim(implode("", $values));
+ } else {
+ $mailer->addCustomHeader(trim($name), trim(implode("\n", $values)));
+ }
+ }
}
- */
- $mail->send();
+ if ($mailer->send()) {
+ $email = null;
+ }
} catch (Exception $e) {
- echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
- die();
+ DI::logger()->error('PHPMailer error', ['email' => $email, 'ErrorInfo' => $mailer->ErrorInfo, 'exception' => $e]);
}
}