E-Mails über SMTP-Server senden – Einfache und fortgeschrittene Lösungen

SMTP-basierte E-Mail-Versendung kann auf verschiedene Weise umgesetzt werden, sei es mit einem einfachen oder fortgeschrittenen Ansatz. Nachfolgend präsentieren wir sowohl einfachere als auch komplexere Optionen sowie ein Beispiel für PHP-Code.

    Einfache Lösung: Hosting und Domain mieten

    Die einfachste Möglichkeit, SMTP-basierte E-Mails zu versenden, ist das Mieten eines Hostings und einer Domain.
    Die meisten Hosting-Dienste unterstützen die Ausführung von PHP und haben vorkonfiguriertes SMTP, sodass E-Mails direkt mit der PHP-mail()-Funktion gesendet werden können, wie folgt:

    <?php

    function sendEmail($emailAddresses, $subjects, $sentences) {
    foreach ($emailAddresses as $email) {
    // Select a random subject
    $subject = $subjects[array_rand($subjects)];

    // Generate the email body
    $message = '';
    foreach ($sentences as $sentenceOptions) {
    $message .= $sentenceOptions[array_rand($sentenceOptions)] . " ";
    }

    // Send the email
    $headers = "From: no-reply@domain.com\r\n";
    if (mail($email, $subject, $message, $headers)) {
    echo "Email successfully sent to: $email\n";
    } else {
    echo "Failed to send email to: $email\n";
    }
    }
    }

    // Define email addresses
    $emailAddresses = [
    "example1@domain.com",
    "example2@domain.com",
    "example3@domain.com",
    ];

    // Define possible subjects
    $subjects = [
    "Important Notification",
    "New Offer Available",
    "Discover Our Latest Services",
    ];

    // Define possible sentences (with variations)
    $sentences = [
    ["Welcome!", "Hello!", "Dear customer,"],
    ["We are excited to share our latest promotion.", "Our newest updates might interest you.", "Don't miss out on our latest opportunities!"],
    ["Please visit our website for more information.", "Details can be found on our website.", "Find additional information on our homepage."],
    ];

    // Send emails
    sendEmail($emailAddresses, $subjects, $sentences);

    ?>

    Wichtiger Tipp: Zufälliger Inhalt zur Vermeidung von SPAM
    In unserem Artikel über die Vermeidung von SPAM-Filtern haben wir bereits betont, dass es sinnvoll ist, den Inhalt von E-Mails zu randomisieren. Der obige PHP-Code macht dies, indem er Betreffzeilen und Sätze zufällig auswählt.

      Erweiterte Lösung: Verwendung eines lokalen Webservers und einer Datenbank
      Wenn Sie eine komplexere Lösung benötigen, ist auch das Ausführen eines lokalen Webservers (z. B. Apache oder Nginx) möglich. Der folgende Code ruft Empfänger aus einer MySQL-Datenbank ab und sendet E-Mails mit randomisiertem Inhalt.

      <?php
      //exit;

      set_time_limit(999999999);
      ini_set("max_execution_time", 30000); //sec

      ini_set("display_errors", 1);
      ini_set("display_startup_errors", 1);
      error_reporting(E_ALL);
      header("Content-Type: text/html; charset=utf-8");
      header("Content-Type: text/html; charset=UTF-8");

      mb_internal_encoding("UTF-8");
      mb_http_output("UTF-8");
      mb_http_input("UTF-8");
      mb_regex_encoding("UTF-8");

      //---------sanitize incoming parameters start

      if (!empty($_POST)) {
      foreach ($_POST as $post => $value) {
      $_POST[$post] = addslashes($_POST[$post]);
      }
      }
      if (!empty($_PUT)) {
      foreach ($_PUT as $put => $value) {
      $_PUT[$put] = addslashes($_PUT[$put]);
      }
      }
      if (!empty($_GET)) {
      foreach ($_GET as $get => $value) {
      $_GET[$get] = addslashes($_GET[$get]);
      }
      }
      if (!empty($_REQUEST)) {
      foreach ($_REQUEST as $key => $value) {
      $_REQUEST[$key] = addslashes($_REQUEST[$key]);
      }
      }
      //---------sanitize incoming parameters end

      require_once dirname(__FILE__) . "/phpmailer-6.1.1/Exception.php";
      require_once dirname(__FILE__) . "/phpmailer-6.1.1/OAuth.php";
      require_once dirname(__FILE__) . "/phpmailer-6.1.1/PHPMailer.php";
      require_once dirname(__FILE__) . "/phpmailer-6.1.1/POP3.php";
      require_once dirname(__FILE__) . "/phpmailer-6.1.1/SMTP.php";

      /*CONFIG*/
      /*CONFIG*/
      /*CONFIG*/
      /*CONFIG*/

      echo memory_get_usage() . "<br>";

      $host = "localhost";
      $user = "root";
      $pswd = "";
      $database = "multikuldo";

      $connect = mysqli_connect($host, $user, $pswd, $database);

      mysqli_query($connect, "set names utf8");
      mysqli_select_db($connect, $database);

      $sleeptime = 3; // 3 is optimal
      $runtime = 0;
      $testcount = 50; // Send test email every 50th email
      $testemail = "yourtest@gmail.com";
      $table_name = "emails";

      function getRandElementFromArray($array)
      {
      return $array[array_rand($array, 1)];
      }

      /*SENTENCE VARIATIONS*/
      /*SENTENCE VARIATIONS*/
      /*SENTENCE VARIATIONS*/
      /*SENTENCE VARIATIONS*/
      /*SENTENCE VARIATIONS*/
      /*SENTENCE VARIATIONS*/

      $fromemail[0][] = "sender@gmail.com";

      $sender[0][] = "sender name1";
      $sender[0][] = "sender name2";
      $sender[0][] = "sender name3";

      $subject[0][] = "subject1";
      $subject[0][] = "subject2";
      $subject[0][] = "subject3";

      $body[0][] = "Welcome!";
      $body[0][] = "Dear Editor!";

      $body[1][] = "body1";
      $body[1][] = "body2";
      $body[1][] = "body3";
      $body[2][] = "body1";
      $body[2][] = "body2";
      $body[2][] = "body3";
      $body[3][] = "body1";
      $body[3][] = "body2";
      $body[3][] = "body3";

      /*SENTENCE VARIATIONS*/
      /*SENTENCE VARIATIONS*/
      /*SENTENCE VARIATIONS*/
      /*SENTENCE VARIATIONS*/
      /*SENTENCE VARIATIONS*/
      /*SENTENCE VARIATIONS*/

      do {
      // Start the loop if not redirected via JavaScript
      sleep($sleeptime);

      // Create a PHPMailer instance
      $phpmailer = new PHPMailer\PHPMailer\PHPMailer();

      set_time_limit(9999999);

      $isz = file_get_contents("isz.txt"); // previous email id
      echo "<br>isz: " . $isz . "<br>";

      // Fetch the data to be sent
      $query =
      "
      SELECT *
      FROM " .
      $table_name .
      "
      WHERE
      sended = '0'
      LIMIT 1

      ";

      echo $query . "<hr>";
      $sql_result = mysqli_query($connect, $query);

      $result = [];
      while ($row = mysqli_fetch_array($sql_result)) {
      $result[] = $row;
      }
      //print_r($result);
      if (empty($result)) {
      die("the end");
      }
      //exit;

      file_put_contents("isz.txt", $result[0]["id"]); // one more than what was written
      $log = file_get_contents("log.txt");

      try {
      // Debugging settings
      $phpmailer->SMTPDebug = 1;

      // Set character encoding
      $phpmailer->CharSet = "UTF-8";

      // Set email format to HTML
      $phpmailer->isHTML(true);

      // Sender details
      $phpmailer->setFrom(
      $fromemail[0][rand(0, count($fromemail[0]) - 1)],
      $sender[0][rand(0, count($sender[0]) - 1)]
      );
      $phpmailer->AddReplyTo(
      $fromemail[0][rand(0, count($fromemail[0]) - 1)],
      $sender[0][rand(0, count($sender[0]) - 1)]
      );

      $phpmailer->Sender = $phpmailer->From;

      // Recipient details
      $cimzettnev = explode("@", $result[0]["email"]);
      $phpmailer->addAddress($result[0]["email"], $cimzettnev[1]);

      // SMTP connection settings for sending the email
      $phpmailer->isSMTP();
      $phpmailer->Host = "ssl://smtp.gmail.com";
      $phpmailer->Port = 465;
      $phpmailer->SMTPAuth = true;
      $phpmailer->AuthType = "LOGIN"; // 'CRAM-MD5', 'PLAIN', 'LOGIN
      //$phpmailer->SMTPSecure = false;
      $phpmailer->SMTPSecure = "ssl";
      //$phpmailer->SMTPAutoTLS = false;
      $phpmailer->Username = "your@gmail.com";
      $phpmailer->Password = "12345";

      // Message content
      $phpmailer->Subject = "" . $subject[0][rand(0, count($subject[0]) - 1)];

      // HTML body
      $phpmailer->Body =
      '<html> ... </html>'; // Truncated for brevity

      // Send the email
      $phpmailer->Send();

      // Mark the sent data
      $query =
      "
      UPDATE " .
      $table_name .
      "
      SET sended = 1
      WHERE id = '" .
      $result[0]["id"] .
      "'
      ";

      mysqli_query($connect, $query);

      } catch (phpmailerException $err) {
      // Log mailer error
      } catch (Exception $err) {
      // Log general error
      }
      } while (!empty($result));
      echo memory_get_usage() . "<br>";
      echo "ready";
      ?>

      Verwandte Links:

        Sowohl einfache als auch fortgeschrittene Methoden bieten flexible Optionen für den Massenversand von E-Mails. Wählen Sie die Lösung, die Ihren Anforderungen entspricht, und starten Sie Ihre Kampagne!