forked from friendica/friendica-addons
		
	[phpmailer] Rework addon
- Remove redundant uninstall function - Add default config file - Add replyTo support - Add custom headers support - Add plain text-only support - Improve error handling
This commit is contained in:
		
					parent
					
						
							
								c228c4523c
							
						
					
				
			
			
				commit
				
					
						c8001ac4c4
					
				
			
		
					 2 changed files with 70 additions and 26 deletions
				
			
		
							
								
								
									
										44
									
								
								phpmailer/config/phpmailer.config.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								phpmailer/config/phpmailer.config.php
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,44 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
// Warning: Don't change this file! It only holds the default config values for this addon.
 | 
			
		||||
// Instead overwrite these config values in config/addon.config.php in your Friendica directory
 | 
			
		||||
 | 
			
		||||
return [
 | 
			
		||||
	'phpmailer' => [
 | 
			
		||||
		// smtp (Boolean)
 | 
			
		||||
		// Enables SMTP relaying for outbound emails
 | 
			
		||||
		'smtp' => false,
 | 
			
		||||
 | 
			
		||||
		// smtp_server (String)
 | 
			
		||||
		// SMTP server host name
 | 
			
		||||
		'smtp_server' => 'smtp.example.com',
 | 
			
		||||
 | 
			
		||||
		// smtp_port (Integer)
 | 
			
		||||
		// SMTP server port number
 | 
			
		||||
		'smtp_port' => 25,
 | 
			
		||||
 | 
			
		||||
		// smtp_secure (String)
 | 
			
		||||
		// What kind of encryption to use on the SMTP connection.
 | 
			
		||||
		// Options: '', 'ssl' or 'tls'.
 | 
			
		||||
		'smtp_secure' => '',
 | 
			
		||||
 | 
			
		||||
		// smtp_port_s (Integer)
 | 
			
		||||
		// Secure SMTP server port number
 | 
			
		||||
		'smtp_port_s' => 465,
 | 
			
		||||
 | 
			
		||||
		// smtp_username (String)
 | 
			
		||||
		// SMTP server authentication user name
 | 
			
		||||
		// Empty string disables authentication
 | 
			
		||||
		'smtp_username' => '',
 | 
			
		||||
 | 
			
		||||
		// smtp_password (String)
 | 
			
		||||
		// SMTP server authentication password
 | 
			
		||||
		// Empty string disables authentication
 | 
			
		||||
		'smtp_password' => '',
 | 
			
		||||
 | 
			
		||||
		// smtp_from (String)
 | 
			
		||||
		// From address used when using the SMTP server
 | 
			
		||||
		// Example: no-reply@example.com
 | 
			
		||||
		'smtp_from' => '',
 | 
			
		||||
	],
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			@ -2,32 +2,27 @@
 | 
			
		|||
/**
 | 
			
		||||
 * Name: PHP Mailer SMTP
 | 
			
		||||
 * Description: Connects to a SMTP server based on the config
 | 
			
		||||
 * Version: 0.1
 | 
			
		||||
 * Version: 0.2
 | 
			
		||||
 * Author: Marcus Mueller
 | 
			
		||||
 * Maintainer: Hypolite Petovan <hypolite@friendica.mrpetovan.com>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
use Friendica\App;
 | 
			
		||||
use Friendica\Core\Addon;
 | 
			
		||||
use Friendica\Core\Config;
 | 
			
		||||
use Friendica\Core\Hook;
 | 
			
		||||
use Friendica\Util\Config\ConfigFileLoader;
 | 
			
		||||
use PHPMailer\PHPMailer\PHPMailer;
 | 
			
		||||
use PHPMailer\PHPMailer\Exception;
 | 
			
		||||
 | 
			
		||||
function phpmailer_install()
 | 
			
		||||
{
 | 
			
		||||
	Addon::registerHook(
 | 
			
		||||
		'emailer_send_prepare',
 | 
			
		||||
		__FILE__,
 | 
			
		||||
		'phpmailer_emailer_send_prepare'
 | 
			
		||||
	);
 | 
			
		||||
	Hook::register('load_config'         , __FILE__, 'phpmailer_load_config');
 | 
			
		||||
	Hook::register('emailer_send_prepare', __FILE__, 'phpmailer_emailer_send_prepare');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function phpmailer_uninstall()
 | 
			
		||||
function phpmailer_load_config(App $a, ConfigFileLoader $loader)
 | 
			
		||||
{
 | 
			
		||||
	Addon::unregisterHook(
 | 
			
		||||
		'emailer_send_prepare',
 | 
			
		||||
		__FILE__,
 | 
			
		||||
		'phpmailer_emailer_send_prepare'
 | 
			
		||||
	);
 | 
			
		||||
	$a->getConfigCache()->load($loader->loadAddonConfig('phpmailer'));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -46,13 +41,11 @@ function phpmailer_emailer_send_prepare(App $a, array &$b)
 | 
			
		|||
		if (Config::get('phpmailer', 'smtp')) {
 | 
			
		||||
			// Set mailer to use SMTP
 | 
			
		||||
			$mail->isSMTP();
 | 
			
		||||
			/*
 | 
			
		||||
			// Enable verbose debug output
 | 
			
		||||
			$mail->SMTPDebug = 2;
 | 
			
		||||
			*/
 | 
			
		||||
 | 
			
		||||
			// Setup encoding.
 | 
			
		||||
			$mail->CharSet = 'UTF-8';
 | 
			
		||||
			$mail->Encoding = 'base64';
 | 
			
		||||
 | 
			
		||||
			// Specify main and backup SMTP servers
 | 
			
		||||
			$mail->Host = Config::get('phpmailer', 'smtp_server');
 | 
			
		||||
			$mail->Port = Config::get('phpmailer', 'smtp_port');
 | 
			
		||||
| 
						 | 
				
			
			@ -69,16 +62,15 @@ function phpmailer_emailer_send_prepare(App $a, array &$b)
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
			if (Config::get('phpmailer', 'smtp_from')) {
 | 
			
		||||
				$mail->setFrom(Config::get('phpmailer', 'smtp_from'), Config::get('config', 'sitename'));
 | 
			
		||||
				$mail->setFrom(Config::get('phpmailer', 'smtp_from'), $b['fromName']);
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			$mail->setFrom($b['fromEmail'], $b['fromName']);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// subject
 | 
			
		||||
		$mail->Subject = $b['messageSubject'];
 | 
			
		||||
 | 
			
		||||
		// add text
 | 
			
		||||
		$mail->AltBody = $b['textVersion'];
 | 
			
		||||
 | 
			
		||||
		if (!empty($b['toEmail'])) {
 | 
			
		||||
			$mail->addAddress($b['toEmail']);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -87,18 +79,26 @@ function phpmailer_emailer_send_prepare(App $a, array &$b)
 | 
			
		|||
		if (!empty($b['htmlVersion'])) {
 | 
			
		||||
			$mail->isHTML(true);
 | 
			
		||||
			$mail->Body = $b['htmlVersion'];
 | 
			
		||||
			$mail->AltBody = $b['textVersion'];
 | 
			
		||||
		} else {
 | 
			
		||||
			// add text
 | 
			
		||||
			$mail->Body = $b['textVersion'];
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!empty($b['replyTo'])) {
 | 
			
		||||
			$mail->addReplyTo($b['replyTo'], $b['fromName']);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/*
 | 
			
		||||
		// additional headers
 | 
			
		||||
		if (!empty($b['additionalMailHeader'])) {
 | 
			
		||||
			$mail->addCustomHeader($b['additionalMailHeader']);
 | 
			
		||||
			foreach (explode("\n", trim($b['additionalMailHeader'])) as $header_line) {
 | 
			
		||||
				list($name, $value) = explode(':', $header_line, 2);
 | 
			
		||||
				$mail->addCustomHeader(trim($name), trim($value));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		*/
 | 
			
		||||
 | 
			
		||||
		$mail->send();
 | 
			
		||||
	} catch (Exception $e) {
 | 
			
		||||
		echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
 | 
			
		||||
		die();
 | 
			
		||||
		$a->getLogger()->error('PHPMailer error', ['ErrorInfo' => $mail->ErrorInfo, 'code' => $e->getCode(), 'message' => $e->getMessage()]);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue