基于SMTP的电子邮件发送可以通过多种方式实现,无论是基础方法还是高级方法。以下我们展示了更简单和更复杂的选项,以及一个PHP代码示例。
简单解决方案:租用主机和域名
使用基于SMTP的电子邮件发送的最简单方法是租用主机和域名。
大多数主机服务支持PHP执行并预先配置了SMTP,因此可以直接使用PHP的mail()函数发送电子邮件,如下所示:
<?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);
?>
重要提示:通过随机化内容避免垃圾邮件
在我们关于如何避免垃圾邮件过滤器的文章中,我们已经强调了随机化电子邮件内容的重要性。上述PHP代码也通过随机选择主题和句子来实现这一点。
高级解决方案:使用本地Web服务器和数据库
如果需要更复杂的解决方案,也可以运行本地Web服务器(例如Apache或Nginx)。以下代码从MySQL数据库中获取收件人,同时发送具有随机化内容的电子邮件。
<?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";
?>
相关链接:
无论是简单还是高级的方法,都为批量发送电子邮件提供了灵活的选项。选择适合您需求的解决方案,开始您的活动!