- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
PHP 邮件程序一次发送两封电子邮件,我尝试不循环发送它,只发送一封电子邮件,但结果相同
我在 stackoverflow 上找到了这个但是没有改变任何东西
$mail->SingleTo = true;
那么我该怎么做才能让每个收件人只发送一封电子邮件呢?
这是我自定义的 Mailer 类
class Mailer
{
public static function sendMail($subject, $msgWithHtml, $msgNotHtml, array $recipients, array $attachmentPath = null )
{
$mail = new \PHPMailer;
//$mail->SMTPDebug = 3; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'mail.lotfio-lakehal.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'noreplay@lotfio-lakehal.com'; // SMTP username
$mail->Password = '------------'; // SMTP password
$mail->SMTPSecure = 'ssl'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 465; // TCP port to connect to
$mail->setFrom('noreplay@lotfio-lakehal.com');
foreach($recipients as $email)
{
$mail->addAddress($email); // Add a recipient // Name is optional
}
$mail->SingleTo = true; //will send mail to each email address individually
$mail->addReplyTo('contact@lotfio-lakehal.com', 'Information');
if($attachmentPath){
foreach($attachmentPath as $file)
{
$mail->addAttachment($file);
}
}
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = $subject;
$mail->Body = $msgWithHtml;
$mail->AltBody = $msgNotHtml;
return $mail->send();
}
}
下面是我如何调用这个方法
use fordev\app\helpers\Mailer;
Mailer::sendMail('Email test from mailer', '<div></div>', 'qdqsdq dqsdqsdqsd', ['lotfiolakehal@gmail.com','contact@lotfio-lakehal.com']);
最佳答案
SingleTo 仅在“mail”和“sendmail”传输中受支持,在“SMTP”中不受支持。
由于您使用“SMTP”传输,SingleTo 将不起作用。 PHPMailer 类的作者应该抛出一个异常来排除类似 SingleTo 实际上不被接受的情况。如果您使用 SMTP 传输,只需一个接一个地循环发送每个地址(只需调用一次 $mail->addAddress 为 PHPMailer 类的每个实例传递一个地址),并且不要触摸 SingleTo属性值,保持默认(false)。
SingleTo 计划在 PHPMailer 6.0 版本中弃用,并在 7.0 中删除。 PHPMailer 的作者解释说,最好在更高级别控制发送给多个收件人:
PHPMailer isn't a mailing list sender.
来源:https://github.com/PHPMailer/PHPMailer/issues/1042
Use of the PHP mail() function needs to be discouraged because it's extremely difficult to use safely; SMTP is faster, safer, and gives more control and feedback."
问题是“那么我该怎么做才能让每个收件人只发送一封电子邮件呢?”
只需修改 sendMail 的参数并将其从“array $recipients”更改为单个 $recipient,这样它将是:
public static function sendMail($subject, $msgWithHtml, $msgNotHtml, $recipient, array $attachmentPath = null )
并替换下面的代码
foreach($recipients as $email)
{
$mail->addAddress($email); // Add a recipient // Name is optional
}
到
$mail->addAddress($recipient);
如果您无法修改 sendMail 函数的声明,因为它已被其他代码使用,请保留它,但将其所有代码移至另一个函数:
public static function sendMailSingleRecipient($subject, $msgWithHtml, $msgNotHtml, $recipient, array $attachmentPath = null )
所以函数 sendMail 的代码将是这样的:
foreach($recipients as $email)
{
self::sendMailSingleRecipient($subject, $msgWithHtml, $msgNotHtml, $email, $attachmentPath)
}
整个代码如下:
class Mailer
{
public static function sendMailSingleRecipient($subject, $msgWithHtml, $msgNotHtml, $recipient, array $attachmentPath = null )
{
$mail = new \PHPMailer;
//$mail->SMTPDebug = 3; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'mail.lotfio-lakehal.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'noreplay@lotfio-lakehal.com'; // SMTP username
$mail->Password = '------------'; // SMTP password
$mail->SMTPSecure = 'ssl'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 465; // TCP port to connect to
$mail->setFrom('noreplay@lotfio-lakehal.com');
$mail->addAddress($recipient); // Add a recipient // Name is optional
$mail->addReplyTo('contact@lotfio-lakehal.com', 'Information');
if($attachmentPath){
foreach($attachmentPath as $file)
{
$mail->addAttachment($file);
}
}
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = $subject;
$mail->Body = $msgWithHtml;
$mail->AltBody = $msgNotHtml;
return $mail->send();
}
public static function sendMail($subject, $msgWithHtml, $msgNotHtml, array $recipients, array $attachmentPath = null )
{
foreach($recipients as $email)
{
self::sendMailSingleRecipient($subject, $msgWithHtml, $msgNotHtml, $email, $attachmentPath)
}
}
}
如果您仍然不喜欢每个地址的 sendMail 函数循环,但您需要使用 smtp 传输(不是 sendmail 而不是邮件),请不要使用第三方库中的\PHPMailer 类托管在 GitHub 上,自己实现 smtp 传输。无论如何,您都必须通过 TCP/IP 连接将每封邮件分别发送到 SMTP 服务器,但每封邮件将只有一个“收件人:”收件人,并且邮件不会重复。
如果您怀疑现有代码仍然存在但该函数被调用了两次,只需在您的代码中添加日志记录功能并检查它被调用了多少次。如果您可以看到 php 错误日志,只需将 error_log() 添加到函数的开头,例如
error_log(print_r($recipients, true));
或
error_log(implode(',', $recipients));
所以你会从日志中看到这个函数实际被调用了多少次。只是不要忘记从您的代码中删除 error_log 行。如果您无权访问错误日志文件,请使用 file_put_contents:
file_put_contents($filepath, implode(',', $recipients).PHP_EOL, FILE_APPEND);
在调用它之前,将 $filepath 设置为您有权访问的文件的路径名。
关于PHP Mailer 正在发送重复的电子邮件(一次发送两封电子邮件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43902916/
我有一个 Rails 邮件程序,目前只要用户回复另一个用户的评论,它就会成功发送电子邮件。 (电子邮件发送给被回复的人)。我正在尝试在电子邮件正文中添加一些动态内容,例如回复者的用户名和该用户的评论本
这是我的代码: require 'phpmailertesting/PHPMailerAutoload.php'; $mail = new PHPMailer; //$mail->SMTPDebug
我想获得有关在/etc/aliases 上运行脚本的问题的任何建议。首先,这是我的环境/脚本。 操作系统:centos 6 脚本:python 2.6.6 邮件:sendmail-8.14/dovec
当我在 Rails3 中使用 ActionMailer 时,我试图更好地理解良好的设计模式(如果它有所不同,则为 3.1)。 一般而言,对于 Rails 应用程序,我通常为整个应用程序创建一个邮件程序
我们能否在 PHP 邮件程序中将消息编译并存储为草稿,然后再发送每条消息? 最佳答案 用 PHPMailer 可以做到这一点。在用发送消息通常需要的所有内容配置 PHPMailer 实例后,不要调用
有没有办法将回调函数传递给 Laravel 的邮件程序? 我正在将 Mail 外观与可邮寄类一起使用,该类正在发送附件。我想在发送电子邮件后删除附件形式的存储。 电子邮件作业正在排队 Mail::to
我正在从 nagios 切换到 sensu。我正在使用厨师来自动化这个过程。一切都很好,除了邮件程序,或者实际上,我将它缩小到“管道”,它应该将 json 输出从支票重定向到处理程序。它没有。当我使用
我正在创建一个预订表格作为帮助,但我决定通过域而不是服务器发送邮件。这主要是为了提高安全性并减少响应和数据传输的限制。 过去几天我一直在研究这个,并试图自学如何让它发挥作用。我现在有一个非常简单的工作
这个问题不太可能对任何 future 的访客有帮助;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于互联网的全局受众。如需帮助使这个问题更广泛适用,visit the h
我正在尝试使用 the Mailer Plugin在我的戏里! 2 Java 应用程序。 我按照自述文件中的说明进行操作,但该模块未显示在我的应用程序的依赖项中。 所以当我尝试编译它时 Play !给
我想在电子邮件正文中包含使用 foreach 的结果。当我添加 foreach 语句时,PHP Mailer 似乎只是切断了消息。关于如何在消息正文中包含多个结果有什么想法吗? $mail->Body
我想利用现有的Mailer来自 Jenkins 的插件位于定义管道构建作业的 Jenkinsfile 中。鉴于以下简单的失败脚本,我希望每次构建都会收到一封电子邮件。 stage 'Test' nod
有没有办法拦截对 Play Mailer class 的调用? 我想记录我的应用程序发送的所有电子邮件。我想访问邮件程序方法参数和方法名称,并记录所有这些。 我尝试过使用@With,但我的@Befor
PHP 邮件程序一次发送两封电子邮件,我尝试不循环发送它,只发送一封电子邮件,但结果相同 我在 stackoverflow 上找到了这个但是没有改变任何东西 $mail->SingleTo = tru
我已关注installation steps由django-mailer的存储库提供者提供 但是当我尝试 ./manage.py test mailer 命令时 或./manage.py send_m
首先,我看到了这个问题:Send mail without blocking 'execution' 但是,我需要知道为什么 PHP 不是多线程进程,但如果两个人同时尝试连接却没有问题。 我实际上是通
我正在从数据库表中提取电子邮件地址并遍历它们以发送电子邮件。如果我注释掉 $mailer->send($message); 行,则会发送一封电子邮件,但只发送到表中的最后一行。如果我保留该行,电子邮件
我在下面有以下代码,需要测试在用户被暂停时发送电子邮件。 def suspendClient(client: Client, event: Event): EventResult = {
我最近加入了一个项目,其中每个客户都有自己的自定义 HTML 内容,用于发送给他们客户的电子邮件。 它通过将内容插入带有自定义标签的字符串,然后通过在邮件程序中设置 body 属性来发送,如下所示:
如何在java imap中获取x-mail?我已经编写了一个示例程序,但它运行不正常。我得到空值。我哪里出错了? import com.sun.mail.imap.IMAPFolder; im
我是一名优秀的程序员,十分优秀!