/**
  * Send mail via SMTP.
  * Returns false if there is a bad MAIL FROM, RCPT, or DATA input.
  * Uses the PHPMailerSMTP class by default.
  * @see PHPMailer::getSMTPInstance() to use a different class.
  * @param string $header The message headers
  * @param string $body The message body
  * @throws phpmailerException
  * @uses SMTP
  * @access protected
  * @return boolean
  */
 protected function smtpSend($header, $body)
 {
     $bad_rcpt = array();
     if (!$this->smtpConnect($this->SMTPOptions)) {
         throw new phpmailerException($this->lang('smtp_connect_failed'), self::STOP_CRITICAL);
     }
     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 phpmailerException($this->ErrorInfo, self::STOP_CRITICAL);
     }
     // Attempt to send to all recipients
     foreach (array($this->to, $this->cc, $this->bcc) as $togroup) {
         foreach ($togroup as $to) {
             if (!$this->smtp->recipient($to[0])) {
                 $error = $this->smtp->getError();
                 $bad_rcpt[] = array('to' => $to[0], 'error' => $error['detail']);
                 $isSent = false;
             } else {
                 $isSent = true;
             }
             $this->doCallback($isSent, array($to[0]), array(), array(), $this->Subject, $body, $this->From);
         }
     }
     // Only send the DATA command if we have viable recipients
     if (count($this->all_recipients) > count($bad_rcpt) and !$this->smtp->data($header . $body)) {
         throw new phpmailerException($this->lang('data_not_accepted'), self::STOP_CRITICAL);
     }
     if ($this->SMTPKeepAlive) {
         $this->smtp->reset();
     } else {
         $this->smtp->quit();
         $this->smtp->close();
     }
     //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 phpmailerException($this->lang('recipients_failed') . $errstr, self::STOP_CONTINUE);
     }
     return true;
 }
Exemple #2
0
 /**
  * Send email using authenticated STMP with TLS
  */
 function sendResetMail($to, $newpass)
 {
     $smtp = new SMTP();
     //$smtp->setDebugLevel(4);
     //$smtp->setDebugOutput("error_log");
     $host = $this->config['smtp']['host'];
     $port = $this->config['smtp']['port'];
     // Connect
     if (!$smtp->connect($host, $port)) {
         return $smtp->getError();
     }
     // EHLO
     if (!$smtp->hello("me")) {
         return $smtp->getError();
     }
     // STARTTLS
     if (!$smtp->startTLS()) {
         return $smtp->getError();
     }
     // EHLO
     if (!$smtp->hello("me")) {
         return $smtp->getError();
     }
     // AUTH LOGIN
     $username = $this->config['smtp']['username'];
     $password = $this->config['smtp']['password'];
     if (!$smtp->authenticate($username, $password)) {
         return $smtp->getError();
     }
     // MAIL FROM
     $from = $this->config['smtp']['from'];
     if (!$smtp->mail($from)) {
         return $smtp->getError();
     }
     // RCPT TO
     if (!$smtp->recipient($to)) {
         return $smtp->getError();
     }
     // DATA
     $msg = str_replace("@@email@@", $to, str_replace("@@newpass@@", $newpass, $this->config['smtp']['msgtemplate']));
     if (!$smtp->data($msg)) {
         return $smtp->getError();
     }
     // QUIT
     if (!$smtp->quit()) {
         return $smtp->getError();
     }
     // Disconnect and close
     $smtp->close();
     return null;
 }
