コード例 #1
0
ファイル: class.phpmailer.php プロジェクト: ahmedash95/Lily
 /**
  * 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;
 }
コード例 #2
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
  * @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;
 }
コード例 #3
0
ファイル: Email.php プロジェクト: rolandrajko/BREAD
 /**
  * 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());
     }
 }