使用 wp_mail() 将带有表单变量的电子邮件发送到电子邮件

Posted

技术标签:

【中文标题】使用 wp_mail() 将带有表单变量的电子邮件发送到电子邮件【英文标题】:Sending an email with form variables to an email using wp_mail() 【发布时间】:2021-05-18 15:54:43 【问题描述】:

我创建了一个 WP 模板并向其中添加了一个表单。 在表单下方,我添加了 wp_mail() 函数以将用户输入的数据发送到他们的电子邮件。

现在,我收到以下通知:

注意:未定义的索引:mypath 中的名称。

欢迎任何帮助如何解决这个问题。

编辑 1: 得到通知我必须删除 if 语句。

编辑 2: 这实际上是我所拥有的有关表单的所有代码。我错过了什么吗?我需要在某处添加add_action() 或类似的东西吗?

代码:


<form id="form" method="post" action="">
    <label for="name">Name:</label>
    <input type="text" id="name" name="name">
    </br>
    <label for="surname">Surname:</label>
    <input type="text" id="surname" name="surname">
    </br>
    <label for="email">Email:</label>
    <input type="email" id="email" name="email">
    </br>
    <label for="tel">Phone number:</label> 
    <input type="tel" id="tel" name="tel">
    </br>
    <input type="submit" value="Submit" name="submit">
</form>

<?php
if(isset($_POST['submit'])) 
    $name = $_POST['name'];
    $surname = $_POST['surname'];
    $email = $_POST['email'];
    $tel = $_POST['tel'];
                    
    $to = $_POST[$email]; //sendto@example.com
    $subject = 'Reservation';
    $body = 'Name: ' . $name .  '\r\n' .
            'Surname: ' . $surname .  '\r\n' .
            'Email ' . $email .  '\r\n' .
            'Phone number: ' . $tel .  '\r\n';
                            
    wp_mail( $to, $subject, $body );
    echo "Sent!";

?>


答案

编辑 3: 只是为了明确解决方案是 $to = $_POST['email']; //sendto@example.com 所以 ['email'] 不是 [$email]

【问题讨论】:

【参考方案1】:

if 语句是一个明智的检查 - 在 $_POST 变量中包含一些值之前,您不希望该代码运行。

但是,您的表单元素都没有名称!例如这个 &lt;input type="tel" id="tel"&gt; 应该 &lt;input type="tel" id="tel" name="tel"&gt;

没有它,你不会得到很多。

PS Checkout PHP heredoc。最后的代码可以更简洁地写成:

    $body = <<< EOT
      Name: $name
      Surname: $surname
      Email: $email
      Phone number: $tel
    EOT;

【讨论】:

感谢您的回复。添加名称“组件”并没有解决未定义的索引问题 =) 知道如何解决这个问题吗? 仍然缺少名称。这就是为什么您必须取消注释 IF。修复它,IF 可以保留(它应该保留)并且您不会收到警告,因为索引将存在。您可以使用 isset 来检查其他人,尽管较新版本的 PHP 允许这样编写:$value = $_POST['my-field'] ?? ''; 嘿,谢谢。我实际上确实更新了它,只是忘记在 SO 上编辑它。问题是,如果我删除 if 语句,我会收到通知(但我想这没关系,因为刷新时字段为空)。如果我添加 if 语句,通知在我重新加载后就消失了但是......一旦我点击提交,我仍然会收到一个通知(这仍然更好)并且它说:*通知:*输入电子邮件地址的未定义索引。它指向这个$to = $_POST[$email]; //sendto@example.com 有什么想法吗? $email = $_POST['email']没有$email = $_POST[$email]; 要明确$_POST['email'] 存在,$_POST[$email] 永远不会存在,因为此时 $email 等于他们输入的电子邮件地址。

以上是关于使用 wp_mail() 将带有表单变量的电子邮件发送到电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在 wp_mail() 函数中使用多个消息字段吗?

WP_MAIL() 不发送附件

wp_mail() 将电子邮件主题中的“-”转换为“-”

如何通过Javascript提交带有自定义变量的表单?

在 wordpress 中使用 wp_mail 发送 HTML 和纯文本电子邮件

使用 wp_mail() 发送 HTML 电子邮件时,CSS 将不起作用