phpcurlphp-8

Php script returns full log when testing with cuRL


Doing my first steps with php and I am a bit confused. I have written a small script, which should take a POST request with some data, put the data in a formatted email and send it. For this I simply used PhpMailer and adapted the demo code. Apart from an outer try-catch resulting in a 500 response, this is my code for the return messages so far:

if($mail->send()){
    http_response_code(200);
    exit(json_encode(["message"=>"Mails sent successfully!"]));
}else{
    http_response_code(500);
    exit(json_encode(["message"=>"Mails not sent!", "error"=>$mail->ErrorInfo]));
}

The script works fine, I receive the email, but testing with cuRL I would expect a reponse body with {"message":"Mails sent successfully!"}, however I get a full server log, pretty much showing stuff I do not want to show (like the email address the script sends the email to - I have changed these here to generic ones):

HTTP/1.1 200 OK
Date: Mon, 13 Jan 2025 11:35:17 GMT
Server: Apache
X-Content-Type-Options: nosniff
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

2025-01-13 11:35:17 Connection: opening to smtp.myserver.com:587, timeout=5, options=array()<br>
2025-01-13 11:35:17 Connection: opened<br>
2025-01-13 11:35:17 SERVER -&gt; CLIENT: 220 mx01lb.myserver.com ESMTP Exim 4.97.1 Mon, 13 Jan 2025 12:35:17 +0100<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: EHLO www.some-domain.comt<br>
2025-01-13 11:35:17 SERVER -&gt; CLIENT: 250-mx01lb.myserver.com Hello www.some-domain.com [81.19.145.43]250-SIZE 157286400250-8BITMIME250-PIPELINING250-PIPECONNECT250-AUTH LOGIN PLAIN250-STARTTLS250 HELP<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: STARTTLS<br>
2025-01-13 11:35:17 SERVER -&gt; CLIENT: 220 TLS go ahead<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: EHLO www.some-domain.comt<br>
2025-01-13 11:35:17 SERVER -&gt; CLIENT: 250-mx01lb.myserver.com Hello www.some-domain.comt [81.19.145.43]250-SIZE 157286400250-8BITMIME250-PIPELINING250-PIPECONNECT250-AUTH LOGIN PLAIN250 HELP<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: AUTH LOGIN<br>
2025-01-13 11:35:17 SERVER -&gt; CLIENT: 334 VXNlcm5hbWU6<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: [credentials hidden]<br>
2025-01-13 11:35:17 SERVER -&gt; CLIENT: 334 UGFzc3dvcmQ6<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: [credentials hidden]<br>
2025-01-13 11:35:17 SERVER -&gt; CLIENT: 235 Authentication succeeded<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: MAIL FROM:&lt;noreply@gmail.com&gt;<br>
2025-01-13 11:35:17 SERVER -&gt; CLIENT: 250 OK<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: RCPT TO:&lt;my.email@gmail.com&gt;<br>
2025-01-13 11:35:17 SERVER -&gt; CLIENT: 250 Accepted<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: DATA<br>
2025-01-13 11:35:17 SERVER -&gt; CLIENT: 354 Enter message, ending with &quot;.&quot; on a line by itself<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: Date: Mon, 13 Jan 2025 12:35:17 +0100<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: To: my.email@gmail.com<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: From: noreply@gmail.com<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: Subject: Neue Anfrage<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: Message-ID: &lt;2Y6HJbBuepRuYZ701QYKlpqjgrub3EnrJjDSGyGRZzU@www.some-domain.comt&gt;<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: X-Mailer: PHPMailer 6.9.3 (https://github.com/PHPMailer/PHPMailer)<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: MIME-Version: 1.0<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: Content-Type: text/plain; charset=iso-8859-1<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: <br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: Guten Tag,  <br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: <br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: sie haben eine neue Anfrage auf der Jugendseite bekommen. Folgende Daten wurden angegeben: <br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: <br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: test: asdf <br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: test2: qwer <br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: <br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: <br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: Mit der Bitte um Bearbeitung. <br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: Dein freundlicher Bot<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: <br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: .<br>
2025-01-13 11:35:17 SERVER -&gt; CLIENT: 250 OK id=1tXIiz-000000004RA-1doi<br>
2025-01-13 11:35:17 CLIENT -&gt; SERVER: QUIT<br>
2025-01-13 11:35:17 SERVER -&gt; CLIENT: 221 mx01lb.myserver.com closing connection<br>
2025-01-13 11:35:17 Connection: closed<br>
{"message":"Mails sent successfully!"}

After reading up a bit, I tried to add ob_clean(); before sending the return, but no luck. This doesn't seem to come from the output buffer, but is attached to the response somewhere. As mentioned, I have no prior PHP experience, but I would like to be in control what is returned and what not. Any suggestions are much appreciated.


Solution

  • This is because you have enabled the debugging output of PHPMailer, so when you execute the send method, these contents will be output. Just turn it off before sending:

    $mail->SMTPDebug = SMTP::DEBUG_OFF;
    

    Or output the debugging log to somewhere else:

    $mail->Debugoutput = 'error_log';