【问题标题】:PHP mailer - double emails (Joomla module)PHP 邮件程序 - 双重电子邮件(Joomla 模块)
【发布时间】:2017-11-02 19:13:43
【问题描述】:

我有提交电子邮件并将用户电子邮件保存到数据库的 php 表单(Joomla 模块)。 表单正在检查数据库中是否已经存在用户电子邮件,如果没有,则保存电子邮件(创建新的 joomla 用户)并将邮件提交到管理员电子邮件和用户电子邮件。这部分工作正常。 但是如果电子邮件已经在数据库中(返回用户场景)表单会向管理员和用户发送双重电子邮件。

 $mailer = & JFactory::getMailer();

        $mailer->isHTML();
        $mailer->setSender($params->get('email_from'));
        $mailer->addRecipient($params->get('email_to'));
        $mailer->addBCC($email);
        $mailer->setSubject($params->get('subject'));
        $mailer->setBody($message); 

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query = 'SELECT id FROM #__users WHERE email = ' . $db->Quote($email);
$db->setQuery($query, 0, 1);
$check = $db->loadResult();

if(!$check){

    $udate = date('d/m/Y');
    $utime= date("h:i:s");
    $udata = array( 
    "name"=>"user".$udate."-".$utime,
    "username"=>"user".$utime,
    "password"=>$utime,
    "password2"=>$utime,
    "email"=>$email,
    "block"=>0,
    "groups"=>array("9")
);
$user = clone(JFactory::getUser());

if(!$user->bind($udata)) {
    throw new Exception("Could not bind data. Error: " . $user->getError());
}
if (!$user->save()) {
     throw new Exception("Could not save user. Error: " . $user->getError());
}
   return $user->id;         

 JFactory::getSession()->clear('user');


    }   

    $send = & $mailer->Send();
    $mailer->ClearAddresses();
    $mailer->ClearAllRecipients();
        if($send = true){
            echo "Mail sent";
            return true;
            }
        else if ($send != true)
        {
            echo "Error sending email: ". $send->message;
            return false;

            }

        }

【问题讨论】:

  • 我也试过这个但是没有结果 $send= & $mailer->Send(); if(!$send){ echo "发送电子邮件时出错:"。 $发送->消息;返回假; } 其他{ $mailer->ClearAllRecipients(); $mailer->清除地址(); $mailer->ClearBCCs();未设置($mailer); echo "邮件已发送";返回真;}

标签: php forms joomla


【解决方案1】:

您的代码中有一些明显的错误。行:

JFactory::getSession()->clear('user'); 

永远不会到达,因为脚本在此行之前返回。另外,这行:

if($send = true){

只需将 true 分配给 send 并且始终为 true。

我也质疑这一行:

$send = & $mailer->Send();

出于某种原因,您在这里分配了对 $send 的引用。别。

我不确定您为什么会看到观察到的错误,但是:我真的会考虑使用正确的缩进来正确格式化您的代码,这样更容易发现错误。并尝试清除其他错误...考虑到您的函数可能由于某种原因被调用两次...

【讨论】:

  • 感谢您回答我的问题 :) 当我回到 stackoverflow 时,我已经发现并纠正了您指出的问题。你在回答中说的最后一句话让我停下来思考,我查看了服务器日志,发现它被调用了两次,问题是由模块位置重复加载引起的:D
猜你喜欢
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
  • 2017-01-16
  • 2018-05-10
  • 2015-01-14
相关资源
最近更新 更多