<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;
require 'phpmailer/src/Exception.php';
require 'phpmailer/src/PHPMailer.php';
require 'phpmailer/src/SMTP.php';
//mit installation der extension wird eine Copy der config.php als dbconf.php im extension verzeichnis gespeichert. Da ich die verbindungsdaten der Datenbank aus
//den einstellungen des Forums ziehe.
include 'dbconf.php';
$database = [
'db-host' => $dbhost,
'db-database' => $dbname,
'db_user' => $dbuser,
'db-password' => $dbpasswd,
'db-port' => $dbport,
'table_prefix' => $table_prefix,
];
//hier wird die Sprache ermittelt die im Browser verwendet wird. Es kann aber nur zwischen de und en unterschieden werden da ich andere nicht zugelassen habe
//diese abfrage dient auch nur weil ich die Verbindungsfehler zur datenbank abfange und ausgebe in Deutsch oder Englisch
function lang_getfrombrowser ($allowed_languages, $default_language, $lang_variable = null, $strict_mode = true)
{
// $_SERVER['HTTP_ACCEPT_LANGUAGE'] verwenden, wenn keine Sprachvariable mitgegeben wurde
if ($lang_variable === null)
{
$lang_variable = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
}
// wurde irgendwelche Information mitgeschickt?
if (empty($lang_variable))
{
// Nein? => Standardsprache zurückgeben
return $default_language;
}
// Den Header auftrennen
$accepted_languages = preg_split('/,\s*/', $lang_variable);
// Die Standardwerte einstellen
$current_lang = $default_language;
$current_q = 0;
// Nun alle mitgegebenen Sprachen abarbeiten
foreach ($accepted_languages as $accepted_language)
{
// Alle Infos über diese Sprache rausholen
$res = preg_match ('/^([a-z]{1,8}(?:-[a-z]{1,8})*)(?:;\s*q=(0(?:\.[0-9]{1,3})?|1(?:\.0{1,3})?))?$/i', $accepted_language, $matches);
// war die Syntax gültig?
if (!$res)
{
// Nein? Dann ignorieren
continue;
}
// Sprachcode holen und dann sofort in die Einzelteile trennen
$lang_code = explode ('-', $matches[1]);
// Wurde eine Qualität mitgegeben?
{
// die Qualität benutzen
$lang_quality = (float)$matches[2];
}
else
{
// Kompabilitätsmodus: Qualität 1 annehmen
$lang_quality = 1.0;
}
// Bis der Sprachcode leer ist...
while (count ($lang_code))
{
// mal sehen, ob der Sprachcode angeboten wird
{
// Qualität anschauen
if ($lang_quality > $current_q)
{
// diese Sprache verwenden
$current_q = $lang_quality;
// Hier die innere while-Schleife verlassen
break;
}
}
// Wenn wir im strengen Modus sind, die Sprache nicht versuchen zu minimalisieren
if ($strict_mode)
{
// innere While-Schleife aufbrechen
break;
}
// den rechtesten Teil des Sprachcodes abschneiden
}
}
// die gefundene Sprache zurückgeben
return $current_lang;
}
$allowed_langs = array ('de', 'en');
$lang = lang_getfrombrowser ($allowed_langs, 'de', null, false );
if ($lang == 'en')
{
$elang = 'en';
}
else if ($lang == 'de')
{
$elang = 'de';
}
else
{
$elang = 'en';
}
{
$dbport1 = $dbport;
}
$mysqli = @mysqli_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport1);
//hier werden die Fehler ausgegeben
{
$beginn = '<div style="text-align: center; padding: 5px; background-color: red; font-size: 24px; border: 5px solid #000; color: #FF8000; font-weight: bold;">';
$end = '</div>';
include 'error_lang/' . $elang . '/error.php';
{
echo $beginn;
echo $end;
}
{
echo $beginn;
echo $end;
}
{
echo $beginn;
echo $end;
}
else
{
echo $beginn;
echo $end;
}
}
//Hier werden die Daten für die Einstellungen des SMTP Servers aus der Tabelle gelesen
function read_phpmailer_settings($database, $select)
{
if (!empty($database['db-port']))
{
$dbport1 = $database['db-port'];
}
$mysqli = @mysqli_connect($database['db-host'], $database['db_user'], $database['db-db-password'], $database['db-database'], $dbport1);
$sql='SELECT pm_value FROM ' . $database['table_prefix']. 'phpmailer_settings WHERE pm_name = "' . $select . '"';
return $read_phpmailer_settings;
}
//Hier werden die Infos entnommen für die Email und den Benutzernamen
function read_phpmailer_cache($database)
{
if (!empty($database['db-port']))
{
$dbport1 = $database['db-port'];
}
$mysqli = @mysqli_connect($database['db-host'], $database['db_user'], $database['db-db-password'], $database['db-database'], $dbport1);
$sql='SELECT * FROM ' . $database['table_prefix']. 'phpmailer_cache ORDER BY var_cache_index';
return $read_phpmailer_cache;
}
//Hier werden die Informationen Subject und Nachricht entnommen
function read_phpmailer_message($database, $value)
{
if (!empty($database['db-port']))
{
$dbport1 = $database['db-port'];
}
$mysqli = @mysqli_connect($database['db-host'], $database['db_user'], $database['db-db-password'], $database['db-database'], $dbport1);
$sql='SELECT ' . $value . ' FROM ' . $database['table_prefix']. 'phpmailer_message WHERE var_message_index = "1"';
return $read_phpmailer_message;
}
//Hier wird der Benutzer gelösche
function delete_user_from_cache($database, $user_id)
{
if (!empty($database['db-port']))
{
$dbport1 = $database['db-port'];
}
$mysqli = @mysqli_connect($database['db-host'], $database['db_user'], $database['db-db-password'], $database['db-database'], $dbport1);
$sql='DELETE FROM ' . $database['table_prefix']. 'phpmailer_cache WHERE var_cache_index = "' . $user_id . '"';
return;
}
//ab hier wird die Email gesendet
//gelesen aus Einstellungs tabelle
$mailhost = read_phpmailer_settings($database, 'pm_host')['pm_value'];
$mailuser = read_phpmailer_settings($database, 'pm_login_username')['pm_value'];
$mailpasswort = read_phpmailer_settings($database, 'pm_login_password')['pm_value'];
$mailhtml = read_phpmailer_settings($database, 'pm_is_html')['pm_value'];
$mailsetform = read_phpmailer_settings($database, 'pm_setform')['pm_value'];
$mailaltsetform = read_phpmailer_settings($database, 'pm_alter_setform')['pm_value'];
$mailaddreplyto = read_phpmailer_settings($database, 'pm_addreplyto')['pm_value'];
$mailport = read_phpmailer_settings($database, 'pm_port')['pm_value'];
$mailsmtpauth = read_phpmailer_settings($database, 'pm_smtp_auth')['pm_value'];
$mailsmtpsecure = read_phpmailer_settings($database, 'pm_smtp_secure')['pm_value'];
$mailverifypeer = read_phpmailer_settings($database, 'pm_verify_peer')['pm_value'];
$mailverifypeername = read_phpmailer_settings($database, 'pm_verify_peer_name')['pm_value'];
$mailallowselfsigned = read_phpmailer_settings($database, 'pm_verify_peer_name')['pm_value'];
// gelesen aus Message Tabelle
$mail_subject = read_phpmailer_message($database, 'pm_subject_to_send')['pm_subject_to_send'];
$mail_body_to_send = read_phpmailer_message($database, 'pm_mail_to_send')['pm_mail_to_send'];
//gellesen aus Cache Tabele
$send_message = str_replace('{{ USER }}', read_phpmailer_cache
($database)['pm_name'], $mailmessage);
$mailtosend = read_phpmailer_cache($database)['pm_mail'];
$mail = new PHPMailer();
$mail->isSMTP();
$mail->isHTML($mailhtml);
$mail->Username = $mailuser;
$mail->Password = $mailpasswort;
$mail->setFrom($mailsetform, $mailaltsetform);
if (!empty($mailaddreplyto))
{
$mail->addReplyTo($mailaddreplyto, '');
}
$mail->Host = $mailhost;
$mail->Port = $mailport;
$mail->SMTPAuth = $mailsmtpauth;
$mail->setLanguage($elang);
$mail->SMTPSecure = $mailsmtpsecure;
$mail->SMTPOptions = [
'ssl' => [
'verify_peer' => $mailverifypeer,
'verify_peer_name' => $mailverifypeername,
'allow_self_signed' => $mailallowselfsigned,
]
];
$mail->addAddress($mailtosend);
$mail->Subject = $mail_subject;
$mail->Body = $send_message;
if (!$mail->send())
{
echo 'Mail wurde nicht versendet aus folgendem Grund: ' . $mail->ErrorInfo;
}
else
{
echo 'Mail wurde gesendet';
}
//hier wird der abgearbeitete Benutzer gelöscht
delete_user_from_cache($database, read_phpmailer_cache($database)['var_cache_index']);
//Hier wird die Seite neu geladen
?>