如何在数组 PHPMailer 中发送电子邮件
How to sent email in array PHPMailer
我正在我的网站中设置电子邮件通知,以通知用户批准索赔。该电子邮件将发送给多个允许批准索赔的用户。问题是我想将电子邮件地址放在批准按钮中,以了解谁批准了索赔。
我已经尝试放入数组,但电子邮件只能发送到第一封电子邮件。
下面是我发送多个电子邮件地址的示例代码
do{
$to = $Rows_RecQuery1['email'];
$mail->AddAddress($email);
}while($Rows_RecQuery1 = mysqli_fetch_array($RecQuery1));
下面是我要放邮件的按钮
<a style="border-style:solid; border-color:#F00; background-color:#F00; color:#FFF; text-decoration:none"
href="http://www.crm.icherrycloud.com/report/approval_claim_process_email.php?<?php echo $uid ?>&process=0&claim_id=<?php echo $_GET['claim_id']?>&modified=<?php echo date('Y-m-dH:i:s', strtotime($row_RecEdit['modified']));?>">Cancel</a>
<a style="border-style:solid; border-color:#0CC; background-color:#0CC; color:#FFF;text-decoration:none"
href="http://www.crm.icherrycloud.com/report/approval_claim_process_email.php?<?php echo $uid ?>&$emailprocess=3&claim_id=<?php echo $_GET['claim_id']?>&modified=<?php echo date('Y-m-dH:i:s', strtotime($row_RecEdit['modified'])); ?>">Reject</a>
<a style="border-style:solid; border-color:#00F; background-color:#00F; color:#FFF;text-decoration:none"
href="http://www.crm.icherrycloud.com/report/approval_claim_process_email.php?<?php echo $uid ?>&$emailprocess=2&claim_id=<?php echo $_GET['claim_id']?>&modified=<?php echo date('Y-m-dH:i:s', strtotime($row_RecEdit['modified'])); ?>">Approve</a>
我认为问题出在 mysqli_fetch_array()
...它将整个查询的结果作为数组获取,而不是在迭代时一次获取一行。所以我猜它只会迭代一次,因为条件会第二次失败。
尝试使用 mysqli_fetch_row()
代替...
您遇到了混淆变量的问题。在 AddAdress 中,您放置了 $email
变量,而在您的循环中,您正在获取 $Rows_RecQuery1['email']
。只需输入 $to
而不是 $email
就可以了。我猜你在某处声明了 $email
变量并且它包含一个电子邮件地址,这就是为什么只发送一封电子邮件。
do{
$to = $Rows_RecQuery1['email'];
$mail->AddAddress($to);
}while($Rows_RecQuery1 = mysqli_fetch_array($RecQuery1));
您的代码几乎没有问题
- 首先你在做
do..while()
循环,而你应该做 while()
,因为你至少在第二个循环之前没有可用数据
- 那么你获取的是数组而不是关联数组,如果你访问所需索引处的数据而不是按名称访问数据就没问题。
试试这个:
while ($contact = mysqli_fetch_assoc($RecQuery1));
{
$mail->AddAddress($contact['email']);
}
此外,如果您向我们展示您的查询,我们也许能够更好地帮助您
这是我使用的测试脚本。 Swiftmailer 是使用包管理器安装的,所以我包含自动加载器,而不是直接包含库。另外,我保留了登录,以防万一一切都中断了,您可以检查生成的日志。
<?php
$hostname = '';
$port = 465; // or anyhting else that works with your server
$username = '';
$password = '';
$sender = ['test@mail.com' => 'John Doe'];
$receivers = ['test2@mail.com'];
echo date(DATE_RFC2822)."<br/>";
include ('vendor/autoload.php');
// Create the Transport
$transport = (new \Swift_SmtpTransport($hostname, $port))
->setUsername($username)
->setPassword($password);
//$transport->setAuthMode('login');
//$transport->start();
// Create the Mailer using your created Transport
$mailer = new \Swift_Mailer($transport);
// To use the ArrayLogger
//$logger = new Swift_Plugins_Loggers_ArrayLogger();
//$mailer->registerPlugin(new Swift_Plugins_LoggerPlugin($logger));
// Or to use the Echo Logger
$logger = new \Swift_Plugins_Loggers_EchoLogger();
$mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger));
// Create a message
$message = (new \Swift_Message('Wonderful Subject'))
->setFrom($sender)
->setTo($receivers)
->setBody('Here is the message itself');
// Send the message
$result = $mailer->send($message);
所以对于你的情况,我会做类似的事情
$Rows_RecQuery1 = mysqli_fetch_array($RecQuery1);
foreach ($Rows_RecQuery1 as $k=>$v) {
$receivers[] = $v['email'];
}
....rest of the script.....
PS: 万一脚本不能按原样运行,现在是早上,没有咖啡,懒得过一两个小时回来:) .
我正在我的网站中设置电子邮件通知,以通知用户批准索赔。该电子邮件将发送给多个允许批准索赔的用户。问题是我想将电子邮件地址放在批准按钮中,以了解谁批准了索赔。
我已经尝试放入数组,但电子邮件只能发送到第一封电子邮件。
下面是我发送多个电子邮件地址的示例代码
do{
$to = $Rows_RecQuery1['email'];
$mail->AddAddress($email);
}while($Rows_RecQuery1 = mysqli_fetch_array($RecQuery1));
下面是我要放邮件的按钮
<a style="border-style:solid; border-color:#F00; background-color:#F00; color:#FFF; text-decoration:none"
href="http://www.crm.icherrycloud.com/report/approval_claim_process_email.php?<?php echo $uid ?>&process=0&claim_id=<?php echo $_GET['claim_id']?>&modified=<?php echo date('Y-m-dH:i:s', strtotime($row_RecEdit['modified']));?>">Cancel</a>
<a style="border-style:solid; border-color:#0CC; background-color:#0CC; color:#FFF;text-decoration:none"
href="http://www.crm.icherrycloud.com/report/approval_claim_process_email.php?<?php echo $uid ?>&$emailprocess=3&claim_id=<?php echo $_GET['claim_id']?>&modified=<?php echo date('Y-m-dH:i:s', strtotime($row_RecEdit['modified'])); ?>">Reject</a>
<a style="border-style:solid; border-color:#00F; background-color:#00F; color:#FFF;text-decoration:none"
href="http://www.crm.icherrycloud.com/report/approval_claim_process_email.php?<?php echo $uid ?>&$emailprocess=2&claim_id=<?php echo $_GET['claim_id']?>&modified=<?php echo date('Y-m-dH:i:s', strtotime($row_RecEdit['modified'])); ?>">Approve</a>
我认为问题出在 mysqli_fetch_array()
...它将整个查询的结果作为数组获取,而不是在迭代时一次获取一行。所以我猜它只会迭代一次,因为条件会第二次失败。
尝试使用 mysqli_fetch_row()
代替...
您遇到了混淆变量的问题。在 AddAdress 中,您放置了 $email
变量,而在您的循环中,您正在获取 $Rows_RecQuery1['email']
。只需输入 $to
而不是 $email
就可以了。我猜你在某处声明了 $email
变量并且它包含一个电子邮件地址,这就是为什么只发送一封电子邮件。
do{
$to = $Rows_RecQuery1['email'];
$mail->AddAddress($to);
}while($Rows_RecQuery1 = mysqli_fetch_array($RecQuery1));
您的代码几乎没有问题
- 首先你在做
do..while()
循环,而你应该做while()
,因为你至少在第二个循环之前没有可用数据 - 那么你获取的是数组而不是关联数组,如果你访问所需索引处的数据而不是按名称访问数据就没问题。
试试这个:
while ($contact = mysqli_fetch_assoc($RecQuery1));
{
$mail->AddAddress($contact['email']);
}
此外,如果您向我们展示您的查询,我们也许能够更好地帮助您
这是我使用的测试脚本。 Swiftmailer 是使用包管理器安装的,所以我包含自动加载器,而不是直接包含库。另外,我保留了登录,以防万一一切都中断了,您可以检查生成的日志。
<?php
$hostname = '';
$port = 465; // or anyhting else that works with your server
$username = '';
$password = '';
$sender = ['test@mail.com' => 'John Doe'];
$receivers = ['test2@mail.com'];
echo date(DATE_RFC2822)."<br/>";
include ('vendor/autoload.php');
// Create the Transport
$transport = (new \Swift_SmtpTransport($hostname, $port))
->setUsername($username)
->setPassword($password);
//$transport->setAuthMode('login');
//$transport->start();
// Create the Mailer using your created Transport
$mailer = new \Swift_Mailer($transport);
// To use the ArrayLogger
//$logger = new Swift_Plugins_Loggers_ArrayLogger();
//$mailer->registerPlugin(new Swift_Plugins_LoggerPlugin($logger));
// Or to use the Echo Logger
$logger = new \Swift_Plugins_Loggers_EchoLogger();
$mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger));
// Create a message
$message = (new \Swift_Message('Wonderful Subject'))
->setFrom($sender)
->setTo($receivers)
->setBody('Here is the message itself');
// Send the message
$result = $mailer->send($message);
所以对于你的情况,我会做类似的事情
$Rows_RecQuery1 = mysqli_fetch_array($RecQuery1);
foreach ($Rows_RecQuery1 as $k=>$v) {
$receivers[] = $v['email'];
}
....rest of the script.....
PS: 万一脚本不能按原样运行,现在是早上,没有咖啡,懒得过一两个小时回来:) .