Cannot modify header information - headers already sent by (PHPMailer SMTP)

Severity: Warning

Message: Cannot modify header information - headers already sent by (output started at /home//public_html/ip/vendor/phpmailer/phpmailer/src/SMTP.php:321)

Filename: helpers/url_helper.php

Line Number: 565

Backtrace:

File: /home//public_html/ip/application/modules/mailer/controllers/Mailer.php
Line: 221
Function: redirect

File: /home//public_html/ip/index.php
Line: 315
Function: require_once

The error “PHP Error Encountered” is not complete.

Before this error, another errorhas occurred, which causes the message “Cannot modify header information - headers already sent by”

  • Check your logs
  • Paste the complete error.

try again, there’s no error in that code that you dumped

try again, there’s no error in that code that you dumped

Check the application/logs of InvoicePlane.
Those logs that you dumped maks no sense.

  • an error occurs
  • another error occurs
  • php doesn’t expect it, so it showz that the header information could not be changed.

Find that first error.
Either in application/logs (hopefully) or in youd server logs.

It’s certainly not those logs that you dumped.
I had to clean it for you

ERROR - 2025-11-02 16:57:57 → Could not find the language line “online_payment_apiKeyPublic”
ERROR - 2025-11-02 16:57:57 → Could not find the language line “online_payment_apiKeyPublic”
ERROR - 2025-11-02 16:57:57 → Could not find the language line “online_payment_clientId”
ERROR - 2025-11-02 16:57:57 → Could not find the language line “online_payment_clientId”
ERROR - 2025-11-02 16:57:57 → Could not find the language line “online_payment_clientSecret”
ERROR - 2025-11-02 16:57:57 → Could not find the language line “online_payment_clientSecret”

ERROR - 2025-11-02 17:08:02 → Severity: Warning → Cannot modify header information - headers already sent by (output started at /home//public_html/psicote.com/ip/vendor/phpmailer/phpmailer/src/SMTP.php:329) /home//public_html/psicote.com/ip/vendor/codeigniter/framework/system/helpers/url_helper.php 565

The real cause is not in the url_helper.php line — that’s just where the error finally appeared.

Here’s how to explain it clearly:


What’s really happening

“Cannot modify header information – headers already sent by (output started at …)”

This means something already sent output to the browser (HTML, spaces, BOM, echo, var_dump, etc.) before PHP tried to send headers (e.g., redirect, cookie, session, etc.).


The real error is

Tell them to look at the first file and line mentioned in the parentheses.

For example:

(output started at /home/.../vendor/phpmailer/phpmailer/src/SMTP.php:329)

That’s the real origin of the problem — not the last file (url_helper.php).

The real error isn’t in url_helper.php — it’s in PHPMailer’s SMTP.php, line 329. That file started sending output (echo, print, or accidental whitespace) before the framework tried to send headers.


How to see the full error

  1. Turn off error suppression:

    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    

You can do that by turning on debug in ipconfig.php
This one:

ENABLE_DEBUG

to

ENABLE_DEBUG=true
``



2. **Check your log file directly** (not the truncated message):

tail -n 50 /path/to/application/logs/log-2025-11-02.php

3. **Use `ob_start();` early** in index.php to buffer output (for debugging only).
4. If they only paste partial lines, ask them to:

```bash
grep "Cannot modify header information" -A3 -B3 /home/.../logs/log-2025-11-02.php

That prints a few lines before and after the message.


The real problem

“The real problem isn’t in url_helper.php — check the first file and line in parentheses (SMTP.php:329). That’s where output started before headers were sent.”

application/modules/mailer/helpers/phpmailer_helper.php

$mail->isSMTP();
            $mail->SMTPDebug   = env_bool('ENABLE_DEBUG') ? 2 : 0;
            $mail->Debugoutput = env_bool('ENABLE_DEBUG') ? 'echo' : 'error_log';

            // Set the basic properties
            $mail->Host = get_setting('smtp_server_address');
            $mail->Port = get_setting('smtp_port');

            // Is SMTP authentication required?
            if (get_setting('smtp_authentication')) {
                $mail->SMTPAuth = true;

                $decoded = $CI->crypt->decode($CI->mdl_settings->get('smtp_password'));

                $mail->Username = get_setting('smtp_username');
                $mail->Password = $decoded;
            }
$mail->SMTPDebug   = env_bool('ENABLE_DEBUG') ? 2 : 0;

Set that to 3 instead of 2

$mail->Debugoutput = env_bool('ENABLE_DEBUG') ? 'echo' : 'error_log';

Set that to mail.log instead of “echo”