Invio di e-mail tramite server SMTP – Soluzioni semplici e avanzate

L’invio di e-mail basato su SMTP può essere implementato in diversi modi, sia con un approccio base che avanzato. Di seguito, presentiamo sia opzioni semplici che più complesse, insieme a un esempio di codice PHP.

    Soluzione semplice: Noleggia un hosting e un dominio

    Il modo più semplice per utilizzare l’invio di e-mail basato su SMTP è noleggiare un hosting e un dominio.
    La maggior parte dei servizi di hosting supporta l’esecuzione di PHP e dispone di un SMTP preconfigurato, consentendo l’invio di e-mail direttamente utilizzando la funzione mail() di PHP, come segue:

    <?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);

    ?>

    Suggerimento importante: Contenuto randomizzato per evitare lo SPAM
    Nel nostro articolo su come evitare i filtri SPAM, abbiamo già sottolineato che vale la pena randomizzare il contenuto delle e-mail. Anche il codice PHP sopra fa questo selezionando casualmente argomenti e frasi.

      Soluzione avanzata: Utilizzo di un server web locale e un database
      Se hai bisogno di una soluzione più complessa, è possibile eseguire un server web locale (ad esempio Apache o Nginx). Il seguente codice recupera i destinatari da un database MySQL mentre invia e-mail con contenuti randomizzati.

      <?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";
      ?>

      Link correlati:

        Sia i metodi semplici che quelli avanzati offrono opzioni flessibili per l’invio di email di massa. Scegli la soluzione adatta alle tue esigenze e inizia la tua campagna!