- Проблем с SMTP
WT форуми -> PHP MySQL ASP.NET -> Проблем с SMTP
Създайте нова тема Напишете отговор 
Автор Съобщение
Pro_Lamer4e
Нов
Нов

Регистриран на: 26/10/2009 7:10 am

Support: 2
Bonus: 4
Мнения: 187
Мнение 17/09/2018 10:29 am     Проблем с SMTP Отговорете с цитат


Добър ден, имам проблем с изпращането на имейл-и, по принцип скрипта си работи, но като се получи имейл отива в спам папката на abv , някой знае ли каде може да е проблема.

smtp.lib.php
<?php

/**
* Allows users to send email without e-mail server on the localmachine
* @package SMTP
* @author Fredrik Haugbergsmyr <smtp.lib@lagnut.net>
*/

require_once ($rootpath . 'include/smtp/net.const.php');

/**
* @version 0.0.2.2
* @access public
* @todo split messages, attachments
*/
class smtp
{


   /**
   * lagnut-smtp version, send in the headers
   *
   * @var string
   * @access private
   */
   var $_version = '0.0.2.2';


   /**
   * Turn debugon / off
   *
   * @var bool
   * @access private
   */
   var $_debug = false;


   /**
   * Serverconnection resource
   *
   * @var resource
   * @access private
   */
   var $_connection = null;


   /**
   * E-mailheaders
   *
   * @var array headers
   * @access private
   */
   var $_hdrs = array();


   /**
   * E-mailbody
   *
   * @var string
   * @access private
   */
   var $_body = '';


   /**
   * Default Content type
   *
   * @var string
   * @access private
   */
   var $_mime = 'text/plain';


   /**
   * Default Charset
   *
   * @var string
   * @access private
   */
   var $_charset = 'UTF-8';


   /**
   * Class contruction, sets client headers
   *
   * @access public
   */
   function smtp()
   {
      $this->_add_hdr('X-Mailer', sprintf('LAGNUT-SMTP/%s', $this->_version));
      $this->_add_hdr('User-Agent', sprintf('LAGNUT-SMTP/%s', $this->_version));
      $this->_add_hdr('MIME-Version', '1.0');
   }


   /**
   * Turn debugging on/off
   *
   * @access public
   * @param bool $debug command
   */
   function debug($debug)
   {
      $this->_debug = (bool)$debug;
   }


   /**
   * Clean input to prevent injection
   *
   * @param string $input User data
   */
   function _clean(&$input)
   {
      if (!is_string($input)) {
         return false;
      }
      $input = urldecode($input);
      $input = str_replace("\n", '', str_replace("\r", '', $input));
   }


   /**
   * Send command to server
   *
   * @access private
   * @param string $cmdcommand
   * @param optional $data data
   */
   function _cmd($cmd, $data = false)
   {
      $this->_clean($cmd);
      $this->_clean($data);

      if ($this->_is_closed()) {
         return false;
      }

      if (!$data) {
         $command = sprintf("%s\r\n", $cmd);
      }else {
         $command = sprintf("%s: %s\r\n", $cmd,$data);
      }

      fwrite($this->_connection, $command);
      $resp = $this->_read();
      if ($this->_debug){
         printf($command);
         printf($resp);
      }
      if ($this->_is_closed($resp)) {
         return false;
      }
      return $resp;
   }


   /**
   * Collects header
   *
   * @access private
   * @param string$key
   * @param string $data
   */
   function _add_hdr($key, $data)
   {
      $this->_clean($key);
      $this->_clean($data);
      $this->_hdrs[$key] = sprintf("%s: %s\r\n", $key, $data);
   }


   /**
   * Read server output
   *
   * @access private
   * @return string
   */
   function _read()
   {
      if ($this->_is_closed()) {
         return false;
      }
      $o = '';
      do {
         $str = @fgets($this->_connection, 515);
         if (!$str) {
            break;
         }
         $o .= $str;
         if (substr($str, 3, 1) == ' ') {
            break;
         }
      } while (true);
      return $o;
   }


   /**
   * Checks if server denies more commands
   *
   * @access private
   * @param $int
   * @return bool true if connection is closed
   */
   function _is_closed($response = false)
   {
      if (!$this->_connection) {
         return true;
      }
      if (isset($response{0}) && ($response{0} == 4|| $response{0}== 5)) {
         $this->close();
         return true;
      }
      return false;
   }


