L’envoi d’e-mails basé sur SMTP peut être réalisé de plusieurs façons, qu’il s’agisse d’une approche basique ou avancée. Ci-dessous, nous présentons des options simples et plus complexes, ainsi qu’un exemple de code PHP.
Solution simple : Louer un hébergement et un domaine
La manière la plus simple d’utiliser l’envoi d’e-mails basé sur SMTP est de louer un hébergement et un domaine.
La plupart des services d’hébergement prennent en charge l’exécution de PHP et disposent de SMTP préconfiguré, permettant d’envoyer des e-mails directement avec la fonction mail() de PHP, comme suit :
<?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);
?>
Conseil important : Contenu aléatoire pour éviter les spams
Dans notre article sur l’évitement des filtres anti-spams, nous avons déjà souligné qu’il est judicieux de rendre le contenu des e-mails aléatoire. Le code PHP ci-dessus le fait également en sélectionnant aléatoirement les sujets et les phrases.
Solution avancée : Utilisation d’un serveur web local et d’une base de données
Si vous avez besoin d’une solution plus complexe, il est également possible d’exécuter un serveur web local (par exemple Apache ou Nginx). Le code suivant récupère les destinataires d’une base de données MySQL tout en envoyant des e-mails avec un contenu aléatoire.
<?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";
?>
Liens connexes :
Les méthodes simples et avancées offrent toutes des options flexibles pour l’envoi massif d’e-mails. Choisissez la solution qui répond à vos besoins et lancez votre campagne !