Recaptcha用我的服务器地址替换Formmail的“电子邮件”发件人字段没有Recaptcha,From字段可以正常工作为什么?

问题描述

我已经使用Tectite Formmail.PHP多年了。最后添加了Recaptcha ver 2(不可见模式)。它可以正常工作,除了它与 derive_fields 电子邮件字符串弄乱了。如果没有验证码,结果电子邮件 发件人 字段正确包含填写我的表单的人的姓名和电子邮件地址,这是从中得出的值来自“实名”和“电子邮件”。

例如 Ralph Waldo

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

例如*username@1a2b3c45.prod.phx1.example.net

如果我将表单恢复为标准标记并禁用Recaptcha(通过如下所示代码中使$ REQUIRE_CAPTCHA和$ RECAPTCHA_PRIVATE_KEY值无效),则会得到所需的 发件人 内容就像我以前一样。对于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";

解决方法

这是不寻常的行为。

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

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