Eigenes Skript als SMTP-Host verwenden

Nutzbar ab: Version 013.002.002.001

Über die Systemeinstellungen von Weblication® wird definiert, welches Mailsystem für den Versand von E-Mails über Formulare und Skripte herangezogen werden soll.

Ab CMS-Version 13 steht zusätzlich zur direkten Angabe eines SMTP-Hosts die Möglichkeit zur Verfügung, ein PHP-Skript für den Versand der E-Mails anzugeben. Diese Möglichkeit ist in den Fällen zu empfehlen, wenn nicht auf die PHP-Mail Funktion oder einen SMTP-Server zurückgegriffen werden kann.

Um ein Skript nutzen zu können, muß in den Systemeinstellungen (Mailserver) im Feld "SMTP-Host" folgendes eingetragen werden:

script(/Pfad-zum/script.php)

(die Pfad-Angabe innerhalb der Klammer ersetzen Sie durch das innerhalb der DocRoot abliegende Skript)

Im Skript wird die Funktion "sendMailScript" definiert, in welcher individuell definiert werden kann, über welche Mail-Funktion, Bibliothek, etc. der E-Mail Versand stattfinden soll.

Nachfolgend ein Beispiel-Skript, das die PHPMailer Bibliothek verwendet, über welche der gewünschte SMTP-Server mit dessen Daten angegeben werden können. Denkbar ist auch der Einsatz eines eigenen Mail-Servers, welcher über das Skript angesprochen wird.

Beispiel-Skript mit Funktion sendMailScript

/* ################################################
# PHPMailer sendMailScript, welches über Weblication® CMS mit engineType="wSMTP2" angesprochen werden kann
# verfügbar ab CMS-Version 013.002.002.001
###################################################
*/

/*
# In den Systemeinstellungen muss der SMTP-Host wie folgt definiert werden:
# script(/_sendMailScript.php) IhrSMTPHost.tld
# Die Host-Angabe nach der script-Klammer ist optional, da der Host in der Regel im Script hinterlegt ist.
# Im angegebenen Skript wird dann die Funktion sendMailScript aufgerufen,
# welche auf die SMTP-Host Einstellungen der Systemeinstellungen zurückgreift.
# Das Skript muss als Rückgabe ein true oder false liefern!
# (Beispiel-Skript siehe nachfolgend)
*/
include($_SERVER['DOCUMENT_ROOT'].'/weblication/grid.php');

//error_reporting(E_ALL);ini_set('error_reporting', 1);ini_set('display_errors', 1);

//Import PHPMailer classes into the global namespace
//These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use
PHPMailer\PHPMailer\SMTP;
use
PHPMailer\PHPMailer\POP3;
use
PHPMailer\PHPMailer\Exception;
use
PHPMailer\PHPMailer\OAuth;
use
PHPMailer\PHPMailer\OAuthTokenProvider;
use
PHPMailer\PHPMailer\DSNConfigurator;

require_once(
$_SERVER['DOCUMENT_ROOT'].'/_externe-Anwendungen/PHPMailer/Exception.php');
require_once(
$_SERVER['DOCUMENT_ROOT'].'/_externe-Anwendungen/PHPMailer/PHPMailer.php');
require_once(
$_SERVER['DOCUMENT_ROOT'].'/_externe-Anwendungen/PHPMailer/SMTP.php');
require_once(
$_SERVER['DOCUMENT_ROOT'].'/_externe-Anwendungen/PHPMailer/OAuthTokenProvider.php');
require_once(
$_SERVER['DOCUMENT_ROOT'].'/_externe-Anwendungen/PHPMailer/OAuth.php');

//Load Composer's autoloader
//require 'vendor/autoload.php';

