/** * Initiate a connection to an SMTP server. * Returns false if the operation failed. * @param array $options An array of options compatible with stream_context_create() * @uses SMTP * @access public * @throws phpmailerException * @return boolean */ public function smtpConnect($options = array()) { if (is_null($this->smtp)) { $this->smtp = $this->getSMTPInstance(); } // Already connected? if ($this->smtp->connected()) { return true; } $this->smtp->setTimeout($this->Timeout); $this->smtp->setDebugLevel($this->SMTPDebug); $this->smtp->setDebugOutput($this->Debugoutput); $this->smtp->setVerp($this->do_verp); $hosts = explode(';', $this->Host); $lastexception = null; foreach ($hosts as $hostentry) { $hostinfo = array(); if (!preg_match('/^((ssl|tls):\\/\\/)*([a-zA-Z0-9\\.-]*):?([0-9]*)$/', trim($hostentry), $hostinfo)) { // Not a valid host entry continue; } // $hostinfo[2]: optional ssl or tls prefix // $hostinfo[3]: the hostname // $hostinfo[4]: optional port number // The host string prefix can temporarily override the current setting for SMTPSecure // If it's not specified, the default value is used $prefix = ''; $secure = $this->SMTPSecure; $tls = $this->SMTPSecure == 'tls'; if ('ssl' == $hostinfo[2] or '' == $hostinfo[2] and 'ssl' == $this->SMTPSecure) { $prefix = 'ssl://'; $tls = false; // Can't have SSL and TLS at the same time $secure = 'ssl'; } elseif ($hostinfo[2] == 'tls') { $tls = true; // tls doesn't use a prefix $secure = 'tls'; } //Do we need the OpenSSL extension? $sslext = defined('OPENSSL_ALGO_SHA1'); if ('tls' === $secure or 'ssl' === $secure) { //Check for an OpenSSL constant rather than using extension_loaded, which is sometimes disabled if (!$sslext) { throw new phpmailerException($this->lang('extension_missing') . 'openssl', self::STOP_CRITICAL); } } $host = $hostinfo[3]; $port = $this->Port; $tport = (int) $hostinfo[4]; if ($tport > 0 and $tport < 65536) { $port = $tport; } if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) { try { if ($this->Helo) { $hello = $this->Helo; } else { $hello = $this->serverHostname(); } $this->smtp->hello($hello); //Automatically enable TLS encryption if: // * it's not disabled // * we have openssl extension // * we are not already using SSL // * the server offers STARTTLS if ($this->SMTPAutoTLS and $sslext and $secure != 'ssl' and $this->smtp->getServerExt('STARTTLS')) { $tls = true; } if ($tls) { if (!$this->smtp->startTLS()) { throw new phpmailerException($this->lang('connect_host')); } // We must resend HELO after tls negotiation $this->smtp->hello($hello); } if ($this->SMTPAuth) { if (!$this->smtp->authenticate($this->Username, $this->Password, $this->AuthType, $this->Realm, $this->Workstation)) { throw new phpmailerException($this->lang('authenticate')); } } return true; } catch (phpmailerException $exc) { $lastexception = $exc; $this->edebug($exc->getMessage()); // We must have connected, but then failed TLS or Auth, so close connection nicely $this->smtp->quit(); } } } // If we get here, all connection attempts have failed, so close connection hard $this->smtp->close(); // As we've caught all exceptions, just report whatever the last one was if ($this->exceptions and !is_null($lastexception)) { throw $lastexception; } return false; }
function ping_mail_server($host, $port, $user, $password, $timeout = 5, $secure = 'none') { global $config; include_once $config['base_path'] . '/lib/PHPMailer/PHPMailerAutoload.php'; //Create a new SMTP instance $smtp = new SMTP(); if ($secure != 'tls' && $secure != 'none') { $smtp->SMTPSecure = $secure; if (substr_count($host, ':') == 0) { $host = $secure . '://' . $host; } } //Enable connection-level debug output $smtp->do_debug = 0; //$smtp->do_debug = SMTP::DEBUG_LOWLEVEL; $results = true; try { //Connect to an SMTP server if ($smtp->connect($host, $port, $timeout)) { //Say hello if ($smtp->hello(gethostbyname(gethostname()))) { //Put your host name in here //Authenticate if ($smtp->authenticate($user, $password)) { $results = true; } else { throw new Exception('Authentication failed: ' . $smtp->getLastReply()); } } else { throw new Exception('HELO failed: ' . $smtp->getLastReply()); } } else { throw new Exception('Connect failed'); } } catch (Exception $e) { $results = 'SMTP error: ' . $e->getMessage(); } //Whatever happened, close the connection. $smtp->quit(true); return $results; }
//SMTP needs accurate times, and the PHP time zone MUST be set //This should be done in your php.ini, but this is how to do it if you don't have access to that date_default_timezone_set('Etc/UTC'); require '../PHPMailerAutoload.php'; //Create a new SMTP instance $smtp = new SMTP(); //Enable connection-level debug output $smtp->do_debug = SMTP::DEBUG_CONNECTION; try { //Connect to an SMTP server if ($smtp->connect('lima.pegasushosting.nl', 995)) { //Say hello if ($smtp->hello('localhost')) { //Put your host name in here //Authenticate if ($smtp->authenticate('username', 'password')) { echo "Connected ok!"; } else { throw new Exception('Authentication failed: ' . $smtp->getLastReply()); } } else { throw new Exception('HELO failed: ' . $smtp->getLastReply()); } } else { throw new Exception('Connect failed'); } } catch (Exception $e) { echo 'SMTP error: ' . $e->getMessage(), "\n"; } //Whatever happened, close the connection. $smtp->quit(true);
//SMTP needs accurate times, and the PHP time zone MUST be set //This should be done in your php.ini, but this is how to do it if you don't have access to that date_default_timezone_set('Etc/UTC'); require '/home/capsdtempo/public_html/vendor/phpmailer/phpmailer/PHPMailerAutoload.php'; //Create a new SMTP instance $smtp = new SMTP(); //Enable connection-level debug output $smtp->do_debug = SMTP::DEBUG_CONNECTION; try { //Connect to an SMTP server if ($smtp->connect('r9-dallas.webserversystems.com', 25)) { //Say hello if ($smtp->hello('r9-dallas.webserversystems.com')) { //Put your host name in here //Authenticate if ($smtp->authenticate('*****@*****.**', 'Bmx1cpoe')) { echo "Connected ok!"; } else { throw new Exception('Authentication failed: ' . $smtp->getLastReply()); } } else { throw new Exception('HELLO failed: ' . $smtp->getLastReply()); } } else { throw new Exception('Connect failed'); } } catch (Exception $e) { echo 'SMTP error: ' . $e->getMessage(), "\n"; } //Whatever happened, close the connection. $smtp->quit(true);
/** * Initiate a connection to an SMTP server. * Returns false if the operation failed. * * @param array $options An array of options compatible with stream_context_create() * * @uses SMTP * * @throws phpmailerException * * @return bool */ public function smtpConnect($options = []) { if (is_null($this->smtp)) { $this->smtp = $this->getSMTPInstance(); } // Already connected? if ($this->smtp->connected()) { return true; } $this->smtp->setTimeout($this->Timeout); $this->smtp->setDebugLevel($this->SMTPDebug); $this->smtp->setDebugOutput($this->Debugoutput); $this->smtp->setVerp($this->do_verp); $hosts = explode(';', $this->Host); $lastexception = null; foreach ($hosts as $hostentry) { $hostinfo = []; if (!preg_match('/^((ssl|tls):\\/\\/)*([a-zA-Z0-9\\.-]*):?([0-9]*)$/', trim($hostentry), $hostinfo)) { // Not a valid host entry continue; } // $hostinfo[2]: optional ssl or tls prefix // $hostinfo[3]: the hostname // $hostinfo[4]: optional port number // The host string prefix can temporarily override the current setting for SMTPSecure // If it's not specified, the default value is used $prefix = ''; $tls = $this->SMTPSecure == 'tls'; if ($hostinfo[2] == 'ssl' or $hostinfo[2] == '' and $this->SMTPSecure == 'ssl') { $prefix = 'ssl://'; $tls = false; // Can't have SSL and TLS at once } elseif ($hostinfo[2] == 'tls') { $tls = true; // tls doesn't use a prefix } $host = $hostinfo[3]; $port = $this->Port; $tport = (int) $hostinfo[4]; if ($tport > 0 and $tport < 65536) { $port = $tport; } if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) { try { if ($this->Helo) { $hello = $this->Helo; } else { $hello = $this->serverHostname(); } $this->smtp->hello($hello); if ($tls) { if (!$this->smtp->startTLS()) { throw new phpmailerException($this->lang('connect_host')); } // We must resend HELO after tls negotiation $this->smtp->hello($hello); } if ($this->SMTPAuth) { if (!$this->smtp->authenticate($this->Username, $this->Password, $this->AuthType, $this->Realm, $this->Workstation)) { throw new phpmailerException($this->lang('authenticate')); } } return true; } catch (phpmailerException $exc) { $lastexception = $exc; // We must have connected, but then failed TLS or Auth, so close connection nicely $this->smtp->quit(); } } } // If we get here, all connection attempts have failed, so close connection hard $this->smtp->close(); // As we've caught all exceptions, just report whatever the last one was if ($this->exceptions and !is_null($lastexception)) { throw $lastexception; } return false; }
/** * 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; }
public function checkSmtp() { //Create a new SMTP instance $smtp = new \SMTP(); //Enable connection-level debug output $smtp->do_debug = \SMTP::DEBUG_CONNECTION; try { //Connect to an SMTP server if ($smtp->connect($this->getSmtpServer()->getSmtpHost(), $this->getSmtpServer()->getSmtpPort())) { //Say hello if ($smtp->hello($this->smtp->getSmtpHost())) { //Put your host name in here //Authenticate dump($this->getSmtpServer()->getSmtpUsername()); dump($this->getSmtpServer()->getSmtpPassword()); if ($smtp->authenticate($this->getSmtpServer()->getSmtpUsername(), $this->getSmtpServer()->getSmtpPassword())) { return true; } else { throw new \Exception('Authentication failed: ' . $smtp->getLastReply()); } } else { throw new \Exception('HELO failed: ' . $smtp->getLastReply()); } } else { throw new \Exception('Connect failed'); } } catch (\Exception $e) { throw new \Exception('SMTP error: ' . $e->getMessage()); } //Whatever happened, close the connection. $smtp->quit(true); }
/** * 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()); } }