2014-02-27 81 views
0

我想獲得一個服務器腳本使用wp_mail()併發送電子郵件給用戶。我將此作爲密碼重置例程的一部分,並從用戶那邊用Ajax調用腳本。WordPress的PHP服務器腳本發送電子郵件

我從我的服務器腳本收到以下錯誤:

Fatal error: Call to undefined function wp_mail() in /var/www/abc-php/pwd.php on line 57 

我似乎無法找到一個回答我的問題,所以也許我問不正確。我在做什麼?

我的服務器腳本(pwd.php)包含:

<?php 

    $setFromId = "[email protected]"; 
    $setFromName = "Info @ abc"; 
    $replyToId = "[email protected]"; 
    $replyToName = "Info @ abc"; 

    $sendToEmail = base64_decode($_GET["ste"]); //the URL in AJAX call contains base64 encoded data 
    $resetPwd = base64_decode($_GET["rp"]); 
    $resetSalt = base64_decode($_GET["rs"]); 
    $param = $_GET["var"]; 

    $username = "xxxxxxxxx"; 
    $password = "xxxxxxxx"; 
    $host = "localhost"; 
    $database = "xxxxxxxxx"; 
    $con = mysqli_connect($host, $username, $password, $database); 

    // Check connection 
    if (mysqli_connect_errno($con)) { 
     echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } else { 
     switch ($param) { 
      case "PWDRES":            // Query 1: Current Logged In Partner Details 
       $mysqli = new mysqli($host, $username, $password, $database); 
       if (mysqli_connect_errno()) { 
        echo '<p>Unable to connect to the server at this time to update and send password. Please contact SMA for help or try again.</p>'; 
       } else { 

        $myquery = "UPDATE abc_users 
           SET `password` = SHA2('" . $resetPwd . $resetSalt . "', 512), 
            `salt_value` = SHA2('" . $resetSalt . "', 512) 
           WHERE email_user_id = '" . $sendToEmail . "'"; 

        mysqli_query($mysqli, $myquery); 

        if($mysqli->affected_rows >= 1) { 

         $headers = 'Reply-To: <' . $replyToName . '> ' . $replyToId; 
         $subject = "Password Reset - Confidential"; 
         $body = "Subject: " . $subject . "<br/><br/>Your new password is: <br/><strong>" . $resetPwd . "</strong><br/><br/>Please ensure you reset this password next time you log in.";       
         $mail = wp_mail($sendToEmail, $subject, $body, $headers); 
         echo "Password was successfully reset and sent to " . $sendToEmail; 

        } else if($mysqli->affected_rows == 0) { 
         echo "No user id row was updated in the process of resetting password. Please try again."; 
        } else if($mysqli->affected_rows < 0) { 
         echo "There was an SQL error updating the user id password table. Please contact SMA for help."; 
        }; 
       }; 
      break; 

        case "OTHER1" 
        etc, etc, etc... 
     default; 

     }; 
    }; 

    unset($con);  
    unset($myquery); 
    unset($mysqli); 

?> 

任何幫助表示讚賞。

+0

你把你的'pwd.php'文件放在哪裏???項目根目錄或主題根目錄中的 ??? –

+0

該php文件與其他人創建的網站位於其自己的文件夾中。如www/my-php /文件夾中所示。這是否會影響服務器引用WP功能的能力? – TheRealPapa

回答

0

問題是你不包括Wordpress,所以你根本沒有使用它(它不包括它的庫)。

此外,這與問題無關,但您的代碼有一個缺陷: 任何用戶都可以定義電子郵件的收件人。

+0

嗨Loic,謝謝你的回覆。電子郵件地址用作系統中的ID,並通過客戶端的JavaScript表單的URL從服務器提供給服務器。電子郵件的有效性檢查發生在該頁面上。如何在服務器腳本中包含郵件的Wordpress功能? – TheRealPapa

+0

在你的文件開頭使用這個: require_once(dirname(__ FILE__)。'/wp-load.php'); 給予Akshay加分。 –

+0

Hi Loic,雖然你的建議與Akshay稍有不同(即:FILE中沒有下劃線),但結果是一樣的,500內部服務器錯誤。感謝您的幫助。 – TheRealPapa

1

您需要在文件中包含wp-load.php ....

只是把這個在你的文件的頂部。

require_once(dirname(__FILE__) . '/wp-load.php'); 
+0

嗨Akshay,謝謝你。我現在得到內部服務器錯誤500 ...它不喜歡添加。我應該以不同於服務器腳本的方式發送郵件嗎? – TheRealPapa

相關問題