【问题标题】:Mail from function dispalying as unknown sender?来自功能显示为未知发件人的邮件?
【发布时间】:2018-07-29 20:26:16
【问题描述】:

我试图在联系表单的输入字段中显示姓名以显示提交电子邮件后输入的姓名,我在 php 中更改了标题,并且它已从 cgi-mailer 更改为未知发件人?我如何让它显示联系人表单中没有电子邮件的人的姓名?

谢谢

控制验证等的表单进程php

    // define variables and set to empty values
    $name_error = $email_error = "";
    $name = $email = $message = $success = "";
    $from = $_POST['name1'];

    //form is submitted with POST method
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        if (empty($_POST["name1"])) {
            $name_error = "Name is required";
        } else {
            $name = test_input($_POST["name1"]);
            // check if name only contains letters and whitespace
            if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
                $name_error = "Only letters and white space allowed";
            }
        }

        if (empty($_POST["email"])) {
            $email_error = "Email is required";
        } else {
            $email = test_input($_POST["email"]);
            // check if e-mail address is well-formed
            if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
                $email_error = "Invalid email format";
            }
        }

        if (empty($_POST["message"])) {
            $message = "";
        } else {
            $message = test_input($_POST["message"]);
        }

        if ($name_error == '' and $email_error == '' ){
            $message_body = '';
            unset($_POST['submit']);
            foreach ($_POST as $key => $value){
                $message_body .=  "$key: $value\n";
            }

            $to = 'devonfoodmovement@gmail.com';
            $subject = 'Contact Form Submit';
            $headers = "From:" . $from;
            if (mail($to, $subject, $message, $headers)){
                $success = "Message sent";
                $name = $email = $message = '';
            }
        }

        /*if(isset($_POST['submit'])) {
            $from = $_POST['name1'];

            $headers = "From:" . $from;

        }*/

    }

    function test_input($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }

联系表单html

 <?php include('form_process.php');
        /*if (isset($_POST['contact-submit'])){

            $url = 'https://www.google.com/recaptcha/api/siteverify';
            $privatekey = "secretkeygoogle";

            $response = file_get_contents($url."?secret=".$privatekey."&response=".$_POST['g-recaptcha-response']."&remoteip=".$_SERVER['REMOTE_ADOR']);

            $data = json_decode($response);

            if(isset($data->success) AND $data->success==true) {

            }else{

            }


        }*/


    ?>
    <div class="home-btn"><a href="http://testsiteclash.co.uk/"><i class="fas fa-home"></i></a></div>
    <div class='grey'>
        <div class="container-contact">
            <form id="contact" method="post">
                <div id="column-contact-left">
                <div class='contact-logo'></div>
                <h3>Contact the Devon Food Movement</h3>
                <fieldset>
                    <input placeholder="Your name" type="text" tabindex="1" name="name1" value="<?= $name ?>" autofocus>

                </fieldset>
                <span class="error"><?= $name_error ?></span>
                <fieldset>
                    <input placeholder="Your Email Address" type="text" name="email" value="<?= $email ?>" tabindex="2" >

                </fieldset>
                <span class="error"><?= $email_error ?></span>
                </div>
                <div id="column-contact-right">
                <fieldset>
                    <textarea placeholder="Type your Message Here...." name="message" value="<?= $message ?>" tabindex="3" ></textarea>
                </fieldset>
                <div class="g-recaptcha" data-sitekey="needtoinput" ></div>
                <span class="success"><?= $success; ?></span>
                <fieldset>
                    <button name="submit" type="submit" id="contact-submit" data-submit="...Sending">Submit</button>
                </fieldset>
                </div>
            </form>
        </div>
    </div>

新表单 p[处理 php 与单独的邮件功能

    <?php


    // define variables and set to empty values
    $name_error = $email_error = "";
    $name = $email = $message = $success = "";

    //form is submitted with POST method
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        if (empty($_POST["name1"])) {
            $name_error = "Name is required";
        } else {
            $name = test_input($_POST["name1"]);
            // check if name only contains letters and whitespace
            if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
                $name_error = "Only letters and white space allowed";
            }
        }

        if (empty($_POST["email"])) {
            $email_error = "Email is required";
        } else {
            $email = test_input($_POST["email"]);
            // check if e-mail address is well-formed
            if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
                $email_error = "Invalid email format";
            }
        }

        if (empty($_POST["message"])) {
            $message = "";
        } else {
            $message = test_input($_POST["message"]);
        }

        if ($name_error == '' and $email_error == '' ){
            $message_body = '';
            unset($_POST['submit']);
            foreach ($_POST as $key => $value){
                $message_body .=  "$key: $value\n";
            }

            $to = 'devonfoodmovement@gmail.com';
            $subject = 'Contact Form Submit';
            if (mail($to, $subject, $message, $headers)){
                $success = "Message sent";
                $name = $email = $message = '';
            }
        }

        /*if(isset($_POST['submit'])) {
            $from = $_POST['name1'];

            $headers = "From:" . $from;

        }*/

    }

    $from = $_POST['name1'];
    $headers = "From:" . $from;

    if (isset($_POST['submit'])) {

    mail($headers);

    }

    function test_input($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }

