使用配置PHP文件和PHP Mailer向多个地址发送电子邮件



我设置了一个config.php文件,使我的客户可以轻松地在他们的网站上为在线表单添加电子邮件,主题和其他发送信息。它看起来像这样:

<?php
$config = [
"host" => "xxx",
"username" => "xxx",
"password" => "xxx",
"secure" => "ssl", // ssl or tls
"port" => 465,
"sendTo" => "abc@email.com",
"sendToBCC" => "xyz@email.com",
"from" => "no-reply@email.com",
"fromName" => "Contact Form"
];

我现在面临的挑战是发送多封电子邮件。我尝试了"sendTo" => "abc@email.com, efg@email.com, hik@email.com",,但它抛出了无效的电子邮件错误。

在发送文件中,我们有如下代码:

//Recipients
$mail->setFrom($config['from'], $config['fromName']);
$mail->addAddress($config['sendTo']);
$mail->addCC($config['sendToCC']);          
$mail->addBCC($config['sendToBCC']);
$mail->addAddress($_POST['email']);

所以我猜$mail->addAddress($config['sendTo']);在挑选多封电子邮件时遇到了麻烦。如何编辑此代码以允许多个收件人?我们非常希望确保我们的客户可以很容易地在config.php文件中添加电子邮件,而不是发送文件。

这两种情况都可以支持:

$addrs = preg_split('#[\s;,]+#', $config['sendTo'], -1, PREG_SPLIT_NO_EMPTY);
foreach ($addrs as $addr) {
$mail->addAddress($addr);
}

这将把"joe@mail1.com; jack@mail2.com, jill@mail3.com jane@mail4.com"拆分为四个地址,并将它们全部添加。将单个地址转换为单元素数组会浪费几个周期,但也可以正常工作。

您可能还希望过滤$addrsfilter_var,使用array_unique,如果count($addr)为零,则不做任何操作,这意味着没有有效的地址可用:

function filterMail($emails) {
$emails = array_map('trim', $emails);
$emails = array_filter($emails);
$emails = array_unique($emails);
$emails = array_map(
function ($email) {
return filter_var($email, FILTER_VALIDATE_EMAIL);
},
$emails
);
$emails = array_filter($emails);
$emails = array_values($emails);
return $emails;
}

基于PHPMailer的示例,由@Chris Haas分享。我做了以下修改:

<?php
$config = [
"host" => "xxx",
"username" => "xxx",
"password" => "xxx",
"secure" => "ssl", // ssl or tls
"port" => 465,
"sendTo" => "abc@email.com",
"sendTo2" => "efg@email.com",
"sendTo3" => "hik@email.com",
"sendToBCC" => "xyz@email.com",
"from" => "no-reply@email.com",
"fromName" => "Contact Form"
];

在发送文件中我这样做:

//Recipients
$mail->setFrom($config['from'], $config['fromName']);
$mail->addAddress($config['sendTo']);
$mail->addAddress($config['sendTo2']);
$mail->addAddress($config['sendTo3']);
$mail->addCC($config['sendToCC']);          
$mail->addBCC($config['sendToBCC']);
$mail->addAddress($_POST['email']);

这就解决了问题。