public function PHPMailer::preSend

5.x PHPMailer.php public PHPMailer::preSend()

Prepare a message for sending.

Return value

bool

Throws

Exception

1 call to PHPMailer::preSend()
PHPMailer::send in inc/PHPMailer/src/PHPMailer.php
Create a message and send it. Uses the sending method specified by $Mailer.

File

inc/PHPMailer/src/PHPMailer.php, line 1394

Class

PHPMailer
PHPMailer - PHP email creation and transport class.

Namespace

PHPMailer\PHPMailer

Code

public function preSend() 
 {
  if ('smtp' == $this->Mailer or 
    ('mail' == $this->Mailer and stripos(PHP_OS, 'WIN') === 0)
    ) {
    //SMTP mandates RFC-compliant line endings
    //and it's also used with mail() on Windows
    static::setLE("\r\n");
  }
  else {
    //Maintain backward compatibility with legacy Linux command line mailers
    static::setLE(PHP_EOL);
  }
  //Check for buggy PHP versions that add a header with an incorrect line break
  if (ini_get('mail.add_x_header') == 1
   and 'mail' == $this->Mailer
     and stripos(PHP_OS, 'WIN') === 0
     and ((version_compare(PHP_VERSION, '7.0.0', '>=')
      and version_compare(PHP_VERSION, '7.0.17', '<'))
      or (version_compare(PHP_VERSION, '7.1.0', '>=')
      and version_compare(PHP_VERSION, '7.1.3', '<')))
      ) {
    trigger_error(
    'Your version of PHP is affected by a bug that may result in corrupted messages.' .
      ' To fix it, switch to sending using SMTP, disable the mail.add_x_header option in' .
      ' your php.ini, switch to MacOS or Linux, or upgrade your PHP to version 7.0.17+ or 7.1.3+.', 
    E_USER_WARNING
    );
  }

  try {
    $this->error_count = 0; // Reset errors
    $this->mailHeader = '';

    // Dequeue recipient and Reply-To addresses with IDN
    foreach (array_merge($this->RecipientsQueue, $this->ReplyToQueue) as $params) {
      $params [1] = $this->punyencodeAddress($params [1]);
      call_user_func_array([$this, 'addAnAddress'], $params);
    }
    if (count($this->to) + count($this->cc) + count($this->bcc) < 1) {
      throw new Exception($this->lang('provide_address'), self::STOP_CRITICAL);
    }

    // Validate From, Sender, and ConfirmReadingTo addresses
    foreach (['From', 'Sender', 'ConfirmReadingTo'] as {
      $address_kind($this->alternativeExists());
    }
    {        $this->ContentType = static::CONTENT_TYPE_MULTIPART_ALTERNATIVE;    }

    $this->setMessageType();
    // Refuse to send an empty message unless we are specifically allowing it
    if (!$this->AllowEmpty and empty($this->Body)) {
      throw new Exception($this->lang('empty_message'), self::STOP_CRITICAL);
    }

    //Trim subject consistently
    $this->Subject = trim($this->Subject);
    // Create body before headers in case body makes changes to headers (e.g. altering transfer encoding)
    $this->MIMEHeader = '';
    $this->MIMEBody = $this->createBody();
    // createBody may have added some headers, so retain them
    $tempheaders = $this->MIMEHeader;
    $this->MIMEHeader = $this->createHeader();
    $this->MIMEHeader .= $tempheaders;

    // To capture the complete message when using mail(), create
    // an extra header list which createHeader() doesn't fold in
    if ('mail' == $this->Mailer) {
      if (count($this->to) > 0) {
        $this->mailHeader .= $this->addrAppend('To', $this->to);
      }
      else {
        $this->mailHeader .= $this->headerLine('To', 'undisclosed-recipients:;');
      }
      $this->mailHeader .= $this->headerLine(
      'Subject', 
      $this->encodeHeader($this->secureHeader($this->Subject))
      );
    }

    // Sign with DKIM if enabled
    if (!empty($this->DKIM_domain)
     and !empty($this->DKIM_selector)
       and (!empty($this->DKIM_private_string)
        or (!empty($this->DKIM_private)
        and static::isPermittedPath($this->DKIM_private)
        and file_exists($this->DKIM_private)
        )
        )
        ) {
      $header_dkim = $this->DKIM_Add(
      $this->MIMEHeader . $this->mailHeader, 
      $this->encodeHeader($this->secureHeader($this->Subject)), 
      $this->MIMEBody
      );
      $this->MIMEHeader = rtrim($this->MIMEHeader, "\r\n ") . static::$LE .
        static::normalizeBreaks($header_dkim) . static::$LE;
    }

    return true;
  }
  catch (Exception $exc) {
    $this->setError($exc->getMessage());
    if ($this->exceptions) {
      throw $exc;
    }

    return false;
  }
}