1

変更しようとしている関数をコピーして貼り付けました。エラーを適切に処理できるようにしたいと思います。現在、$smtpResponse値は返されません。関数内で値をエコーすると、それらは表示されますが、$smtpResponse何も生成されず、true または false の値も送信されません。

「失敗」と「成功」も返そうとしましたが、表示されません。$response表示されませんが、「うまくいきました!」します。関数が何も返さないのはなぜですか?

次のように出力しようとしています。

//Send e-mail  
$repsonse = authSendEmail($from, $namefrom, $sendto,"", $subject,$message);

//Report success/failure
echo $response;

The culprit: 

function authSendEmail($from, $namefrom, $to, $nameto, $subject, $message) {
    //Connect to the host on the specified port  
    $smtpConnect = fsockopen($smtpServer, $port, $errno, $errstr, 60);  
    $smtpResponse = fgets($smtpConnect, 515);  

    if(empty($smtpConnect)) {  
        $output = "Failed to connect: $smtpResponse";  
        echo $output;
        return "Fail";
         //return false; 
         //used to read 'return $output' 
    }  

    else {  
        $logArray['connection'] = "Connected: $smtpResponse";  
    }  

    //Request Auth Login  
    fputs($smtpConnect,"AUTH LOGIN" . $newLine);  
    $smtpResponse = fgets($smtpConnect, 515);  
    $logArray['authrequest'] = "$smtpResponse";  

    if(!$smtpResponse) {
        return "Fail";
    }

    //Send username  
    fputs($smtpConnect, base64_encode($username) . $newLine);  
    $smtpResponse = fgets($smtpConnect, 515);  
    $logArray['authusername'] = "$smtpResponse";  

    if(!$smtpResponse) {
        return "Fail";
    }

    //Send password  
    fputs($smtpConnect, base64_encode($password) . $newLine);  
    $smtpResponse = fgets($smtpConnect, 515);  
    $logArray['authpassword'] = "$smtpResponse";  

    if(!$smtpResponse) {
        return "Fail";
    }

    //Say Hello to SMTP  
    fputs($smtpConnect, "HELO $localhost" . $newLine);  
    $smtpResponse = fgets($smtpConnect, 515);  
    $logArray['heloresponse'] = "$smtpResponse";  

    if(!$smtpResponse) {
        return "Fail";
    }

    //Email From  
    fputs($smtpConnect, "MAIL FROM: $from" . $newLine);  
    $smtpResponse = fgets($smtpConnect, 515);  
    $logArray['mailfromresponse'] = "$smtpResponse";  

    if(!$smtpResponse) {
        return "Fail";
    }

    //Email To  
    fputs($smtpConnect, "RCPT TO: $to" . $newLine);  
    $smtpResponse = fgets($smtpConnect, 515);  
    $logArray['mailtoresponse'] = "$smtpResponse";  

    if(!$smtpResponse) {
        return "Fail";
    }

    //The Email  
    fputs($smtpConnect, "DATA" . $newLine);  
    $smtpResponse = fgets($smtpConnect, 515);  
    $logArray['data1response'] = "$smtpResponse";  

    if(!$smtpResponse) {
        return "Fail";
    }

    //Construct Headers  
    $headers = "MIME-Version: 1.0" . $newLine;  
    $headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;  
    $headers .= "To: ".$nameto." <".$to.">" . $newLine;  
    $headers .= "From: ".$namefrom." <".$from.">" . $newLine;  
    fputs($smtpConnect, "Subject: $subject\n$headers\n\n $message \n.\n");  
    $smtpResponse = fgets($smtpConnect, 515);  
    $logArray['data2response'] = "$smtpResponse";  

    if(!$smtpResponse) {
        return "Fail";
    }

    // Say Bye to SMTP  
    fputs($smtpConnect,"QUIT" . $newLine);   
    $smtpResponse = fgets($smtpConnect, 515);  
    $logArray['quitresponse'] = "$smtpResponse";   

    if(!$smtpResponse) {
        return "Fail";
    }

    echo "It worked!";
    return "Success"; 
    //insert var_dump here -- uncomment out the next line for debug info
    //var_dump($logArray);
}  
4

2 に答える 2

2

:)タイプミスがあります

//Send e-mail  
$repsonse = authSendEmail($from, $namefrom, $sendto,"", $subject,$message);

//Report success/failure
echo $response;

$ responsesonseを返し、$ responseをエコーし​​ます

そして、記録のために。他の誰かのコードをコピーして貼り付けても、どこにも行けません。自分でコードを書くプログラミングを学びたい場合、または本当にコピー/貼り付けが必要な場合は、何をコピー/貼り付けているかを理解するようにしてください。私はあなたにアドバイスを与えるだけで意地悪をしようとしているわけではありません。幸運を!

于 2012-05-16T08:44:55.413 に答える
0

これは単純すぎるかもしれませんが、次のような行は本当にありますか?

//Report success/failure echo $response;

そのエコーはコメントの一部にすぎません。新しい行に配置する必要があります。

また、関数を終了する前に、そのソケット接続を実際に閉じる必要があります。

また、成功した場合はブール値の true を返し、失敗した場合は false を返す方が良いかもしれません。

于 2012-05-16T07:26:58.627 に答える