Pastebin

Mein phpmailer skript

von chris1278 (21.09.2023 22:31)

Dein Code:
  1. <?php
  2.  
  3. use PHPMailer\PHPMailer\PHPMailer;
  4. use PHPMailer\PHPMailer\Exception;
  5. use PHPMailer\PHPMailer\SMTP;
  6.  
  7. require 'phpmailer/src/Exception.php';
  8. require 'phpmailer/src/PHPMailer.php';
  9. require 'phpmailer/src/SMTP.php';
  10.  
  11. //mit installation der extension wird eine Copy der config.php als dbconf.php im extension verzeichnis gespeichert. Da ich die verbindungsdaten der Datenbank aus
  12. //den einstellungen des Forums ziehe.
  13. include 'dbconf.php';
  14. $database       = [
  15.         'db-host'               => $dbhost,
  16.         'db-database'   => $dbname,
  17.         'db_user'               => $dbuser,
  18.         'db-password'   => $dbpasswd,
  19.         'db-port'               => $dbport,
  20.         'table_prefix'  => $table_prefix,
  21. ];
  22.  
  23. //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
  24. //diese abfrage dient auch nur weil ich die Verbindungsfehler zur datenbank abfange und ausgebe in Deutsch oder Englisch
  25. function lang_getfrombrowser ($allowed_languages, $default_language, $lang_variable = null, $strict_mode = true)
  26. {
  27.        
  28.         // $_SERVER['HTTP_ACCEPT_LANGUAGE'] verwenden, wenn keine Sprachvariable mitgegeben wurde
  29.         if ($lang_variable === null)
  30.         {
  31.                 $lang_variable = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
  32.         }
  33.  
  34.         // wurde irgendwelche Information mitgeschickt?
  35.         if (empty($lang_variable))
  36.         {
  37.                 // Nein? => Standardsprache zurückgeben
  38.                 return $default_language;
  39.         }
  40.  
  41.         // Den Header auftrennen
  42.         $accepted_languages = preg_split('/,\s*/', $lang_variable);
  43.        
  44.         // Die Standardwerte einstellen
  45.         $current_lang = $default_language;
  46.         $current_q = 0;
  47.  
  48.         // Nun alle mitgegebenen Sprachen abarbeiten
  49.         foreach ($accepted_languages as $accepted_language)
  50.         {
  51.                 // Alle Infos über diese Sprache rausholen
  52.                 $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);
  53.                
  54.                 // war die Syntax gültig?
  55.                 if (!$res)
  56.                 {
  57.                         // Nein? Dann ignorieren
  58.                         continue;
  59.                 }
  60.  
  61.                 // Sprachcode holen und dann sofort in die Einzelteile trennen
  62.                 $lang_code = explode ('-', $matches[1]);
  63.  
  64.                 // Wurde eine Qualität mitgegeben?
  65.                 if (isset($matches[2]))
  66.                 {
  67.                         // die Qualität benutzen
  68.                         $lang_quality = (float)$matches[2];
  69.                 }
  70.                 else
  71.                 {
  72.                         // Kompabilitätsmodus: Qualität 1 annehmen
  73.                         $lang_quality = 1.0;
  74.                 }
  75.  
  76.                 // Bis der Sprachcode leer ist...
  77.                 while (count ($lang_code))
  78.                 {
  79.                         // mal sehen, ob der Sprachcode angeboten wird
  80.                         if (in_array(strtolower (join ('-', $lang_code)), $allowed_languages))
  81.                         {
  82.                                 // Qualität anschauen
  83.                                 if ($lang_quality > $current_q)
  84.                                 {
  85.                                         // diese Sprache verwenden
  86.                                         $current_lang = strtolower (join ('-', $lang_code));
  87.                                         $current_q = $lang_quality;
  88.                                         // Hier die innere while-Schleife verlassen
  89.                                         break;
  90.                                 }
  91.                         }
  92.                         // Wenn wir im strengen Modus sind, die Sprache nicht versuchen zu minimalisieren
  93.                         if ($strict_mode)
  94.                         {
  95.                                 // innere While-Schleife aufbrechen
  96.                                 break;
  97.                         }
  98.                         // den rechtesten Teil des Sprachcodes abschneiden
  99.                         array_pop ($lang_code);
  100.                 }
  101.         }
  102.  
  103.         // die gefundene Sprache zurückgeben
  104.         return $current_lang;
  105. }
  106.  
  107. $allowed_langs = array ('de', 'en');
  108.  
  109. $lang = lang_getfrombrowser ($allowed_langs, 'de', null, false );
  110.  
  111. if ($lang == 'en')
  112. {
  113.         $elang  = 'en';
  114. }
  115. else if ($lang == 'de')
  116. {
  117.         $elang  = 'de';
  118. }
  119. else
  120. {
  121.         $elang  = 'en';
  122. }
  123.  
  124. if (!empty($dbport))
  125. {      
  126.         $dbport1        = $dbport;
  127. }
  128.  
  129.  
  130. mysqli_report(MYSQLI_REPORT_OFF);
  131. $mysqli = @mysqli_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport1);     
  132.  
  133. //hier werden die Fehler ausgegeben
  134. {      
  135.         $beginn         = '<div style="text-align: center; padding: 5px; background-color: red; font-size: 24px; border: 5px solid #000; color: #FF8000; font-weight: bold;">';
  136.         $end            = '</div>';
  137.         include 'error_lang/' . $elang . '/error.php';
  138.        
  139.         if(str_contains(mysqli_connect_error(), 'php_network_getaddresses'))
  140.         {
  141.                 echo $beginn;
  142.                         echo sprintf($error_lang['ERROR_HOST'], mysqli_connect_error());
  143.                 echo $end;
  144.         }
  145.         else if(str_contains(mysqli_connect_error(), 'Unknown database'))
  146.         {
  147.                 echo $beginn;
  148.                         echo sprintf($error_lang['ERROR_DBNAME'], mysqli_connect_error());
  149.                 echo $end;
  150.         }
  151.         else if(str_contains(mysqli_connect_error(), 'Access denied for user'))
  152.         {
  153.                 echo $beginn;
  154.                         echo sprintf($error_lang['ERROR_INFO'] . $error_lang['ERROR_USER_PASSWORD'], mysqli_connect_error());
  155.                 echo $end;
  156.         }
  157.         else
  158.         {
  159.                 echo $beginn;
  160.                         echo  sprintf($error_lang['ERROR_REST'], mysqli_connect_error());
  161.                 echo $end;
  162.         }
  163.         exit;
  164. }
  165.  
  166. //Hier werden die Daten für die Einstellungen des SMTP Servers aus der Tabelle gelesen
  167. function read_phpmailer_settings($database, $select)
  168. {
  169.  
  170.         if (!empty($database['db-port']))
  171.         {
  172.                 $dbport1        = $database['db-port'];
  173.         }
  174.        
  175.         $mysqli = @mysqli_connect($database['db-host'],  $database['db_user'], $database['db-db-password'], $database['db-database'], $dbport1);       
  176.         $sql='SELECT pm_value FROM ' . $database['table_prefix']. 'phpmailer_settings WHERE pm_name = "' . $select . '"';
  177.         $result = mysqli_query($mysqli, $sql);
  178.         $read_phpmailer_settings = mysqli_fetch_array($result);
  179.        
  180.  
  181.         return $read_phpmailer_settings;
  182. }
  183.  
  184. //Hier werden die Infos entnommen für die Email und den Benutzernamen
  185. function read_phpmailer_cache($database)
  186. {
  187.         if (!empty($database['db-port']))
  188.         {
  189.                 $dbport1        = $database['db-port'];
  190.         }
  191.        
  192.         $mysqli = @mysqli_connect($database['db-host'],  $database['db_user'], $database['db-db-password'], $database['db-database'], $dbport1);       
  193.         $sql='SELECT * FROM ' . $database['table_prefix']. 'phpmailer_cache ORDER BY var_cache_index';
  194.         $result = mysqli_query($mysqli, $sql);
  195.         $read_phpmailer_cache = mysqli_fetch_array($result);
  196.        
  197.         return $read_phpmailer_cache;
  198. }
  199.  
  200. //Hier werden die Informationen Subject und Nachricht entnommen
  201. function read_phpmailer_message($database, $value)
  202. {
  203.         if (!empty($database['db-port']))
  204.         {
  205.                 $dbport1        = $database['db-port'];
  206.         }
  207.        
  208.         $mysqli = @mysqli_connect($database['db-host'],  $database['db_user'], $database['db-db-password'], $database['db-database'], $dbport1);       
  209.         $sql='SELECT ' . $value . ' FROM ' . $database['table_prefix']. 'phpmailer_message WHERE var_message_index = "1"';
  210.         $result = mysqli_query($mysqli, $sql);
  211.         $read_phpmailer_message = mysqli_fetch_array($result);
  212.        
  213.         return $read_phpmailer_message;
  214. }
  215.  
  216. //Hier wird der Benutzer gelösche
  217. function delete_user_from_cache($database, $user_id)
  218. {
  219.         if (!empty($database['db-port']))
  220.         {
  221.                 $dbport1        = $database['db-port'];
  222.         }
  223.        
  224.         $mysqli = @mysqli_connect($database['db-host'],  $database['db_user'], $database['db-db-password'], $database['db-database'], $dbport1);       
  225.         $sql='DELETE FROM ' . $database['table_prefix']. 'phpmailer_cache WHERE var_cache_index = "' . $user_id . '"';
  226.         $result = mysqli_query($mysqli, $sql);
  227.         return;
  228. }
  229.  
  230. //ab hier wird die Email gesendet
  231. //gelesen aus Einstellungs tabelle
  232. $mailhost                               = read_phpmailer_settings($database, 'pm_host')['pm_value'];
  233. $mailuser                               = read_phpmailer_settings($database, 'pm_login_username')['pm_value'];
  234. $mailpasswort                   = read_phpmailer_settings($database, 'pm_login_password')['pm_value'];
  235. $mailhtml                               = read_phpmailer_settings($database, 'pm_is_html')['pm_value'];
  236. $mailsetform                    = read_phpmailer_settings($database, 'pm_setform')['pm_value'];
  237. $mailaltsetform                 = read_phpmailer_settings($database, 'pm_alter_setform')['pm_value'];
  238. $mailaddreplyto                 = read_phpmailer_settings($database, 'pm_addreplyto')['pm_value'];
  239. $mailport                               = read_phpmailer_settings($database, 'pm_port')['pm_value'];
  240. $mailsmtpauth                   = read_phpmailer_settings($database, 'pm_smtp_auth')['pm_value'];                      
  241. $mailsmtpsecure                 = read_phpmailer_settings($database, 'pm_smtp_secure')['pm_value'];
  242. $mailverifypeer                 = read_phpmailer_settings($database, 'pm_verify_peer')['pm_value'];    
  243. $mailverifypeername             = read_phpmailer_settings($database, 'pm_verify_peer_name')['pm_value'];       
  244. $mailallowselfsigned    = read_phpmailer_settings($database, 'pm_verify_peer_name')['pm_value'];       
  245.  
  246. // gelesen aus Message Tabelle
  247. $mail_subject                   = read_phpmailer_message($database, 'pm_subject_to_send')['pm_subject_to_send'];
  248. $mail_body_to_send              = read_phpmailer_message($database, 'pm_mail_to_send')['pm_mail_to_send'];
  249.  
  250. //gellesen aus Cache Tabele
  251.  
  252.  
  253. $mailmessage    = htmlspecialchars_decode($mail_body_to_send, ENT_HTML5);
  254. $send_message   = str_replace('{{ USER }}', read_phpmailer_cache($database)['pm_name'], $mailmessage);
  255.  
  256.  
  257. $mailtosend                             = read_phpmailer_cache($database)['pm_mail'];
  258.  
  259. $mail   = new PHPMailer();
  260. $mail->isSMTP();
  261. $mail->isHTML($mailhtml);
  262. $mail->Username = $mailuser;
  263. $mail->Password = $mailpasswort;
  264. $mail->setFrom($mailsetform, $mailaltsetform);
  265.  
  266. if (!empty($mailaddreplyto))
  267. {
  268.                 $mail->addReplyTo($mailaddreplyto, '');
  269. }
  270. $mail->Host     = $mailhost;
  271. $mail->Port     = $mailport;
  272. $mail->SMTPAuth = $mailsmtpauth;
  273. $mail->setLanguage($elang);
  274. $mail->SMTPSecure = $mailsmtpsecure;
  275. $mail->SMTPOptions = [
  276.         'ssl' => [
  277.                 'verify_peer'                   => $mailverifypeer,
  278.                 'verify_peer_name'              => $mailverifypeername,
  279.                 'allow_self_signed'             => $mailallowselfsigned,
  280.         ]
  281. ];
  282. $mail->addAddress($mailtosend);
  283. $mail->Subject  = $mail_subject;
  284. $mail->Body             = $send_message;
  285.  
  286. if (!$mail->send())
  287. {
  288.         echo 'Mail wurde nicht versendet aus folgendem Grund: ' .  $mail->ErrorInfo;
  289. }
  290. else
  291. {
  292.         echo 'Mail wurde gesendet';
  293. }
  294.        
  295.        
  296. //hier wird der abgearbeitete Benutzer gelöscht
  297. delete_user_from_cache($database, read_phpmailer_cache($database)['var_cache_index']);
  298.        
  299. //Hier wird die Seite neu geladen
  300. header('Refresh:0');
  301. ?>

Quellcode

Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. Alternativ kannst du den gesamten Eintrag auch als Datei herunterladen.