【问题标题】:PHPmailer: Exclude input field from foreach loopPHPmailer:从foreach循环中排除输入字段
【发布时间】:2022-01-08 01:35:56
【问题描述】:

我很高兴使用https://github.com/PHPMailer/PHPMailer 运行一个联系表单,最近添加了https://friendlycaptcha.com 以尽量减少机器人通过该表单发送的垃圾邮件数量。我喜欢没有用户交互的时尚实现。一旦您单击表单中的第一个输入字段并自动解决,验证码就会被激活。 不幸的是,验证码的解决方案(隐藏输入字段)在我想排除的电子邮件中添加了一个巨大的字符串。

如何告诉 foreach 循环不要在撰写的邮件中包含 frc-captcha-solution?

    private function compose_mail($post)
{
    $content = "The following message has been received via contact form:\n\n";
    foreach($post as $name=>$value)
    {
        $content .= ucwords($name).": \t";
        $content .= "$value\n\n";
    }
    $this->mailer->Body  = $content;
}

这是生成并产生长字符串的表单中的输入字段。

<input name="frc-captcha-solution" class="frc-captcha-solution" type="hidden" value=".UNSTARTED">

我得到的一个例子是:

姓名:乔 电子邮箱:joe@miller.com 地址:100街 邮编:10100 地点:城市 电话:0123456789 msg:这是一条测试消息 FRC-验证码的溶液:f5e6874becd6758f456b78f6f1726e1d.YadsJVSp + / + j0pyBNAQwtjQAAAAAAAAAA = eFoDacaj3c .AAAAAJZoAQABAAAAQ5YAAAIAAADCJAUAAwAAAF9IAQAEAAAAj5cEAAUAAACwkQMABgAAAFcaAAAHAAAAfvIEAAgAAADvUwIACQAAAK / MAQAKAAAAm + MBAAsAAACU6AAADAAAAJZUAAANAAAA / dAEAA4AAABrSwEADwAAAC7mAAAQAAAAXFoDABEAAAD4UAEAEgAAACMEAAATAAAA3xcCABQAAABBHwMAFQAAAE6LAQAWAAAA1mwAABcAAAAmwwAAGAAAACIZBwAZAAAA6p4AABoAAADovwIAGwAAAFE / AAAcAAAA + d8BAB0AAACQ8gAAHgAAAO1fAgAfAAAAbtwCACAAAAA7EgEAIQAAABmWAQAiAAAA / ysAACMAAAAx0wIAJAAAAJsyBAAlAAAA6acBACYAAACATwAAJwAAAM / wBQAoAAAATLYJACkAAABT1AIAKgAAAMWWAwArAAAAzIAGACwAAAA3fwAA.AgAA P>

【问题讨论】:

    标签: forms input foreach phpmailer


    【解决方案1】:

    有很多方法可以做到这一点,但一种是当它出现在循环中时跳过该名称:

    private function compose_mail($post)
    {
        $content = "The following message has been received via contact form:\n\n";
        foreach($post as $name => $value) {
            if ($name !== 'frc-captcha-solution') {
                $content .= ucwords($name).": \t";
                $content .= "$value\n\n";
            }
        }
        $this->mailer->Body = $content;
    }
    

    【讨论】:

    • 非常感谢,就像一个魅力。现在唯一剩下的就是去掉邮件内容中的 $name 值,这样我只得到输入数据而不是每个输入字段的名称。当我删除 $content .= ucwords($name).": \t"; tho 并且只使用 &value 发送的电子邮件,但是给出成功消息的 DIV 替换永远不会出现,所以用户没有得到反馈,看起来发送按钮没有功能:(我在这里建立了一个调试站点测试它:pat.jakob-nawka.de
    • 您没有显示其余代码,但我怀疑您可能会在它只需要纯文本时将其作为 HTML 发送。尝试拨打$mail-&gt;isHTML(false)
    猜你喜欢
    • 2012-10-30
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    相关资源
    最近更新 更多