我发表的最后一条评论的最新 PHP

   if ($name_error == '' and $email_error == '' ){
        $message_body = '';
        unset($_POST['submit']);
        foreach ($_POST as $key => $value){
            $message_body .=  "$key: $value\n";
        }



        $email = $_POST['email'];
        $to = 'devonfoodmovement@gmail.com';
        $subject = 'Contact Form Submit';
        $headers = 'From:' . $email . "\n" . 'Reply-to: ' . $email . "\n"  ;
        if (mail($to, $subject, $message, $headers)){
            $success = "Message sent";
            $name = $email = $message = '';
        }
    }

【问题讨论】:

  • 尝试创建一个邮件函数,而不是按原样调用它,然后从调用邮件函数的 var 中返回名称并将其显示在您需要的任何位置。无需在 vars 上设置 void 值,因为它们将在函数行为之后被标记为可重写。
  • @JoelBonetR 我已经更改了表单处理 php 文件,现在它正在我的电子邮件收件箱中返回 cgi 邮件?我做了一个单独的邮件功能
  • 首先,您需要为From 指定一个有效的电子邮件地址。您的表单字段name1 要求用户仅输入他们的姓名,这不是有效的电子邮件地址。其次:甚至不要尝试。这会极大地增加您的邮件被归类为垃圾邮件的可能性(因为您的服务器未注册为“允许”为该域发送电子邮件的服务器)用户的电子邮件属于) - 发送使用您的电子邮件地址之一的邮件,允许服务器发送;把用户的邮箱地址放在Reply-To字段里,方便收信人回复。
  • 注意@CBroe 的建议。我认为您正在尝试“重新发明轮子”。使用 php 邮件功能,因为它可以正常工作,如果您想显示“谢谢,乔发送您的消息”或类似的东西,请按照我告诉您的操作并捕获名称,但不修改邮件功能的默认行为,它可以是一个真正的头痛,你正在寻找简单的东西......
  • 它目前正在将我的个人电子邮件地址设置为我的电子邮件客户端中的发件人,因为我有变量 $email 用于发件人:

标签: php html email-validation


【解决方案1】:

将电子邮件设置为 from 发件人,因为看起来 from 值必须是有效的电子邮件地址

            if ($name_error == '' and $email_error == '' and ($res['success']) ){
            $message_body = '';
            unset($_POST['submit']);

            foreach ($_POST as $key => $value){
                $message_body .=  "$key: $value\n";
            }

            $email = $_POST['email'];
            $to = 'devonfoodmovement@gmail.com';
            $subject = 'Contact Form Submit';
            $headers = 'From:' . $email . "\n" . 'Reply-to: ' . $email . "\n"  ;
            if (mail($to, $subject, $message, $headers)) {
                $sent = "Message sent";
                $name = $email = $message = '';
            }

【讨论】:

    【解决方案2】:

    您的表单上必须有必填字段,如果需要,也可以询问姓名。

       <?php
       function defaultMailing($to, $subject, $txt, $headers){
                 if(mail($to, $subject, $txt, $headers)) return true; else return false;
        }
            ?>
    

    在另一部分(您的表单操作):

    $to = $_POST['to'];
    $subject = $_POST['subject'];
    $txt = $_POST['message'];
    //you don't need name, but if you asked for on the form:
    $msg = "thanks, ".$_POST['name']." for your message, your request will be answered soon.";
    
    //call to mail function and send the required (to, subject and text/html message) and the optional headers if you want
    defaultMailing($to, $subject, $txt, $headers);
    
    //do whatever you want with $msg or with $_POST['name'];
    

    如果您想在邮件中插入发布的名称,只需修改 $txt var,将 $_POST['name'] 设置在您想要的任何位置,然后继续执行 defaultMailing 调用,例如:

    $to = $_POST['to'];
    $subject = $_POST['subject'];
    $txt = $_POST['message'];
    
    $name = $_POST['name'];    
    $mailMessage = $name.' '.$txt;
    //call to mail function and send the required (to, subject and text/html message) and the optional headers if you want
    defaultMailing($to, $subject, $mailMessage, $headers);
    

    【讨论】:

    • 我并不想回复发邮件的人,尽管只是在我的电子邮件客户端中显示他们的姓名,并将回复功能设置为轻松回复与我联系的人?这似乎是在收到电子邮件后发送回复?
    • 为了使回复更简单,您必须使用回复字段,名称是可选的,您可以显示它,但在任何情况下都不能将其用作“键”或“id”。您可以将邮件地址与以前使用的用户名相关联,但您可能需要将其存储在任何地方(好像不是每次都必须遍历所有邮件文件,并且在某些日子里它可能会像 fck 一样慢)。我不知道我们是否理解你想要什么,我不确定你是否拿了笔和纸并认为它合乎逻辑...... :(
    • 啊,好吧,所以基本上我的表单中的reguired字段用于名称验证,但我会使用回复来显示发件人的电子邮件地址,并使其可以通过电子邮件回复用户谁发的询问?所以试图在我的电子邮件客户端中显示在表单中输入的名称作为粗体的发件人基本上是没有意义的?
    • 是不是因为我的名称变量在顶部设置为一个空字符串,所以在配置 from 时它会返回未知发件人的原因?
    • 对,我现在已经完成了所有工作,除了它返回未知发件人作为来自我认为它将 $name 的顶部变量作为空字符串。我通过使用“\n”分隔信息解决了其他问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多