Проблем с SMTP

Pro_Lamer4e

Registered
Добър ден, имам проблем с изпращането на имейл-и, по принцип скрипта си работи, но като се получи имейл отива в спам папката на 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;
 
Вероятно нямаш Reverse DNS (PTR) Record на мейл сървъра или reverse lookup-а връща домейн различен от този, от който се опитваш да изпратиш имейл
 
Благодаря, но не е от хотинга. смених го с по нова версия и се орпави , с това нямам проблеми вече https://github.com/PHPMailer/PHPMailer
 

Горе