【发布时间】:2014-07-03 06:19:57
【问题描述】:
我正在尝试向所有客户发送电子邮件,邀请他们填写表格。该电子邮件包含网站的登录信息,因此对于每个客户来说都是不同的邮件。我总共有 600 多个客户,但我试图以 100 个为一组发送。但是,它只发送给前 24-25 个收件人。 我在这方面很新,你能帮帮我吗?
这是我的代码:
-
为前 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'); } -
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 @发送每条消息后)和消息正文。