【问题标题】:Trying to send multiple e-mails with PHPMailer尝试使用 PHPMailer 发送多封电子邮件
【发布时间】:2014-07-03 06:19:57
【问题描述】:

我正在尝试向所有客户发送电子邮件,邀请他们填写表格。该电子邮件包含网站的登录信息,因此对于每个客户来说都是不同的邮件。我总共有 600 多个客户,但我试图以 100 个为一组发送。但是,它只发送给前 24-25 个收件人。 我在这方面很新,你能帮帮我吗?

这是我的代码:

  1. 为前 100 个客户选择所有电子邮件地址的表单,当我单击发送时,应向每个客户发送自定义消息:

    <?php
    include ('header.php');
    $con = mysqli_connect("localhost", "root", "", "export_declarations");
    $result = mysqli_query($con,"SELECT c_id, company_name,username,password,name, email,   authorized_person_name,authorized_person_email FROM test_invite
        WHERE c_id<75 AND (grouping ='' OR grouping LIKE '%no agreement%' OR grouping LIKE '%merger with client%')");
    while ($row = mysqli_fetch_assoc($result))
       {
            $data[$row['c_id']]['ID'] = $row['c_id'];
            $data[$row['c_id']]['comp_name'] = $row['company_name'];
            $data[$row['c_id']]['contacts'] = $row['name'];
            $data[$row['c_id']]['contacts_emails'] = str_replace(",",", ",$row['email']);
            $data[$row['c_id']]['authorized_contact_name'] = $row['authorized_person_name'];
            $data[$row['c_id']]['authorized_contact_email'] = $row['authorized_person_email'];
            $data[$row['c_id']]['username'] = $row['username'];
            $data[$row['c_id']]['password'] = $row['password'];
        }
    
    $html = "<table>
            <form method = 'post'>
                <th><u>A.</u> <br/>Company ID</th>
                <th><u>B.</u> <br/> Company name</th>
                <th><u>C.</u> <br/> All contacts</th>
                <th><u>D.</u> <br/> E-mails, all contacts</th>
                <th><u>E.</u> <br/> Authorized contact</th>
                <th><u>F.</u> <br/> E-mail, authorized contact</th>";
    
    foreach ($data as $key=>$val)
    {
            $html .= "<tr>
                    <input type = 'hidden' name = 'name[{$key}]' value = '{$data[$key]['authorized_contact_name']}'>
                    <input type = 'hidden' name = 'email[{$key}]' value = '{$data[$key]['authorized_contact_email']}'>
                    <input type = 'hidden' name = 'username[{$key}]' value = '{$data[$key]['username']}'>
                    <input type = 'hidden' name = 'pass[{$key}]' value = '{$data[$key]['password']}'>
                    <input type = 'hidden' name = 'company[{$key}]' value = '{$data[$key]['comp_name']}'>";
    foreach ($val as $subkey => $value)
    {
              if (!(($subkey == 'username') OR ($subkey == 'password')))
             {
                $html .="<td>{$value}</td>";
             }
    }
    $html .="</tr>";
    }
    
    $html .="</table>
                <input type='submit' name='doSubmit' value = 'send'>
            </form>";
    echo $html;
    
    if (isset($_POST['doSubmit']))
    {
        include('send_mail_logins.php');
    }
    
  2. send_mail_logins.php

    <?php
    require '/../PHPMailer/PHPMailerAutoload.php';
    foreach ($_POST['name'] as $key=>$val)
    {   
         $mail = new PHPMailer;
         $mail->isSMTP();
         $mail->SMTPAuth   = true;     
         $mail->SMTPSecure = "tls";             
         $mail->Host       = "smtp.gmail.com";  
         $mail->Port       = 587;           
         $mail->Username   = "camelia.petriu@gmail.com";  // GMAIL username
         $mail->Password   = "password";            // GMAIL password
    
         $mail->From = 'camelia.petriu@gmail.com';
         $mail->FromName = 'camelia.petriu@com';
         $mail->WordWrap = 50;                               
         $mail->isHTML(true);                                 
         $mail->Subject = 'Request for Export Details';
         $mail->addAddress("{$_POST['email'][$key]}");
    
         $content ="<p>Dear {$val},</p>
                <p>...</p>
                Username: {$_POST['username'][$key]}
                Password: {$_POST['pass'][$key]}";
         $sent_to = "";
         $not_sent_to="";
         $mail->Body = $content;
         //$mail->AltBody = $altcontent;
    
         if(!$mail->send()) {
         $not_sent_to .= "<p style = 'color:red'>Message could not be sent to {$_POST['email'][$key]}.</p>";
         echo 'Mailer Error: ' . $mail->ErrorInfo;}
         }
        else
        {
              $sent_to.= "<p>Message sent to {$_POST['email'][$key]}</p>";
        }
    }
    echo $sent_to;
    echo $not_sent_to;
    

稍后我将用我们的组织帐户替换我的 gmail 帐户

非常感谢!

【问题讨论】:

  • 您是否收到任何错误消息?
  • 如果您在脚本之外运行该 SQL 查询,您是否获得了您所追求的 100 位客户?
  • 是的,我在第一步中获得了整个客户列表。我用我自己的电子邮件 ID 替换了他们的电子邮件 ID 以进行测试。单击“发送”后,我没有收到任何错误,但只收到 23-25 条消息。
  • 我敢打赌这是因为您达到了 GMail 的发送限制。请参阅下面的答案。
  • 另一个提示 - 无需每次循环都创建一个新的 PHPMailer 实例 - 在开始时创建一个实例并使用它来发送多条消息,只需更改它发送到的地址(调用 @987654323 @发送每条消息后)和消息正文。

标签: php phpmailer


【解决方案1】:

您不应该使用 GMail 发送批量电子邮件,我会说您遇到错误是因为您已达到 GMail 发送限制。请小心,因为经常这样做可能会阻止您的 GMail 帐户! (见http://www.labnol.org/internet/email/gmail-daily-limit-sending-bulk-email/2191/

我建议您考虑注册一个适当的交易电子邮件服务,例如Mandrill。甚至他们的免费套餐也允许您每月发送大约 10,000 封电子邮件。

【讨论】:

  • 非常感谢!情况可能是这样,尽管我在第一次试用时就遇到了这个问题,而且我并没有尝试发送超过 100 个,这似乎是每日限制。但我会调查 Mandrill。
猜你喜欢
  • 1970-01-01
  • 2020-02-24
  • 2017-06-05
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-14
相关资源
最近更新 更多