【问题标题】:IP Address won't pass to e-mail bodyIP 地址不会传递到电子邮件正文
【发布时间】:2015-08-30 04:14:57
【问题描述】:

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

<?php
    $owner_email='info@mywebsitedesign.com';
    //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);
}   
?>

【问题讨论】:

    标签: php email ip


    【解决方案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>'
    

    【讨论】:

      【解决方案2】:

      get_client_ip_server() if 语句中尝试 !empty()

      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;
      

      }

      【讨论】:

      • 感谢您的尝试,但还是不行。没有错误...电子邮件接收良好。只是没有将 IP 地址传递给电子邮件正文。想不通这个Edward 或 Feroz 有什么其他建议吗?谢谢!
      【解决方案3】:

      程序对于新手来说太复杂了。保持简单以获取不太重要的数据。比如获取ip

      $ip = $_SERVER['REMOTE_ADDR'];

      在需要 IP 的地方使用$ip

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-12
        • 1970-01-01
        • 2011-09-19
        • 2018-03-15
        • 2014-04-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多