protected function PHPMailer::smtpSend

5.x PHPMailer.php protected PHPMailer::smtpSend($header, $body)

Send mail via SMTP. Returns false if there is a bad MAIL FROM, RCPT, or DATA input.

@uses \PHPMailer\PHPMailer\SMTP

Parameters

string $header The message headers:

string $body The message body:

Return value

bool

Throws

Exception

See also

PHPMailer::setSMTPInstance() to use a different class.

1 call to PHPMailer::smtpSend()
PHPMailer::postSend in inc/PHPMailer/src/PHPMailer.php
Actually send a message via the selected mechanism.

File

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

Class

PHPMailer
PHPMailer - PHP email creation and transport class.

Namespace

PHPMailer\PHPMailer

Code

protected function smtpSend($header, $body) 
 {
  $bad_rcpt = [];
  if (!$this->smtpConnect($this->SMTPOptions)) {
    throw new Exception($this->lang('smtp_connect_failed'), self::STOP_CRITICAL);
  }
  //Sender already validated in preSend()
  if ('' == $this->Sender) {
    $smtp_from = $this->From;
  }
  else {
    $smtp_from = $this->Sender;
  }
  if (!$this->smtp->mail($smtp_from)) {
    $this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError()));
    throw new Exception($this->ErrorInfo, self::STOP_CRITICAL);
  }

  $callbacks = [];
  // Attempt to send to all recipients
  foreach ([$this->to, $this->cc, $this->bcc] as {
    $togroup((count($this->all_recipients) > count($bad_rcpt)) and !$this->smtp->data($header . $body));
  }
  {      throw new Exception($this->lang('data_not_accepted'), self::STOP_CRITICAL);  }

  $smtp_transaction_id = $this->smtp->getLastTransactionID();

  if ($this->SMTPKeepAlive) {
    $this->smtp->reset();
  }
  else {
    $this->smtp->quit();
    $this->smtp->close();
  }

  foreach ($callbacks as $cb) {
    $this->doCallback(
    $cb ['issent'], 
    [$cb ['to']], 
    [], 
    [], 
    $this->Subject, 
    $body, 
    $this->From, 
    ['smtp_transaction_id' => $smtp_transaction_id], 
    );
  }

  //Create error message for any bad addresses
  if (count($bad_rcpt) > 0) {
    $errstr = '';
    foreach ($bad_rcpt as $bad) {
      $errstr .= $bad ['to'] . ': ' . $bad ['error'];
    }
    throw new Exception(
    $this->lang('recipients_failed') . $errstr, 
    self::STOP_CONTINUE
    );
  }

  return true;
}