/*
// Für Tests direkt über ein PHP-Skript:

$mailData['from'] = array('from@domain.dd', 'From Name');
$mailData['to'] = array(array('info@domain.dd', 'Max Mustermann'), array('mail@domain.dd', 'Erika Mustermann'));
$mailData['replyTo'] = array('reply@domain.dd', 'Reply Name');
$mailData['cc'] = array(array('cc@domain.dd', 'Cc Name'));
$mailData['bcc'] = array(array('bcc@domain.dd', 'Bcc Name'));
$mailData['subject'] = 'Test E-Mail _sendMailScript';
$mailData['body'] = "\nInhalt der Test E-Mail!\n\nVersendet am: ".date('d.m.Y')." ".date('H:i:s')." Uhr\n";

$smtpOptions = [
'host' => 'IhrSMTPserver.tld',
'port' => wApplication::getOptionPath('/wConf/mail/smtp/server/@port'),
'username' => '', // aus der Weblication Conf auslesen: wApplication::getOptionPath('/wConf/mail/smtp/server/@userName')
'password' => '', // aus der Webication Conf auslesen: wApplication::getOptionPath('/wConf/mail/smtp/server/@userPass')
'secure' => 'ssl' // z.B. 'ssl' oder 'tls'
];

sendmailScript($mailData, $smtpOptions);
*/

function sendMailScript($mailData, $smtpOptions){

// SMTP-Daten für den E-Mail Versand
$smtpOptions = [
'host' => '', // z.B. 'smtp.IhreDomain.tld'
'port' => '', // z.B. '25' oder '587' oder '465' , oder aus Weblication Conf: wApplication::getOptionPath('/wConf/mail/smtp/server/@port'),
'username' => '', // z.B. info@IhreDomain.tld , oder aus Weblication Conf: wApplication::getOptionPath('/wConf/mail/smtp/server/@userName')
'password' => '', // Passwort der Mailbox , oder aus Weblication Conf: wApplication::getOptionPath('/wConf/mail/smtp/server/@userPaa')
'secure' => 'ssl' // z.B. 'ssl' oder 'tls' , oder aus Weblication Conf: wApplication::getOptionPath('/wConf/mail/smtp/server/@secure')
];

//Create an instance; passing `true` enables exceptions
$mail = new PHPMailer(true);

try {
//Server settings
$mail->Timeout = 10;
$mail->SMTPDebug = SMTP::DEBUG_SERVER; //Enable verbose debug output
$mail->isSMTP(); //Send using SMTP
$mail->Host = $smtpOptions['host']; // SMTP server
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->Port = $smtpOptions['port']; // set the SMTP port for the GMAIL server
$mail->Username = $smtpOptions['username']; // SMTP account username
$mail->Password = $smtpOptions['password']; // SMTP account password
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; //Enable implicit TLS encryption
if($smtpOptions['secure'] === 'tls'){
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
}

$mail->CharSet = 'utf-8';

//Recipients
if(isset($mailData['from'])){
$mail->setFrom($mailData['from'][0], $mailData['from'][1]); // Add a recipiert
}
if(isset(
$mailData['to'])){
foreach(
$mailData['to'] as $key => $data){
$mail->addAddress($data[0], $data[1]);
}
}
if(isset(
$mailData['replyTo'])){
$mail->addReplyTo($mailData['replyTo'][0], $mailData['replyTo'][1]);
}
if(isset(
$mailData['cc'])){
foreach(
$mailData['cc'] as $key => $data){
$mail->addCC($data[0], $data[1]);
}
}
if(isset(
$mailData['bcc'])){
foreach(
$mailData['bcc'] as $key => $data){
$mail->addBCC($data[0], $data[1]);
}
}

//Content
$mailBody = $mailData['body'][0]['content'] ?? null;
$mail->isHTML(false); //Set email format to HTML
$mail->Subject = $mailData['subject'] ?? 'no subject defined';
$mail->Body = $mailBody ?? 'no body defined';
//$mail->AltBody = $mailData['AltBody'];

//Attachments
//$mail->addAttachment('/var/tmp/file.tar.gz'); //Add attachments
//$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); //Optional name

// language
//$mail->setLanguage('de', $_SERVER['DOCUMENT_ROOT'].'/_externe-Anwendungen/PHPMailer/languages/');

$mail->send();
echo
'Message has been sent';
return
true;
}
catch (
Exception $e) {
echo
"Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
var_dump( $e->getMessage() );
return
false;
}

}