Zur Navigation

phpmailer einbauen Versand mittels SMTP

1 tobi

Hallo zusammen,

ich würde gerne SMTP Versand bei meinem Formular nutzen.

Ich habe mir mal das Beispiel angeschaut

<?php
// 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\Exception;

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

require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/SMTP.php';


// Instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);

try {
    //Server settings
    // 0 = off (for production use)
    // 1 = client messages
    // 2 = client and server messages
    $mail->SMTPDebug = 2;                                       // Enable verbose debug output
    $mail->isSMTP();                                            // Set mailer to use SMTP
    $mail->Host       = '';  // Specify main and backup SMTP servers
    $mail->SMTPAuth   = true;                                   // Enable SMTP authentication
    $mail->Username   = '';                     // SMTP username
    $mail->Password   = 'test';                               // SMTP password
    $mail->SMTPSecure = 'tls';                                  // Enable TLS encryption, `ssl` also accepted
    $mail->Port       = 587;                                    // TCP port to connect to

    //Recipients
    $mail->setFrom('', '');
    $mail->addAddress('', '');     // Add a recipient
//    $mail->addAddress('ellen@example.com');               // Name is optional
    $mail->addReplyTo('@', '');
//    $mail->addCC('cc@example.com');
//    $mail->addBCC('bcc@example.com');

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

    // Content
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

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

und versucht zu testen. Klappt.

Nun zu meinem:
Ich habe in Zeile 14 bis 36 Zugangsdaten usw. eingebunden.
In Zeile 191 und 265 hab ich
$mail = new PHPMailer(true);
eingebaut und

<?php
//Fehlermeldungen ausgeben falls vorhanden
ini_set('display_errors', 1);
error_reporting(E_ALL);

//include des Kopfbereiches
include("include/kopf.php");
//include der Navigation
include("include/navigation.php");
//include Anfang des ganzen Inhaltes
include("include/anfang-ganzer-inhalt.php");
?>

<?php
// 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\Exception;

require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/SMTP.php';


// Instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);

try {
    //Server settings
    // 0 = off (for production use)
    // 1 = client messages
    // 2 = client and server messages
    $mail->SMTPDebug = 2;                                       // Enable verbose debug output
    $mail->isSMTP();                                            // Set mailer to use SMTP
    $mail->Host       = '';  // Specify main and backup SMTP servers
    $mail->SMTPAuth   = true;                                   // Enable SMTP authentication
    $mail->Username   = '';                     // SMTP username
    $mail->Password   = 'test';                               // SMTP password
    $mail->SMTPSecure = 'tls';                                  // Enable TLS encryption, `ssl` also accepted
    $mail->Port       = 587;                                    // TCP port to connect to


?>

    
            <!-- Anfang Linker Inhalt -->
            <div id="linkerinhalt">
    <title>Anmeldung</title>

<?php

include_once('zugang_ppc.php.inc');

$max_jugenda = 40;
$max_jugendb = 40;
$max_dklasse = 64;

// sql-Abfrage 1 - Ermitteln Anzahl Jugend B (Turnierklasse = 1)
$query = mysqli_query($mysqli, 'SELECT Count(*) FROM anmeldungen_2019_samstag WHERE gemeldeteKlasse = \'1\'');
list($num_jugendb) = mysqli_fetch_row($query);
// sql-Abfrage 2 - Ermitteln Anzahl Jugend A (Turnierklasse = 2)
$query = mysqli_query($mysqli, 'SELECT Count(*) FROM anmeldungen_2019_samstag WHERE gemeldeteKlasse = \'2\'');
list($num_jugenda) = mysqli_fetch_row($query);
// sql-Abfrage 3 - Ermitteln Anzahl D-Klasse + Teilweise Damen B (Turnierklasse = 3)
$query = mysqli_query($mysqli, 'SELECT Count(*) FROM anmeldungen_2019_samstag WHERE gemeldeteKlasse = \'3\'');
list($num_dklasse) = mysqli_fetch_row($query);
unset($query);
?>
<?php
//begin POST form check
$show_form = false;
//entweder einfacher Check (nur namen angeben), oder erweiterter via Regularexpression ([name,regex,errormsg])
$frm_field = array(
    array(
        'email',
        '/^[\w\-\.\+]+@([\w\-]+\.?)+$/',
        'Bitte gültige E-Mail eintragen!'
    ),
    'vorname',
    'nachname',
    array(
        'geschlecht',
        '/^(M|W)$/',
        'Bitte Geschlecht auswählen!'
    ),
    array(
        'geburtsjahr',
        '/^(19|20)\d\d$/',
        'Bitte gültiges Geburtsjahr eintragen (z.B. 1967)!'
    ),
    'ttr',
    'verein',
    array(
        'turnierklasse',
        '/^[1-5]$/',
        'Bitte gültige Turnierklasse auswählen!'
    ),
    array(
        'email_alt',
        '/(^[\w\-\.\+]+@([\w\-]+\.?)+$|^$)/',
        'Optionales Feld, darf leer gelassen werden oder weitere gültige E-Mail eintragen!'
    )
);
$frm_error = array();
if (isset($_POST['email'])) {
    foreach ($frm_field as $val) {
        if (!is_array($val)) {
            if (empty($_POST[$val])) {
                $_POST[$val]     = '';
                $frm_error[$val] = ' <span class="rot">Bitte ausfüllen!</span>';
                $show_form       = true;
            } else
                $frm_error[$val] = '';
        } else {
            if (!isset($_POST[$val[0]])) {
                $_POST[$val[0]]     = '';
                $frm_error[$val[0]] = ' <span class="rot">Bitte ausfüllen!</span>';
                $show_form          = true;
            } elseif (!preg_match($val[1], $_POST[$val[0]])) {
                $frm_error[$val[0]] = ' <span class="rot">' . $val[2] . '</span>';
                $show_form          = true;
            } else
                $frm_error[$val[0]] = '';
        }
    }
} else {
    foreach ($frm_field as $val) {
        if (is_array($val)) {
            if (!isset($_POST[$val[0]]))
                $_POST[$val[0]] = '';
            $frm_error[$val[0]] = '';
        } elseif (!isset($_POST[$val])) {
            $_POST[$val]     = '';
            $frm_error[$val] = '';
        }
    }
    $show_form = true;
}
unset($frm_field);
//vom check oben nicht betroffen (da optional)
if (!isset($_POST['eintrag']))
    $_POST['eintrag'] = '';
if (!isset($_POST['turnierklasse_ex']))
    $_POST['turnierklasse_ex'] = '';
//end POST form check

if (!$show_form) { //sende anfrage / eintragen
    $_POST['turnierklasse'] = intval($_POST['turnierklasse']);
    $turnierklassestr       = '';
    //    $altSignUp              = ($num_sonntag >= $max_sonntag); //case 1&2 change it again
    $altSignUp              = ($num_jugendb >= $max_jugendb || $num_jugenda >= $max_jugenda || $num_dklasse >= $max_dklasse);
    
    switch ($_POST['turnierklasse']) {
        case 1:
            $turnierklasse    = 'Jugend U18 B';
            $turnierklassestr = 'Jugend U18 B mit QTTR von 0 bis 1150 - Turniertag 1 - Samstag 12. September 2020';
            $startgeld        = '10€';
            $vorkasse         = '9€';
            $altSignUp        = ($num_jugendb >= $max_jugendb);
            break;
        case 2:
            $turnierklasse    = 'Jugend U18 A';
            $turnierklassestr = 'Jugend U18 A mit QTTR von 1050 bis 3000 - Turniertag 1 - Samstag 12. September 2020';
            $startgeld        = '10€';
            $vorkasse         = '9€';
            $altSignUp        = ($num_jugenda >= $max_jugenda);
            break;
        case 3:
            $turnierklasse    = 'Aktive D';
            $turnierklassestr = 'Aktive D mit QTTR von 0 bis 1350 - Turniertag 1 - Samstag 12. September 2020';
            $startgeld        = '12€';
            $vorkasse         = '11€';
            $altSignUp        = ($num_dklasse >= $max_dklasse);
            break;
    }
    if (mysqli_fetch_object(mysqli_query($mysqli, 'SELECT * FROM `anmeldungen_2019_samstag` WHERE `vorname` = \'' . mysqli_real_escape_string($mysqli, $_POST['vorname']) . '\' AND `nachname` = \'' . mysqli_real_escape_string($mysqli, $_POST['nachname']) . '\' LIMIT 1'))) {
?><p><span class="rot"><b>Die Anmeldung ist Fehlgeschlagen!<br/>Die von dir angegebene Person <?php
        echo $_POST['vorname'] . ' ' . $_POST['nachname'];
?> ist bereits angemeldet.</b></span></p>
                <p>Falls dem nicht so seien sollte, kontaktiere uns bitte via E-Mail!</p>
                </p><?php
        $show_form = false;
    } else { //eintragen
        $mysqli_query = ' 
INSERT INTO `anmeldungen_2019_samstag`
(`vorname`, `nachname`, `geschlecht`, `geburtsjahr`, `ttr`, `email`, `verein`, `gemeldeteKlasse`, `anmerkung`, `timestamp`)
VALUES
(\'' . mysqli_real_escape_string($mysqli, $_POST['vorname']) . '\', \'' . mysqli_real_escape_string($mysqli, $_POST['nachname']) . '\', \'' . mysqli_real_escape_string($mysqli, $_POST['geschlecht']) . '\', \'' . mysqli_real_escape_string($mysqli, $_POST['geburtsjahr']) . '\', \'' . mysqli_real_escape_string($mysqli, $_POST['ttr']) . '\', \'' . mysqli_real_escape_string($mysqli, $_POST['email']) . '\', \'' . mysqli_real_escape_string($mysqli, $_POST['verein']) . '\', \'' . $_POST['turnierklasse'] . '\', \'' . mysqli_real_escape_string($mysqli, $_POST['eintrag']) . '\', NOW())';
        if (mysqli_query($mysqli, $mysqli_query)) { //Bestätigungsemail an den Anmeldenden
            
            $mail = new PHPMailer(true);
            
            //Betreff in der E-Mail ermitteln, je nach Teilnehmeranzahl
            $subject = 'Bestätigung der Anmeldung zum PPC 23';
            if ($altSignUp)
                $subject = 'Warteliste - PPC 23';
            
            //Zeit ermittelt an dem das Formular ausgefüllt wurde
            $today_Wochentag = date('l');
            $today_Datum     = date('d.m.Y');
            $today_Uhrzeit   = date('H:i');
            $t               = date('w');
            $wochentage      = array(
                'Sonntag',
                'Montag',
                'Dienstag',
                'Mittwoch',
                'Donnerstag',
                'Freitag',
                'Samstag'
            );
            $wochentag       = $wochentage[$t];
            
            //Anmeldung oder Anfrage ausgegeben, je nach Teilnehmeranzahl
            $anmeldung_oder_warteliste = 'Anmeldung';
            if ($altSignUp)
                $anmeldung_oder_warteliste = 'Anfrage';
            
            $text = "
                Hallo {$_POST['vorname']} {$_POST['nachname']},<br />
                Text .....
                Vielen Dank!<br />
                ";
            if ($altSignUp)
                $text = "    
                                            Hallo {$_POST['vorname']} {$_POST['nachname']},<br />
                                            Text....";
            
            //UTF-8 Kodierung festlegen
            $mail->CharSet = "utf-8";
            
            //Absenderadresse der Email setzen
            $mail->setFrom("zensiert");
            $mail->addReplyTo("zensiert");
            
            //Name des Abenders setzen
            $mail->FromName = ("Zensiert");
            
            //Empfängeradresse setzen
            $mail->AddAddress($_POST['email']);
            
            //möglicher Empfänger einer Kopie setzen
            $mail->AddCC($_POST['email_alt']);
            
            // html
            $mail->isHTML(true);
            
            //Betreff der Email setzen
            $mail->Subject = $subject;
            
            //Text der EMail setzen
            $mail->Body = $text;
            
            //EMail senden und überprüfen ob sie versandt wurde
            if (!$mail->Send()) {
                //$mail->Send() liefert FALSE zurück: Es ist ein Fehler aufgetreten
                echo "Es gab bei der übermittelung der Daten ein kleines Problem. Bitte wiederhole den Vorgang oder kontaktiere uns bitte via E-Mail";
                echo "Fehler: " . $mail->ErrorInfo;
            } else {
                //$mail->Send() liefert TRUE zurück: Die Email ist unterwegs
                echo "<br />Eine Bestätigung deiner Anmeldung/Anfrage ist soeben an dich gesendet worden.";
            } { //Mail an die Turnierleitung
                

                $mail = new PHPMailer(true);
                
                //Betreff in der E-Mail ermitteln, je nach Teilnehmeranzahl
                $subject = 'Neue Anmeldung zum PPC 23';
                if ($altSignUp)
                    $subject = 'Warteliste - Neue Anfrage';
                
                //Zeit ermittelt an dem das Formular ausgefüllt wurde
                $today_Wochentag = date('l');
                $today_Datum     = date('d.m.Y');
                $today_Uhrzeit   = date('H:i');
                $t               = date('w');
                $wochentage      = array(
                    'Sonntag',
                    'Montag',
                    'Dienstag',
                    'Mittwoch',
                    'Donnerstag',
                    'Freitag',
                    'Samstag'
                );
                $wochentag       = $wochentage[$t];
                
                //Anmeldung oder Anfrage ausgegeben, je nach Teilnehmeranzahl
                $anmeldung_oder_warteliste = 'Anmeldung';
                if ($altSignUp)
                    $anmeldung_oder_warteliste = 'Anfrage';
                
                $text = " ANMELDUNG!!!<br />
                <br />
                Hallo Turnierleitung,<br />
                Text...
                Mit sportlichen Grüßen<br />
                {$_POST['vorname']} {$_POST['nachname']}
                ";
                if ($altSignUp)
                    $text = "    WARTELISTE!!!<br />
                                            <br />
                                            Hallo Turnierleitung,<br />
                                            Text ...
                                            Mit sportlichen Grüßen<br />
                                            {$_POST['vorname']} {$_POST['nachname']}
                                            ";
                
                //UTF-8 Kodierung festlegen
                $mail->CharSet = "utf-8";
                
                //Absenderadresse der Email setzen
                $mail->setFrom("zenisert");

                $mail->addReplyTo($_POST['email']);
                
                
                //Name des Abenders setzen
                $mail->FromName = ($_POST['vorname'] . ' ' . $_POST['nachname']);
                //                $mail->FromName = ("Turnierportal");
                
                //Empfängeradresse setzen
                $mail->AddAddress("zensiert");
                
                
                // html
                $mail->isHTML(true);
                
                //Betreff der Email setzen
                $mail->Subject = $subject;
                
                //Text der EMail setzen
                $mail->Body = $text;
                
                //EMail senden und überprüfen ob sie versandt wurde
                if (!$mail->Send()) {
                    //$mail->Send() liefert FALSE zurück: Es ist ein Fehler aufgetreten
                    echo "Es gab bei der übermittelung der Daten ein kleines Problem. Bitte wiederhole den Vorgang oder kontaktiere uns bitte via E-Mail";
                    echo "Fehler: " . $mail->ErrorInfo;
                } else {
                    //$mail->Send() liefert TRUE zurück: Die Email ist unterwegs
                    echo "<br />Die Anmeldung/Anfrage ist an die Turnierleitung übermittelt worden.";
                }
                
                //    $show_form=true;
            }
        } else {
            die('<b>MySQL Error:</b><div class="rot">' . mysqli_error($mysqli) . '</div><br/>');
            $show_form = true;
        }
    }
}
if ($show_form) //zeige Formular
    { //führt das aus, wenn die mail adresse noch ned angegeben wurde oder sonst wie das Formular nicht stimmt.
    //ausgabe bzw. setzen von "turnierklasse" vereinfachen
    //Formular für Zusatzangaben wie E-Mail-Adresse, Mitteilung, etc.
?>
<h1>Anmeldung: Turniertag 1, Samstag 12.09.2020</h1>    
<p>Bitte alle mit einem * versehenen Felder ausfüllen.<br />
Die Teilnahme ist grundsätzlich nur in einem Wettbewerb möglich und auch nur in dem Wettbewerb, in welchem der Q-TTR passt.<br />
Die Angabe der E-Mail-Adresse ist von Nöten, da wir an diese Adresse die Bestätigungsemail verschicken.</p>
<form name="blub" method="post" action="anmeldung-samstag.php">
<p><label for="vorname">Vorname*:</label><br />
<input name="vorname" type="text" id="vorname" size="70" maxlength="50" class="eingabe" value="<?php
    echo ($_POST['vorname'] . '"/>' . $frm_error['vorname']);
?></p>
<p><label for="nachname">Nachname*:</label><br />
<input name="nachname" type="text" id="nachanme" size="70" maxlength="50" class="eingabe" value="<?php
    echo ($_POST['nachname'] . '"/>' . $frm_error['nachname']);
?></p>              
<p>Geschlecht*:<br />
<select name="geschlecht"><option value="1">Bitte auswählen</option><option value="M"<?php
    echo (($_POST['geschlecht'] == 'M' ? ' selected="selected"' : ''));
?>>männlich</option><option value="W"<?php
    echo (($_POST['geschlecht'] == 'W' ? ' selected="selected"' : ''));
?>>weiblich</option></select><?php
    echo $frm_error['geschlecht'];
?> </p>  
 <p><label for="ttr">(Q-)TTR (11.08.2020)*:</label><br />
<input name="ttr" type="text" id="ttr" size="70" maxlength="50" class="eingabe" value="<?php
    echo ($_POST['ttr'] . '"/>' . $frm_error['ttr']);
?><p/>                                  
<p>Turnierklasse*:<br />
<select name="turnierklasse">
    <option>Bitte auswählen</option>
    <?php
    /*Samstag*/
    $sunfull_jugendb = ($num_jugendb >= $max_jugendb ? 'full' : 'gruen');
    $sunfull_jugenda = ($num_jugenda >= $max_jugenda ? 'full' : 'gruen');
    $sunfull_dklasse = ($num_dklasse >= $max_dklasse ? 'full' : 'gruen');
?>
  <option value="1" class="<?php
    echo $sunfull_jugendb;
?>"
   <?php
    echo ($_POST['turnierklasse'] == 1 ? ' selected="selected"' : '');
?>
  >Jugend U18 B mit QTTR von 0 bis 1150 - Turniertag 1 - Samstag 12. September 2020</option>
   <option value="2" class="<?php
    echo $sunfull_jugenda;
?>"
   <?php
    echo ($_POST['turnierklasse'] == 2 ? ' selected="selected"' : '');
?>
  >Jugend U18 A mit QTTR von 1050 bis 3000 - Turniertag 1 - Samstag 12. September 2020</option>
   <option value="3" class="<?php
    echo $sunfull_dklasse;
?>"
   <?php
    echo ($_POST['turnierklasse'] == 3 ? ' selected="selected"' : '');
?>
  >Aktive D mit QTTR von 0 bis 1350 - Turniertag 1 - Samstag 12. September 2020</option>
   </select><?php
    echo $frm_error['turnierklasse'];
?>
<br />
<?php
    if (in_array('full', array(
        $sunfull_jugendb,
        $sunfull_jugenda,
        $sunfull_dklasse
    ))) {
?><colspan="2" class="rot" style="text-align:center;font-size:80%;">Hinweis:<br />eine oder mehrere Turnierklassen sind derzeit belegt.<br />Eine Anfrage für die gewünschte Turnierklasse ist dennoch möglich!<?php
    }
?> <p/>                              

<p><label for="email">E-Mail*:</label><br />
 <input name="email" type="text" id="email" size="70" maxlength="50" class="eingabe" value="<?php
    echo ($_POST['email'] . '"/>' . $frm_error['email']);
?></p>
 <p><label for="geburtsjahr">Geburtsjahr*:</label><br />
<input name="geburtsjahr" type="text" id="geburtsjahr" size="70" maxlength="50" class="eingabe" value="<?php
    echo ($_POST['geburtsjahr'] . '"/>' . $frm_error['geburtsjahr']);
?></p>
  <p><label for="verein">Verein:*</label><br />
   <input name="verein" type="text" id="verein" size="70" maxlength="50" class="eingabe" value="<?php
    echo ($_POST['verein'] . '"/>' . $frm_error['verein']);
?></p>
    <p><label for="email">Anmerkung:</label><br />
  <textarea name="eintrag" cols="65" rows="7" id="eintrag" class="eingabe"><?php
    echo ($_POST['eintrag']);
?></textarea><p/>
 <p>Falls gewünscht, kann hier eine weitere E-Mail-Adresse angegeben werden, welche dann ebenfalls eine Kopie der Anmeldung/Anfrage erhält.<br />
  <label for="email_alt">E-Mail 2 (optional):</label><br />                        
<input name="email_alt" type="text" id="email_alt" size="70" maxlength="50" class="eingabe" value="<?php
    echo ($_POST['email_alt'] . '"/>' . $frm_error['email_alt']);
?></p>
                                                                          
<p><input type="checkbox" name="Verarbeitung_Bestaetigung" value="Ja">Mit der Nutzung dieses Formulars erklärst du dich mit der Speicherung und Verarbeitung deiner Daten durch diese Website einverstanden</p>
<p><input type="checkbox" name="Turnierinfos_Bestaetigung" value="Ja">Ebenso die Erlaubnis, dir Informationen rund um das Turnier via E-Mail zukommen zu lassen.</p>
<p><input type="checkbox" name="Datenschutz_Bestaetigung" value="Ja"><a href="datenschutz.php" target="_blank">Datenschutz</a> gelesen und akzeptieren</p>
<p><input type="submit" value="Anmeldung abschließen"/></form></p><?php
}
?>
             
                
                <div class="clear"></div>
  
            </div>
            <!-- Ende Linker Inhalt -->
            
<?php
//include des rechten Bereiches
include("include/rechter-inhalt.php");
//include Ende des ganzen Inhaltes
include("include/ende-ganzer-inhalt.php");
//include Fuss
include("include/fuss.php");
//include Ende
include("include/ende.php");
?>


Ich sehe im Beispiel noch
    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}

wo muß ich dies bei mir einbauen?

Über Denkanstöße oder Lösungen würde ich mich sehr freuen.

Gruß

10.03.2020 11:40 | geändert: 10.03.2020 11:47

2 Jörg Kruse

Das ist das Ende des try Blocks. Mit dieser Konstruktion werden Exceptions behandelt. Die Details hierzu werden auf dieser PHP-Seite beschrieben:

https://www.php.net/manual/de/language.exceptions.php

Aktuell verwendest du keine Exceptions, sondern wertest einer if-else Konstruktion den Rückgabewert von $mail->Send() aus:

                if (!$mail->Send()) {
                    //$mail->Send() liefert FALSE zurück: Es ist ein Fehler aufgetreten
                    echo "Es gab bei der übermittelung der Daten ein kleines Problem. Bitte wiederhole den Vorgang oder kontaktiere uns bitte via E-Mail";
                    echo "Fehler: " . $mail->ErrorInfo;
                } else {
                    //$mail->Send() liefert TRUE zurück: Die Email ist unterwegs
                    echo "<br />Die Anmeldung/Anfrage ist an die Turnierleitung übermittelt worden.";
                }

Wenn du statt dessen mit Exceptions arbeiten möchtest, musst du die if-else in eine try-catch Kontruktion umbauen. Ansonsten kannst du das auch so belassen, solltest dann aber bei der Instanziierung von $mail kein true als Parameter übergeben:

 // Instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);

... und den Import von PHPMailer\PHPMailer\Exception kannst du dir dann natürlich auch sparen

10.03.2020 15:29 | geändert: 10.03.2020 15:31

3 tobi

Zitat von Jörg

Wenn du statt dessen mit Exceptions arbeiten möchtest, musst du die if-else in eine try-catch Kontruktion umbauen. Ansonsten kannst du das auch so belassen, solltest dann aber bei der Instanziierung von $mail kein true als Parameter übergeben:
Eigentlich will ich nur so einfach wie möglich, SMTP einsetzen. Wenn ich auf die Exceptions verzichten kann, dann wäre es gut. Denn ich denke das mit der try-catch dürfte estwas kompliziert und aufwenig sein.

reicht es da einfach das true zu entfernen und es sollte klappen?
 // Instantiation and passing `true` enables exceptions
$mail = new PHPMailer;

11.03.2020 07:24

4 Jörg Kruse

Dem Kommentar dadrüber zufolge sollte es das - ich würde den Mailversand auch nochmal gründlich testen, jeweils mit falschen und mit korrekten SMTP-Zugangsdaten.

Was aber noch auffällt: du initialisierst $mail mehrfach. Das erste $mail wird durch das zweite überschrieben, wobei dem zweiten aber noch keine SMTP-Zugangsdaten zugewiesen wurden. Folgende Mails werden nicht über den SMTP-Host versendet.

11.03.2020 09:19

5 tobi

Zitat von Jörg
Dem Kommentar dadrüber zufolge sollte es das - ich würde den Mailversand auch nochmal gründlich testen, jeweils mit falschen und mit korrekten SMTP-Zugangsdaten.
Ob falsch oder richtig, beides werden mittels phpmail versendet.

Zitat von Jörg
Was aber noch auffällt: du initialisierst $mail mehrfach. Das erste $mail wird durch das zweite überschrieben, wobei dem zweiten aber noch keine SMTP-Zugangsdaten zugewiesen wurden. Folgende Mails werden nicht über den SMTP-Host versendet.
was müßte ich hier tun?

11.03.2020 09:40

6 Jörg Kruse

Ob falsch oder richtig, beides werden mittels phpmail versendet.

Ja, das erste $mail Objekt mit den (falschen oder korrekten) SMTP-Zugangsdaten wird von einem $mail ohne SMTP-Zugangsdaten überschrieben, so dass die $mail->send() nicht über den SMTP-Host, sondern über den lokalen Mailer versenden.

was müßte ich hier tun?

Für jedes $mail, welches du initialisierst, musst du den SMTP-Zugang einrichten. So wie es ausschaut, versendet das Script zwei Mails, also musst du zweimal $mail initialisieren. Momentan wird $mail dreimal initialisiert, wobei nur das erste für SMTP eingerichtet wird, und dabei nicht einmal zum Mailversand verwendet wird.

Also pro Mail:

$mail = new PHPMailer;
$mail->SMTPDebug = 2;
$mail->isSMTP();
// etc.
$mail->CharSet = "utf-8";
$mail->setFrom("zensiert");
//  etc.
if (!$mail->Send()) {
    // ...
} else {
    // ...
}

Danach kannst du dann auch testen.

Wenn du mehrere Mails versendest, könntest du ggf. auch eine eigene Funktion basteln, damit die Zugangsdaten nicht mehrfach definiert werden müssen.

11.03.2020 11:50 | geändert: 11.03.2020 11:51

7 tobi

în der Tat 3 Mal. Ich habe nun am Anfang die Verbindungsdaten entfernt und nur bei den Mails unten direkt die Zugangsdaten jeweils eingebunden.

Mails werden dennoch nur mittels phpmail gesendet und nicht via SMTP.
Da muß noch irgendwas faul sein.

11.03.2020 12:17

8 Jörg Kruse

Mails werden dennoch nur mittels phpmail gesendet und nicht via SMTP.

Was meinst du damit genau und wie hast du das festgestellt? werden die Mails auch mit falschen SMTP-Zugangsdaten gesendet?

Grundsätzlich werden über die PHPMailer Klasse alle Mails letzendlich über SMTP versendet. Es besteht hier nur die Wahl, ob die Mails über den Mailer auf localhost oder über einen Mailer auf einem externen Host gesendet werden. Für zweiteres muss $mail->isSMTP() gesetzt sein und die entsprechenden Zugangsdaten definiert werden. Vermutlich wird dies "SMTP-Versand" genannt, weil PHPMailer die Mails dann über SMTP an den externen Host schickt, der diese dann ggf. weitersendet. Wenn $mail->isSMTP() nicht gesetzt ist, dann kümmert sich der lokale Mailer um den Versand.

Ob Mails über den lokalen oder den externen Host gesendet werden, lässt sich entweder anhand der Received-Header der Email feststellen, oder über die Logfiles des betreffenden Mailservers.

11.03.2020 15:27 | geändert: 11.03.2020 15:30

9 tobi

Dies habe ich in meinem Kundenmenü festgestellt.
Hier werden zweierlei Mails aufgelistet. Welche die über phpmail gesendet werden und alle weiteren (Smtp oder auch webmail - was ja auch mittels SMTP läuft).

Ich habe nun alles nochmals geprüft und es hat doch funktioniert. Irgendwo war ein Zeichen zu viel.

Eingebaut habe ich es jetzt an beiden Stellen mittels:
$mail = new PHPMailer;
include("mail-zugang-smtp.php.inc");
Falls ich dann mal Zugangsdaten ändern müßte, so muß ich dies nur an einer Stelle.

Ich danke dir für deine Hilfe hier in Sachen richtigem SMTP Einbau.

Bzgl. weiterer Anliegen, bzgl. des Formulars werde ich ein neues Thema auf machen.

17.03.2020 06:39 | geändert: 17.03.2020 06:39

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]