Pergunta

Considering that my experience with PHP is limited, I used a contact form generator that works almost as I want it. The form, and all of its variables function properly, however upon receiving the email, it adds my own domain as the senders email. I want to have the person who completed the contact form's email as the sender, so that I can easily reply to the message (rather than copy and pasting the email address from inside the message).

Here is part of the code:

<?php

$where_form_is="http://".$_SERVER['SERVER_NAME'].strrev(strstr(strrev($_SERVER['PHP_SELF']),"/"));

session_start();
if( ($_SESSION['security_code']==$_POST['security_code']) && (!empty($_POST['security_code'])) ) { 
// Checkbox handling
$field_4_opts = $_POST['field_4'][0].",". $_POST['field_4'][1].",". $_POST['field_4'][2];

// Checkbox handling
$field_5_opts = $_POST['field_5'][0].",". $_POST['field_5'][1].",". $_POST['field_5'][2].",". $_POST['field_5'][3];

mail("mail@mail.com","phpFormGenerator - Form submission","Form data:

Your Name:: " . $_POST['field_1'] . " 
Country:: " . $_POST['field_2'] . " 
Your Email:: " . $_POST['field_3'] . " 
Your areas of interest:: $field_4_opts
What type of articles are you interested in writing?:: $field_5_opts
Any other types of articles that interest you?:: " . $_POST['field_6'] . " 
Approximately how often will you contribute?: " . $_POST['field_7'] . " 
Your blog/website:: " . $_POST['field_8'] . " 
What would make you a good contributor?: " . $_POST['field_9'] . " 


 powered by phpFormGenerator.
");

include("confirm.html");
}
else {
echo "Invalid Captcha String.";
}

?>

install.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>testing2 - created by phpFormGenerator</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"><link href="style.css" rel="stylesheet" type="text/css">
    <!-- calendar stuff -->
          <link rel="stylesheet" type="text/css" href="calendar/calendar-blue2.css" />
          <script type="text/javascript" src="calendar/calendar.js"></script>
          <script type="text/javascript" src="calendar/calendar-en.js"></script>
          <script type="text/javascript" src="calendar/calendar-setup.js"></script>
    <!-- END calendar stuff -->

    <!-- expand/collapse function -->
    <SCRIPT type=text/javascript>
    <!--
    function collapseElem(obj)
    {
        var el = document.getElementById(obj);
        el.style.display = 'none';
    }


    function expandElem(obj)
    {
        var el = document.getElementById(obj);
        el.style.display = '';
    }


    //-->
    </SCRIPT>
    <!-- expand/collapse function -->


    <!-- expand/collapse function -->
        <SCRIPT type=text/javascript>
        <!--

        // collapse all elements, except the first one
        function collapseAll()
        {
            var numFormPages = 1;

            for(i=2; i <= numFormPages; i++)
            {
                currPageId = ('mainForm_' + i);
                collapseElem(currPageId);
            }
        }


        //-->
        </SCRIPT>
    <!-- expand/collapse function -->


     <!-- validate -->
    <SCRIPT type=text/javascript>
    <!--
        function validateField(fieldId, fieldBoxId, fieldType, required)
        {
            fieldBox = document.getElementById(fieldBoxId);
            fieldObj = document.getElementById(fieldId);

            if(fieldType == 'text'  ||  fieldType == 'textarea'  ||  fieldType == 'password'  ||  fieldType == 'file'  ||  fieldType == 'phone'  || fieldType == 'website')
            {   
                if(required == 1 && fieldObj.value == '')
                {
                    fieldObj.setAttribute("class","mainFormError");
                    fieldObj.setAttribute("className","mainFormError");
                    fieldObj.focus();
                    return false;                   
                }

            }


            else if(fieldType == 'menu'  || fieldType == 'country'  || fieldType == 'state')
            {   
                if(required == 1 && fieldObj.selectedIndex == 0)
                {               
                    fieldObj.setAttribute("class","mainFormError");
                    fieldObj.setAttribute("className","mainFormError");
                    fieldObj.focus();
                    return false;                   
                }

            }


            else if(fieldType == 'email')
            {   
                if((required == 1 && fieldObj.value=='')  ||  (fieldObj.value!=''  && !validate_email(fieldObj.value)))
                {               
                    fieldObj.setAttribute("class","mainFormError");
                    fieldObj.setAttribute("className","mainFormError");
                    fieldObj.focus();
                    return false;                   
                }

            }



        }

        function validate_email(emailStr)
        {       
            apos=emailStr.indexOf("@");
            dotpos=emailStr.lastIndexOf(".");

            if (apos<1||dotpos-apos<2) 
            {
                return false;
            }
            else
            {
                return true;
            }
        }


        function validateDate(fieldId, fieldBoxId, fieldType, required,  minDateStr, maxDateStr)
        {
            retValue = true;

            fieldBox = document.getElementById(fieldBoxId);
            fieldObj = document.getElementById(fieldId);    
            dateStr = fieldObj.value;


            if(required == 0  && dateStr == '')
            {
                return true;
            }


            if(dateStr.charAt(2) != '/'  || dateStr.charAt(5) != '/' || dateStr.length != 10)
            {
                retValue = false;
            }   

            else    // format's okay; check max, min
            {
                currDays = parseInt(dateStr.substr(0,2),10) + parseInt(dateStr.substr(3,2),10)*30  + parseInt(dateStr.substr(6,4),10)*365;
                //alert(currDays);

                if(maxDateStr != '')
                {
                    maxDays = parseInt(maxDateStr.substr(0,2),10) + parseInt(maxDateStr.substr(3,2),10)*30  + parseInt(maxDateStr.substr(6,4),10)*365;
                    //alert(maxDays);
                    if(currDays > maxDays)
                        retValue = false;
                }

                if(minDateStr != '')
                {
                    minDays = parseInt(minDateStr.substr(0,2),10) + parseInt(minDateStr.substr(3,2),10)*30  + parseInt(minDateStr.substr(6,4),10)*365;
                    //alert(minDays);
                    if(currDays < minDays)
                        retValue = false;
                }
            }

            if(retValue == false)
            {
                fieldObj.setAttribute("class","mainFormError");
                fieldObj.setAttribute("className","mainFormError");
                fieldObj.focus();
                return false;
            }
        }
    //-->
    </SCRIPT>
    <!-- end validate -->




</head>

<body onLoad="collapseAll()">

<div id="mainForm">




    <div id="formHeader">
            <h2 class="formInfo">testing2</h2>
            <p class="formInfo"></p>
    </div>


    <BR/><div id="footer"><p class="footer"><a class=footer href=http://phpformgen.sourceforge.net>Generated by phpFormGenerator</a></p></div>

</body>
</html>

Can you kindly find what I will need to change?

Foi útil?

Solução

Add the relevant headers before calling the mail function in PHP.

    $headers = 'From: user@example.com' . "\r\n" .
    'Reply-To: user@example.com' . "\r\n";

mail($to, $subject, $message, $headers);

In your case:

<?php

$where_form_is="http://".$_SERVER['SERVER_NAME'].strrev(strstr(strrev($_SERVER['PHP_SELF']),"/"));

session_start();
if( ($_SESSION['security_code']==$_POST['security_code']) && (!empty($_POST['security_code'])) ) { 
// Checkbox handling
$field_4_opts = $_POST['field_4'][0].",". $_POST['field_4'][1].",". $_POST['field_4'][2];

// Checkbox handling
$field_5_opts = $_POST['field_5'][0].",". $_POST['field_5'][1].",". $_POST['field_5'][2].",". $_POST['field_5'][3];

$message = "Form data:
        Your Name:: " . $_POST['field_1'] . " 
        Country:: " . $_POST['field_2'] . " 
        Your Email:: " . $_POST['field_3'] . " 
        Your areas of interest:: $field_4_opts
        What type of articles are you interested in writing?:: $field_5_opts
        Any other types of articles that interest you?:: " . $_POST['field_6'] . " 
        Approximately how often will you contribute?: " . $_POST['field_7'] . " 
        Your blog/website:: " . $_POST['field_8'] . " 
        What would make you a good contributor?: " . $_POST['field_9'] . " 


         powered by phpFormGenerator.
        ";

     $headers = 'From: '.$_POST['field_3']. "\r\n" .
            'Reply-To: '.$_POST['field_3'] . "\r\n" .
            'X-Mailer: PHP/' . phpversion();

      mail("mail@mail.com","phpFormGenerator - Form submission", $message, $headers);

include("confirm.html");
}
else {
echo "Invalid Captcha String.";
}

?>

Outras dicas

You should go learn PHP, that form code that was auto-generated is just awful.

<?php

$where_form_is="http://".$_SERVER['SERVER_NAME'].strrev(strstr(strrev($_SERVER['PHP_SELF']),"/"));

session_start();
if( ($_SESSION['security_code']==$_POST['security_code']) && (!empty($_POST['security_code'])) ) { 
// Checkbox handling
$field_4_opts = $_POST['field_4'][0].",". $_POST['field_4'][1].",". $_POST['field_4'][2];

// Checkbox handling
$field_5_opts = $_POST['field_5'][0].",". $_POST['field_5'][1].",". $_POST['field_5'][2].",". $_POST['field_5'][3];

mail("mail@mail.com","phpFormGenerator - Form submission","Form data:

Your Name:: " . $_POST['field_1'] . " 
Country:: " . $_POST['field_2'] . " 
Your Email:: " . $_POST['field_3'] . " 
Your areas of interest:: $field_4_opts
What type of articles are you interested in writing?:: $field_5_opts
Any other types of articles that interest you?:: " . $_POST['field_6'] . " 
Approximately how often will you contribute?: " . $_POST['field_7'] . " 
Your blog/website:: " . $_POST['field_8'] . " 
What would make you a good contributor?: " . $_POST['field_9'] . " 


 powered by phpFormGenerator.
", 'From: ' . $_POST['field_3']);

include("confirm.html");
}
else {
echo "Invalid Captcha String.";
}

?>

I added a new parameter to the mail() function which sets the from header. , 'From: ' . $_POST['field_3'] is what I added. It appears the field_3 should contain the user's email. Try it out and see if it works.

Just make your code look beautiful and some headers to it.. Its gonna do your job With header you can do anything which you can do with your EMail client like GMAIL.. (Attaching file or anything else)

<pre> 

$headers =  'From: abc@example.com' . "\r\n" .
            'Reply-To: def@example.com' . "\r\n" .
            'X-Mailer: PHP/' . phpversion();

$message = "Form data:
    Your Name:: " . $_POST['field_1'] . " 
    Country:: " . $_POST['field_2'] . " 
    Your Email:: " . $_POST['field_3'] . " 
    Your areas of interest:: $field_4_opts
    What type of articles are you interested in writing?:: $field_5_opts
    Any other types of articles that interest you?:: " . $_POST['field_6'] . " 
    Approximately how often will you contribute?: " . $_POST['field_7'] . " 
    Your blog/website:: " . $_POST['field_8'] . " 
    What would make you a good contributor?: " . $_POST['field_9'] . " 


     powered by phpFormGenerator.
    ";
 $subject = "phpFormGenerator - Form submission"
 $to = "mail@mail.com"

  mail($to ,$subject,$message, $headers);

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top