【问题标题】:Sending emails to multiple addresses using config PHP file and PHP Mailer使用配置 PHP 文件和 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" =&gt; "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-&gt;addAddress($config['sendTo']); 行在选择多封电子邮件时遇到了麻烦。我们如何编辑此代码以允许多个收件人?非常希望确保我们的客户可以轻松地将电子邮件添加到 config.php 文件而不是发送文件中。

【问题讨论】:

  • 如果你查看examples for PHPMailer,你会发现你可以多次调用addAddress()
  • @ChrisHaas。那非常有帮助。现在问题已经解决了。谢谢

标签: php email phpmailer


【解决方案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" 拆分为四个地址,然后将它们全部添加。单个地址将浪费几个周期来转换为单元素数组,但随后也可以正常工作。

您可能还想过滤$addrsfilter_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']);
    

    这解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      • 2017-06-30
      • 1970-01-01
      相关资源
      最近更新 更多