Exemple #3
0
 /**
  * Send mail via SMTP.
  * Returns false if there is a bad MAIL FROM, RCPT, or DATA input.
  * Uses the PHPMailerSMTP class by default.
  *
  * @see PHPMailer::getSMTPInstance() to use a different class.
  *
  * @param string $header The message headers
  * @param string $body   The message body
  *
  * @throws phpmailerException
  *
  * @uses SMTP
  *
  * @return bool
  */
 protected function smtpSend($header, $body)
 {
     $bad_rcpt = [];
     if (!$this->smtpConnect()) {
         throw new phpmailerException($this->lang('smtp_connect_failed'), self::STOP_CRITICAL);
     }
     $smtp_from = $this->Sender == '' ? $this->From : $this->Sender;
     if (!$this->smtp->mail($smtp_from)) {
         $this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError()));
         throw new phpmailerException($this->ErrorInfo, self::STOP_CRITICAL);
     }
     // Attempt to send to all recipients
     foreach ($this->to as $to) {
         if (!$this->smtp->recipient($to[0])) {
             $bad_rcpt[] = $to[0];
             $isSent = false;
         } else {
             $isSent = true;
         }
         $this->doCallback($isSent, [$to[0]], [], [], $this->Subject, $body, $this->From);
     }
     foreach ($this->cc as $cc) {
         if (!$this->smtp->recipient($cc[0])) {
             $bad_rcpt[] = $cc[0];
             $isSent = false;
         } else {
             $isSent = true;
         }
         $this->doCallback($isSent, [], [$cc[0]], [], $this->Subject, $body, $this->From);
     }
     foreach ($this->bcc as $bcc) {
         if (!$this->smtp->recipient($bcc[0])) {
             $bad_rcpt[] = $bcc[0];
             $isSent = false;
         } else {
             $isSent = true;
         }
         $this->doCallback($isSent, [], [], [$bcc[0]], $this->Subject, $body, $this->From);
     }
     // Only send the DATA command if we have viable recipients
     if (count($this->all_recipients) > count($bad_rcpt) and !$this->smtp->data($header . $body)) {
         throw new phpmailerException($this->lang('data_not_accepted'), self::STOP_CRITICAL);
     }
     if ($this->SMTPKeepAlive == true) {
         $this->smtp->reset();
     } else {
         $this->smtp->quit();
         $this->smtp->close();
     }
     if (count($bad_rcpt) > 0) {
         // Create error message for any bad addresses
         throw new phpmailerException($this->lang('recipients_failed') . implode(', ', $bad_rcpt), self::STOP_CONTINUE);
     }
     return true;
 }
Exemple #4
0
 /**
  * Send mail via SMTP.
  * @return boolean True on success.
  */
 protected function smtpSend()
 {
     $this->smtp = new SMTP();
     $allRecipients = array();
     $badRecipients = array();
     try {
         // <editor-fold desc="Prepare SMTP host.">
         $hostInfo = array();
         if (!preg_match('/^((ssl|tls):\\/\\/)*([a-zA-Z0-9\\.-]*):?([0-9]*)$/', $this->smtpHost, $hostInfo)) {
             throw new \Exception("Invalid SMTP host.");
         }
         $prefix = "";
         $tls = $this->smtpSecure == "tls";
         if ($hostInfo[2] == "ssl" || $hostInfo[2] == "" && $this->smtpSecure == "ssl") {
             $prefix = "ssl://";
             $tls = false;
         } elseif ($hostInfo[2] == "tls") {
             $tls = true;
         }
         $host = $prefix . $hostInfo[3];
         $tport = (int) $hostInfo[4];
         $port = $tport > 0 && $tport < 65536 ? $tport : $this->smtpPort;
         // </editor-fold>
         if (!$this->smtp->connect($host, $port)) {
             throw new \Exception("Could not connect to SMTP host.");
         }
         $hello = !empty($this->smtpHelo) ? $this->smtpHelo : $this->serverHostname();
         if (!$this->smtp->hello($hello)) {
             throw new \Exception("Could not send HELO.");
         }
         if ($tls) {
             if (!$this->smtp->tls()) {
                 throw new \Exception("Could not start TLS.");
             }
             $this->smtp->hello($hello);
         }
         if ($this->smtpAuth && !$this->smtp->authenticate($this->smtpUsername, $this->smtpPassword)) {
             throw new \Exception("Could not authenticate.");
         }
         if (!$this->smtp->mail($this->from[0])) {
             throw new \Exception("Could not send MAIL FROM.");
         }
         foreach ($this->to as $to) {
             if (!$this->smtp->recipient($to[0])) {
                 $badRecipients[] = $to[0];
             } else {
                 $allRecipients[] = $to[0];
             }
         }
         //      foreach ($this->cc as $cc) {
         //        if (!$this->smtp->recipient($cc[0]))
         //          $badRecipients[] = $cc[0];
         //        else
         //          $allRecipients[] = $cc[0];
         //      }
         //
         //      foreach ($this->bcc as $bcc) {
         //        if (!$this->smtp->recipient($bcc[0]))
         //          $badRecipients[] = $bcc[0];
         //        else
         //          $allRecipients[] = $bcc[0];
         //      }
         if (count($allRecipients) > 0 && !$this->smtp->data($this->header . $this->body)) {
             throw new \Exception("Data was not accepted.");
         }
         if ($this->smtpKeepAlive) {
             $this->smtp->reset();
         } else {
             $this->smtp->quit();
             $this->smtp->close();
         }
         return true;
     } catch (\Exception $e) {
         if (count($badRecipients) > 0) {
             $rcpt = implode(", ", $badRecipients);
             throw new EmailException(array("Failed delivery to the following recipient(s): %s.", $rcpt));
         }
         throw new EmailException($e->getMessage());
     }
 }