我正在尝试使用PHP邮件()从数据库向订阅者列表发送BCC。一切正常,但我遇到了一个问题,让我整个早上都感到困扰。我能够发送带有BCC的列表,但无法将接收端电子邮件地址附加到标题“To:”中。
例如,我将列表发送给以下电子邮件地址(test1@example.com, test2@example.com和test3@example.com)。每个电子邮件地址都会收到一封电子邮件,并且由于BCC而隐藏其他电子邮件地址。
我的问题是,在所有接收列表的地方,“To:”标题都显示为空白。我理解并知道标题不会显示,因为我在传出消息中仅具有BCC头。我已经尝试使用for循环该过程,但我在一个循环中收到了所有的电子邮件,以及该地址的一个电子邮件。
这是我的工作代码:工作代码包括我尝试解决To:标题的循环。我能够发送电子邮件,但我收到了所有已发送的电子邮件。
我的一般想法是使用循环,但我找不到一个完全解决这个问题的解决方案,即将BBC添加到列表中,并仅在To:标题中显示接收端电子邮件地址。有什么想法或建议吗? 使用SMTP服务器更新 我一直在尝试使用在此线程中找到的解决方案并将其应用于SMTP服务器。使用SendGrid发送消息是理想的选择。我想出了以下选项,但该脚本似乎只向数据库中的一个地址发送一条消息,而不是所有地址。
例如,我将列表发送给以下电子邮件地址(test1@example.com, test2@example.com和test3@example.com)。每个电子邮件地址都会收到一封电子邮件,并且由于BCC而隐藏其他电子邮件地址。
我的问题是,在所有接收列表的地方,“To:”标题都显示为空白。我理解并知道标题不会显示,因为我在传出消息中仅具有BCC头。我已经尝试使用for循环该过程,但我在一个循环中收到了所有的电子邮件,以及该地址的一个电子邮件。
这是我的工作代码:工作代码包括我尝试解决To:标题的循环。我能够发送电子邮件,但我收到了所有已发送的电子邮件。
<?php
/*
Gathers the number of rows within the database. Used for the loop that displays the entire list in the BCC.
*/
session_start();
include_once '../dbconnect.php';
$result = mysql_query("SELECT * FROM news");
$num_rows = mysql_num_rows($result);
$rows = $num_rows;
/*
Requests the list from the database, please the list in a loop, displays the list only once, and places list in an operator.
*/
$result = mysql_query("SELECT * FROM `news`");
while($row = mysql_fetch_array( $result )) {
for ($x = 1; $x <= 1; $x++) {
$contacts.= "".$row['email'].",";
}
}
/*
ATTEMPT (It works... sort of): Sends mail to the list using BCC, displays the ONLY receivers email address in the To: header
*/
$result = mysql_query("SELECT * FROM `news`");
while($row = mysql_fetch_array( $result )) {
for ($x = 1; $x <= 1; $x++) {
$receiver= "".$row['email']."";
$to = "$receiver";
$subject = 'Test Email';
$headers = "From: example@example.com\r\n";
$headers .= "BCC: $contacts";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
$message = '<html><body>';
$message .= '<h1 style="">Test Message</h1>';
$message .= '</body></html>';
mail($to,$subject, $message, $headers);
}
}
?>
我的一般想法是使用循环,但我找不到一个完全解决这个问题的解决方案,即将BBC添加到列表中,并仅在To:标题中显示接收端电子邮件地址。有什么想法或建议吗? 使用SMTP服务器更新 我一直在尝试使用在此线程中找到的解决方案并将其应用于SMTP服务器。使用SendGrid发送消息是理想的选择。我想出了以下选项,但该脚本似乎只向数据库中的一个地址发送一条消息,而不是所有地址。
<?php
require_once "Mail.php";
$sub = $_POST['subject'];
$ttl = $_POST['title'];
$img = $_POST['image'];
$bdy = $_POST['body'];
$lk = $_POST['link'];
mysql_connect("", "", "") or die(mysql_error()) ;
mysql_select_db("") or die(mysql_error()) ;
$result = mysql_query("SELECT `email` FROM news");
$num_rows = mysql_num_rows($result);
$receivers = array();
while ($row = mysql_fetch_array($result)) {
$receivers[] = $row['email'];
}
foreach ($receivers as $receiver) { }
$from = "test@example.com";
$to = $receiver;
$subject = $sub;
$mime = "1.0";
$ctype = "text/html; charset=ISO-8859-1";
$body = '
<html><body>
<p>Test Message!</p>
</body></html>
';
$host = "";
$port = "";
$username = "";
$password = "";
$headers = array ('From' => $from,
'To' => $to,
'Subject' => $subject,
'MIME-Version' => $mime ,
'Content-Type:' => $ctype);
$smtp = Mail::factory('smtp',
array ('host' => $host,
'port' => $port,
'auth' => true,
'username' => $username,
'password' => $password));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo("<p>" . $mail->getMessage() . "</p>");
} else {
echo("<p>Message successfully sent!</p>");
}
?>