   /**
   * Open connection to server
   *
   * @access public
   * @param string $server SMTP server
   * @param int $port Server port
   */
   function open($server, $port = 25)
   {
      $this->_connection = fsockopen($server, $port, $e, $er, 8);

      if ($this->_is_closed()) {
         return false;
      }

      $init= $this->_read();
      if ($this->_debug){
         printf($init);
      }

      if ($this->_is_closed($init)) {
         return false;
      }
      
      $lhost = (isset($_SERVER['SERVER_ADDR']) ? $_SERVER['SERVER_ADDR'] : '127.0.0.1');

      if (strpos($init,'ESMTP') === false){
         $this->_cmd('HELO '. gethostbyaddr($lhost));
      } else {
         $this->_cmd('EHLO '. gethostbyaddr($lhost));
      }
   }


   /**
   * Start TLS communication
   *
   * @access public
   */
   function start_tls()
   {
      if (!function_exists('stream_socket_enable_crypto')) {
         trigger_error('TLS is not supported', E_USER_ERROR);
         return false;
      }
      $this->_cmd('STARTTLS');
      stream_socket_enable_crypto($this->_connection, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
   }


   /**
   * Performs SMTP authentication
   *
   * @access public
   * @param string $username username
   * @param string $password password
   * @param int authentication mecanism
   */
   function auth($username, $password, $type = LOGIN)
   {
      global $rootpath;      
      include_once ($rootpath . 'include/smtp/sasl.lib.php');
      $sasl =& new sasl($sasl, $username, $password);
      switch ($type) {
         case PLAIN:
            $this->_cmd('AUTH PLAIN');
            $this->_cmd($sasl->plain($username, $password));
            break;
         case LOGIN:
            $this->_cmd('AUTH LOGIN');
            $this->_cmd($sasl->login($username));
            $this->_cmd($sasl->login($password));
            break;
         case CRAM_MD5:
            $resp = explode(' ', $this->_cmd('AUTH CRAM-MD5'));
            $this->_cmd($sasl->cram_md5($username, $password, trim($resp[1])));
            break;
      }
   }


   /**
   * Closes connection to the server
   *
   * @access public
   */
   function close()
   {
      if ($this->_is_closed()) {
         return false;
      }

      $this->_cmd('RSET');
      $this->_cmd('QUIT');
      fclose($this->_connection);
      $this->_connection = null;
   }


   /**
   * E-mail sender
   *
   * @access public
   * @param string $from Sender
   */
   function from($email, $name = '')
   {
      $from = !empty($name) ? sprintf('%s <%s>', $name, $email) : $email;
      $this->_cmd('MAIL FROM', sprintf('<%s>', $email));
      $this->_add_hdr('FROM', $from);
      $this->_add_hdr('Return-path', $email);
   }


   /**
   * Send reply-to header
   *
   * @param string $to
   */
   function reply_to($email, $name = '')
   {
      $to = !empty($name) ? sprintf('%s <%s>', $name, $email) : $email;
      $this->_add_hdr('REPLY-TO', $to);
   }


   /**
   * E-mail reciever
   *
   * @access public
   * @param string $to Reciever
   */
   function to($email, $name = '')
   {
      $to = !empty($name) ? sprintf('%s <%s>', $name, $email) : $email;
      $this->_cmd('RCPT TO', sprintf('<%s>', $email));
      $this->_add_hdr('TO', $to);
   }


   /**
   * MIME type
   *
   * @access public
   * @param string $mime MIME type
   */
   function mime_charset($mime,$charset)
   {
      $this->_charset = $charset;
      $this->_mime = $mime;
      $this->_add_hdr('Content-type', sprintf('%s; charset=%s', $mime, $charset));
   }


   /**
   * E-mail subject
   *
   * @access public
   * @param string $subject subject
   */
   function subject($subject)
   {
      $this->_clean($subject);
      $this->_add_hdr('SUBJECT', $this->encode_hdrs($subject));
   }


   /**
   * E-mail body
   *
   * @access public
   * @param string $body body
   */
   function body($body)
   {
      $body = preg_replace("/([\n|\r])\.([\n|\r])/", "$1..$2", $body);
      $this->_body = sprintf("\r\n%s", $body);
   }


   /**
   * Send the mail
   *
   * @access public
   */
   function send()
   {
      $resp = $this->_cmd('DATA');
      if ($this->_is_closed($resp)) {
         $this->close();
         return false;
      }
      foreach ($this->_hdrs as $header) {
         fwrite($this->_connection, $header);
         if ($this->_debug) {
            printf($header);
         }
      }
      fwrite($this->_connection,$this->_body);
      fwrite($this->_connection, "\r\n.\r\n");
      $resp = trim($this->_read());
      if ($this->_debug){
         printf("%s\r\n", $this->_body);
         printf("\r\n.\r\n");
         printf('%s', $resp);
      }
      if ((int)$resp{0} != 2) {
         return false;
      } else {
         return true;
      }
   }


   /**
   * encode headers
   *
   * @access private
   * @param string $input
   * @return string
   */
   function encode_hdrs($input)
   {
      $replacement = preg_replace('/([\x80-\xFF])/e', '"=" . strtoupper(dechex(ord("\1")))', $input);
      $input = str_replace($input, sprintf('=?%s?Q?%s?=', $this->_charset, $replacement), $input);
      return $input;
   }


}

?>



Функцията с която изпращам емайл


function sent_mail($to,$fromname,$fromemail,$subject,$body,$multiple=false,$multiplemail='') {
   global $SITENAME,$SITEEMAIL,$smtptype,$smtp,$smtp_host,$smtp_port,$smtp_from,$smtpaddress,$accountname,$accountpassword,$rootpath;
   # Sent Mail Function v.05 by xam (This function to help avoid spam-filters.)
   $result = true;
   if ($smtptype == 'default') {
      @mail($to, $subject, $body, "From: $SITEEMAIL") or $result = false;
   } elseif ($smtptype == 'advanced') {
   # Is the OS Windows or Mac or Linux?
   if (strtoupper(substr(PHP_OS,0,3)=='WIN')) {
      $eol="\r\n";
      $windows = true;
   }
   elseif (strtoupper(substr(PHP_OS,0,3)=='MAC'))
      $eol="\r";
   else
      $eol="\n";
   $mid = md5(getip() . $fromname);
   $name = $_SERVER["SERVER_NAME"];
   $headers .= "From: $fromname <$fromemail>".$eol;
   $headers .= "Reply-To: $fromname <$fromemail>".$eol;
   $headers .= "Return-Path: $fromname <$fromemail>".$eol;
   $headers .= "Message-ID: <$mid.thesystem@$name>".$eol;
   $headers .= "X-Mailer: PHP v".phpversion().$eol;
    $headers .= "MIME-Version: 1.0".$eol;
    $headers .= "Content-type: text/plain; charset=windows-1251".$eol;
    $headers .= "X-Sender: PHP".$eol;
    if ($multiple)
       $headers .= "Bcc: $multiplemail.$eol";
   if ($smtp == "yes") {
      ini_set('SMTP', $smtp_host);
      ini_set('smtp_port', $smtp_port);
      if ($windows)
         ini_set('sendmail_from', $smtp_from);
      }

       @mail($to, $subject, $body, $headers) or $result = false;

       ini_restore(SMTP);
      ini_restore(smtp_port);
      if ($windows)
         ini_restore(sendmail_from);
   } elseif ($smtptype == 'external') {
      require_once($rootpath . 'include/smtp/smtp.lib.php');
      $mail = new smtp;
      $mail->debug(false);
      $mail->open($smtp_host, $smtp_port);
      if (!empty($accountname) && !empty($accountpassword))
         $mail->auth($accountname, $accountpassword);
      $mail->from($SITEEMAIL);
      $mail->to($to);
      $mail->subject($subject);
      $mail->body($body);
      $result = $mail->send();
      $mail->close();
   } else
      $result = false;

   return $result;
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
raiden
Активен
Активен

Регистриран на: 08/12/2006 10:13 am

Support: 189
Bonus: 464
Мнения: 2178
Мнение 17/09/2018 6:50 pm      Отговорете с цитат


Вероятно нямаш Reverse DNS (PTR) Record на мейл сървъра или reverse lookup-а връща домейн различен от този, от който се опитваш да изпратиш имейл
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Pro_Lamer4e
Нов
Нов

Регистриран на: 26/10/2009 7:10 am

Support: 2
Bonus: 4
Мнения: 187
Мнение 18/09/2018 8:35 am      Отговорете с цитат


Благодаря, но не е от хотинга. смених го с по нова версия и се орпави , с това нямам проблеми вече https://github.com/PHPMailer/PHPMailer
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
Страница 1 от 1


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети