【问题标题】:How to use mailto on a self-submit form?如何在自提交表单上使用 mailto?
【发布时间】:2019-12-30 13:38:29
【问题描述】:

我必须对现有代码进行修改,并且我正在努力使用 mailto 功能。我希望当我提交表单时,会使用 Outlook(或配置的任何其他邮件程序)打开预先填充的邮件,以便用户可以检查是否一切正常,然后提交带有表单数据的邮件。

我想使用mailto:,因为目前该页面(即在本地服务器上,而不是在互联网上)仅适用于 IE(最后一个开发人员使用 ActiveX 数据对象,它不适用于 Edge/Chrome /火狐)。

我已经尝试将mailto: 放在表单的action 标记中,但没有成功,我也尝试了一些javascript,但发生了同样的情况。此外,我的表单使用 $_SERVER['PHP_SELF'] 全局变量提交给自己。

表格/代码很大,所以我只会把可能对你有用的部分放在帮助我的地方。

这是我使用的表格:

echo "<FORM action=". $_SERVER['PHP_SELF'] . " name=\"form\" method=\"POST\">";
"my form here"
echo "<input type=\"submit\" name=\"Envoyer\" value=\"Send\"/>";
echo "</FORM>";

然后,我想从表单中获取数据并在用户点击提交按钮时打开一个邮件程序,其中包含一个预填充的邮件,其中包含数据。

这是我使用的:

echo "<script>
    var email = $maildest;
    var subject = \"Request of the user\";
    var emailBody = $MAIL;
    window.location = \"mailto:\"+email+\"?subject=\"+subject+\"&body=\"+emailBody;";
    echo "</script>";
echo "An OUTLOOK window opened with the informations you entered. <br/>Send the email so we can take it into account.<br/>
exit(0);

我没有任何错误消息,页面工作正常,但是当我点击提交按钮时,没有任何反应,甚至邮件程序打开窗口或其他任何东西都没有。我确定我缺少一些东西,而且我对 php/html/javascript 有点生疏,所以我来这里寻求您的帮助。

【问题讨论】:

  • 所以明显的问题是你在最后一行没有变量 window.location = `mailto:?subject=&amp;body=`; 它应该看起来像 window.location = `mailto:${email}?subject=${subject}&amp;body=${emailBody}`;
  • 需要在最后一行的echo中使用单引号echo 'window.location = `mailto:${email}?subject=${subject}&amp;body=${emailBody}`;';
  • 哦,是的,现在它可以工作了.. 我觉得很愚蠢 lmao.. 我知道这是关于引号和东西的,当你不经常编码时,这件事很难.. 我有最后一个问题:我的邮件正文是用 HTML 编写的,但 mailto 似乎没有重新创建它,我在预先填充的邮件中拥有所有标签。我应该使用一些东西来正确编码吗?
  • 没有。您不能使用 mailto 发送 HTML,我确实建议您根本不使用 echo
  • 是的,我知道,但这不是我的代码,我只对其进行一些更改,直到有人回来,我不想更改他所做的一切......所以我不能用 html 格式化我的邮件?还有其他方法吗?像 /n 等。这只是一些基本的东西

标签: javascript php html forms mailto


【解决方案1】:

如果你不回显内容会更容易阅读

如果这样做,则需要连接 PHP 样式并为 JavaScript 使用反引号
注意:对于带有 ${} javascript vars 的行,您需要单引号,否则 $ 会被解释:

echo "<script> 
      var email = \"".$maildest."\"; 
      var subject = encodeURIComponent(\"Request of the user\"); 
      var emailBody = encodeURIComponent(\`".$MAIL."\`);"
echo 'window.location = `mailto:${email}?subject=${subject}&body=${emailBody}`;';
echo "</script>"; 

请注意 $MAIL 和最后一行的反引号,因为您可能在其中有换行符

你还需要转义空格和特殊字符

查看控制台 - mailto 通常作为表单操作效果更好

没有回声:

?>
An OUTLOOK window opened with the informations you entered. <br/>Send the email so we can take it into account.<br/>
<script>
    var email = "<?= $maildest ?>";
    var subject = encodeURIComponent("Request of the user");
    var emailBody = encodeURIComponent(`<?= $MAIL ?>`);
    window.location = `mailto:${email}?subject=${subject}&body=${emailBody}`;
    </script>
<? 
exit(0);
?>

这里是一个不使用服务器的版本:

window.addEventListener("load", function() {
  document.getElementById("form").addEventListener("submit", function(e) {
    e.preventDefault();
    var email = this.email.value,
      subject = encodeURIComponent("Request of the user"),
      elements = this.elements,
      emailTexts = [];
      
      [...elements].forEach(function(ele) {
        if (ele.type!="submit") emailTexts.push(ele.name + ":" + ele.value)
      })
    var emailBody = encodeURIComponent(emailTexts.join("\n"));
    var loc = `mailto:${email}?subject=${subject}&body=${emailBody}`;
    console.log(loc)
    window.location = loc;
  });
});
An OUTLOOK window will open with the informations you enter. <br/>Send the email so we can take it into account.<br/>
<form id="form" ....>
  Email: <input type="text" name="email" value="" /><br/> Name: <input type="text" name="Name" value="" /><br/> Comment: <textarea name="Comment"></textarea><br/>
  <input type="submit" />
</form>

【讨论】:

  • 好的,现在邮件打开了,已经好多了。但是邮件里面没有数据,主题框中只有一个“&body”。我使用了这个代码:echo "&lt;script&gt; var email = \"$maildest\"; var subject = encodeURIComponent(\"Request of the user\"); var emailBody = encodeURIComponent(\"$MAIL\"); window.location = 'mailto:${email}?subject=${subject}&amp;body=${emailBody}';"; echo "&lt;/script&gt;";
  • 在你的版本中你需要(\"".$MAIL."\")var email = \"".$maildest."\"
  • 也许我遗漏了一些东西,但仍然不能这样工作。我得到的只是预填充邮件主题框中代码的“&body”部分。我应该使用哪种方式?第二个 ?我觉得我快到了第一个..
  • 在您的版本中,您需要 echo "&lt;script&gt; var email = \"".$maildest."\"; var subject = encodeURIComponent(\"Request of the user\"); var emailBody = encodeURIComponent(`".$MAIL."`); window.location = `mailto:${email}?subject=${subject}&amp;body=${emailBody}`;"; echo "&lt;/script&gt;"; 请注意 $MAIL 和最后一行的反引号,因为您可能在那里有换行符
  • 现在我有一个带有反引号的 HTTP ERROR 500。我不明白他们应该做什么?非常感谢您的帮助
【解决方案2】:

您必须在表单上设置事件,因为您的 JS 代码仅在页面呈现时工作,而不是在表单提交时工作。

<form action=". $_SERVER['PHP_SELF'] . " name="form" method="POST" onsubmit="sendMail">
// Html form here
</form>
<script>
function sendMail(event) {
    // This method will stop default action of form's submit
    event.preventDefault();

    var email = "<?= $maildest ?>";
    var subject = encodeURIComponent("Request of the user");
    var emailBody = encodeURIComponent(`<?= $MAIL ?>`);
    window.location = `mailto:${email}?subject=${subject}&body=${emailBody}`;
}
</script>

【讨论】:

    猜你喜欢
    • 2011-10-16
    • 2016-11-27
    • 2013-05-14
    • 2010-10-28
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多