2015-06-14 139 views
0

我的PHP表单设置为从发件人处获取IP地址。 表单生成时没有错误...测试收到的电子邮件,但没有将IP地址传递给电子邮件正文。 我做错了什么? 这里是PHP的形式:IP地址不会传递给电子邮件正文

<?php 
    $owner_email='[email protected]'; 
    //SMTP server settings 
    $host = ''; 
    $port = '465';//"587"; 
    $username = ''; 
    $password = ''; 

    $subject='My Website Design'; 
    $user_email='';  
    $message_body=''; 
    $message_type='html'; 

    $max_file_size=50;//MB 
    $file_types='/(doc|docx|txt|pdf|zip|rar)$/'; 
    $error_text='something goes wrong'; 
    $error_text_filesize='File size must be less than'; 
    $error_text_filetype='Failed to upload file. This file type is not allowed. Accepted files types: doc, docx, txt, pdf, zip, rar.'; 

    $private_recaptcha_key='6LeZwukSAAAAACmqrbLmdpvdhC68NLB1c9EA5vzU'; //localhost 


    $use_recaptcha=isset($_POST["recaptcha_challenge_field"]) and isset($_POST["recaptcha_response_field"]); 
    $use_smtp=($host=='' or $username=='' or $password==''); 
    $max_file_size*=1048576; 

    if($owner_email==''){ 
    die('Attention, recipient e-mail is not set! Please define "owner_email" variable in the MailHanlder.php file.'); 
    } 

    if(preg_match('/^(127\.|192\.168\.)/',$_SERVER['REMOTE_ADDR'])){ 
    die('Attention, contact form will not work locally! Please upload your template to a live hosting server.'); 
} 

    if($use_recaptcha){ 
     require_once('recaptchalib.php'); 
     $resp = recaptcha_check_answer ($private_recaptcha_key,$_SERVER["REMOTE_ADDR"],$_POST["recaptcha_challenge_field"],$_POST["recaptcha_response_field"]); 
     if (!$resp->is_valid){ 
      die ('wrong captcha'); 
     } 
    } 

    if(isset($_POST['name']) and $_POST['name'] != ''){$message_body .= '<p>Name: ' . $_POST['name'] . '</p>' . "\n" . '<br>' . "\n"; $subject.=$_POST['name'];} 
    if(isset($_POST['email']) and $_POST['email'] != ''){$message_body .= '<p>Email Address: ' . $_POST['email'] . '</p>' . "\n" . '<br>' . "\n"; $user_email=$_POST['email'];} 
    if(isset($_POST['company']) and $_POST['company'] != ''){$message_body .= '<p>Company: ' . $_POST['company'] . '</p>' . "\n" . '<br>' . "\n";} 
    if(isset($_POST['topic']) and $_POST['topic'] != ''){$message_body .= '<p>Topic: ' . $_POST['topic'] . '</p>' . "\n" . '<br>' . "\n";} 
    if(isset($_POST['ipaddress']) and $_POST['ipaddress'] != ''){$message_body .= '<p>IP Address: ' . $_POST['ipaddress'] . '</p>' . "\n" . '<br>' . "\n";} 
    if(isset($_POST['message']) and $_POST['message'] != ''){$message_body .= '<p>Message: ' . $_POST['message'] . '</p>' . "\n";} 
    if(isset($_POST['stripHTML']) and $_POST['stripHTML']=='true'){$message_body = strip_tags($message_body);$message_type='text';} 

try{ 
    include "libmail.php"; 
    $m= new Mail("utf-8"); 
    $m->From($user_email); 
    $m->To($owner_email); 
    $m->Subject($subject); 
    $m->Body($message_body,$message_type); 
    //$m->log_on(true); 

// Function to get the client ip address 
function get_client_ip_server() { 
    $ipaddress = ''; 
    if ($_SERVER['HTTP_CLIENT_IP']) 
     $ipaddress = $_SERVER['HTTP_CLIENT_IP']; 
    else if($_SERVER['HTTP_X_FORWARDED_FOR']) 
     $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    else if($_SERVER['HTTP_X_FORWARDED']) 
     $ipaddress = $_SERVER['HTTP_X_FORWARDED']; 
    else if($_SERVER['HTTP_FORWARDED_FOR']) 
     $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; 
    else if($_SERVER['HTTP_FORWARDED']) 
     $ipaddress = $_SERVER['HTTP_FORWARDED']; 
    else if($_SERVER['REMOTE_ADDR']) 
     $ipaddress = $_SERVER['REMOTE_ADDR']; 
    else 
     $ipaddress = 'UNKNOWN'; 

    return $ipaddress; 
} 

    if(isset($_FILES['attachment'])){ 
    if($_FILES['attachment']['size']>$max_file_size){ 
     $error_text=$error_text_filesize . ' ' . $max_file_size . 'bytes'; 
     die($error_text);   
     }else{   
     if(preg_match($file_types,$_FILES['attachment']['name'])){ 
      $m->Attach($_FILES['attachment']['tmp_name'],$_FILES['attachment']['name'],'','attachment'); 
     }else{ 
      $error_text=$error_text_filetype; 
      die($error_text);    
      } 
     }  
    } 
if(!$use_smtp){ 
    $m->smtp_on($host, $username, $password, $port); 
    } 

    if($m->Send()){ 
    die('success'); 
    } 

}catch(Exception $mail){ 
die($mail); 
} 
?> 

回答

1

,我认为没有必要的if(isset($_POST['ipaddress']) and $_POST['ipaddress'] != '')

{$message_body .= '<p>IP Address: ' . $_POST['ipaddress'] . '</p>' 

to 

{$message_body .= '<p>IP Address: ' .get_client_ip_server() . '</p>' 
0

尝试空()在你的get_client_ip_server() if语句

function get_client_ip_server() { 
$ipaddress = ''; 
if (!empty($_SERVER['HTTP_CLIENT_IP'])) 
    $ipaddress = $_SERVER['HTTP_CLIENT_IP']; 
else if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) 
    $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; 
else if(!empty($_SERVER['HTTP_X_FORWARDED'])) 
    $ipaddress = $_SERVER['HTTP_X_FORWARDED']; 
else if(!empty($_SERVER['HTTP_FORWARDED_FOR'])) 
    $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; 
else if(!empty($_SERVER['HTTP_FORWARDED'])) 
    $ipaddress = $_SERVER['HTTP_FORWARDED']; 
else if(!empty($_SERVER['REMOTE_ADDR'])) 
    $ipaddress = $_SERVER['REMOTE_ADDR']; 
else 
    $ipaddress = 'UNKNOWN'; 

return $ipaddress; 

}

+0

感谢您的尝试,但它仍然无法正常工作。没有错误...电子邮件收到罚款。只是没有将IP地址传递给电子邮件正文。无法弄清楚这一点。爱德华或Feroz的任何其他建议?谢谢! –

0

的新手程序过于复杂。保持简单,以获得不太重要的数据。例如,要获取IP

$ip = $_SERVER['REMOTE_ADDR'];

使用$ip在地方,无论你需要的IP。