使用配置 PHP 文件和 PHP Mailer 将电子邮件发送到多个地址
Posted
技术标签:
【中文标题】使用配置 PHP 文件和 PHP Mailer 将电子邮件发送到多个地址【英文标题】:Sending emails to multiple addresses using config PHP file and PHP Mailer 【发布时间】:2021-12-11 03:28:18 【问题描述】:我设置了一个 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 文件而不是发送文件中。
【问题讨论】:
如果你查看examples for PHPMailer,你会发现你可以多次调用addAddress()
。
@ChrisHaas。那非常有帮助。现在问题已经解决了。谢谢
【参考方案1】:
你可以支持这两种情况:
$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"
拆分为四个地址,然后将它们全部添加。单个地址将浪费几个周期来转换为单元素数组,但随后也可以正常工作。
您可能还想也过滤$addrs
到filter_var
,使用array_unique,如果count($addrs) 为零,则不执行任何操作,这意味着没有可用的有效地址:
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;
【讨论】:
【参考方案2】:基于@Chris Haas 共享的链接提供的examples from PHPMailer。我做了这些更改:
<?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']);
这解决了问题。
【讨论】:
以上是关于使用配置 PHP 文件和 PHP Mailer 将电子邮件发送到多个地址的主要内容,如果未能解决你的问题,请参考以下文章
Elastic Beanstalk 中的 PHP Mailer 类无法识别
我被难住了:如何使用 PHP Mailer 发送 HTML 表单
使用 Swift Mailer、GMail 和 PHP 发送电子邮件,权限被拒绝错误
使用 PHP Mailer 从本地服务器外部的电子邮件地址发送 smtp 电子邮件
通过 Microsoft 365 SMTP 发送电子邮件时如何使用自定义显示名称? (以 PHP Swift Mailer 为例)