首页 > 解决方案 > Recaptcha 将 Formmail 的“电子邮件”(发件人)字段替换为我的服务器地址。如果没有 Recaptcha,From 字段可以正常工作。为什么?

问题描述

多年来,我一直在使用 Tectite Formmail.php。最后添加了 Recaptcha ver 2(不可见模式)。它工作正常,除了它与derive_fields电子邮件字符串混淆。如果没有验证码,结果电子邮件的“发件人”字段会正确包含填写我的表单的人的姓名和电子邮件地址,这是从“实名”和“电子邮件”派生的值。

例如,拉尔夫沃尔多 <rwaldoexample@gmail.com

当我启用 ReCaptcha 时,结果电子邮件的From字段不希望地显示我的托管帐户用户名和服务器地址:

例如,*用户名@1a2b3c45.prod.phx1.example.net

如果我将表单恢复为标准标记并禁用 Recaptcha(通过将 $REQUIRE_CAPTCHA 和 $RECAPTCHA_PRIVATE_KEY 值清零,如下所示的代码),我会像以前一样获得所需的From内容。此行为与 Formmail v 9.15 和 9.19 相同。

如果这是 Recaptcha 的标准程序,它似乎没有记录。如果没有,解决方法是什么?

SNIPPETS, PER REQUEST:

In web page header:
<!-- CAPTCHA Ver2 Invisible  -->
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<script>
    function onSubmit(token) {
        document.getElementById("Contact_Form").submit();
    }
</script>
<!-- end CAPTCHA -->  

In web page HTML
<form id="Contact_Form" action="https://www.example.com/formmail.php" method="post" name="Formtype 1">
<input name="good_url" value="https://www.example.com/tnxpg.html" type="hidden" />
<INPUT NAME="subject" TYPE="hidden" VALUE="~~FORM RECEIVED - Main mail form">
<!-- OTHER INFO TO APPEAR IN EMAIL -->
<input type="hidden"  name="form_version" value="Visitor used Main Form">
<input type="hidden" name="mail_options" value="FromAddr=formmssg1@example.com" />

<!-- DON'T CHANGE THE FOLLOWING ... EXCEPT put actual field names after equals signs. -->
<!-- this derives (creates) "email" and "realname" special fields from the input fields -->
<input type="hidden" name="derive_fields" value="email=EmailAddr,realname=FullName" />

<!-- DON'T CHANGE THE FOLLOWING! -->
    <!-- this excludes the "email" and "realname" special fields from the body of the email you receive -->
    <input type="hidden" name="mail_options" value="Exclude=email;realname" >
<input name="env_report" value="REMOTE_HOST,REMOTE_ADDR,HTTP_USER_AGENT,AUTH_TYPE,REMOTE_USER" type="hidden" />

* * *

<input type="hidden" name="derive_fields" value="imgverify=g-recaptcha-response" />

<!-- with this simple Submit tag and the private key removed from Formmail.php, results email From is correct -->
<!--
<input type="submit" value=" Send message ">
-->

<input type="submit" value=" Send Message " class="g-recaptcha" data-callback="onSubmit" data-sitekey="PublicKeyGoesHere" / >

In formmail.php:

/* Help: http://www.tectite.com/fmdoc/require_captcha.php */
//// DO NOT USE CAPTCHA
//// $REQUIRE_CAPTCHA = ""; /* set to a message string if your forms */
//// USE CAPTCHA
$REQUIRE_CAPTCHA = "Confirm you are not a robot."; 
/* set to a message string if your forms must provide a CAPTCHA string*/

/* Help: http://www.tectite.com/fmdoc/recaptcha_private_key.php */
//// DO NOT USE CAPTCHA
//$RECAPTCHA_PRIVATE_KEY = "";
//// USE CAPTCHA
$RECAPTCHA_PRIVATE_KEY = "myprivatekeygoeshere";

标签: serverrecaptchacaptchainvisible-recaptchaformmail

解决方案


这是不寻常的行为。

我怀疑您的 HTML 中存在语法错误,这会导致表单提交受损。

您应该在https://validator.w3.org/验证您的 HTML


推荐阅读