Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Не приходят письма на почту обратный звонок Callback


LLlPAM888

Recommended Posts

Точнее приходят, но одно из 5-6 штук

настройка калбэка через аякс

при этом купить в один клик приходит каждое, уведомление о заказе каждое, а вот калбек почему то один через 5-6 штук

могу заплатить за решение вопроса с разьяснением.

сайт

скрипт

Спойлер

 


$(function () {

	// Купить в один клик
	$('.product-layout > .product-thumb').each(function (e) {

		e +=1;

		var img_url = $(this).find('.img-responsive').attr('src'),
			item_name = $(this).find('h4 a').text(),
			item_price = $(this).find('.price').html(),
			admin = $('#callback [name=admin_email]').val();

	$(this).after('\
		<div id="pp-item-' + e + '" class="product-popup">\
			<h2>Купить в один клик</h2>\
			<div class="pp-img-wrap"><img src="' + img_url + '" alt="EtolShop"></div>\
			<div class="pp-content">\
				<h3>' + item_name + '</h3>\
				<p>' + item_price +'</p>\
				<form class="ajax-form">\
					<input type="hidden" name="project_name" value="EtolShop">\
					<input type="hidden" name="admin_email" value="' + admin + '">\
					<input type="hidden" name="form_subject" value="Заявка с сайта ETOLSHOP">\
					<input type="hidden" name="Продукт" value="' + item_name + '">\
					<input class="form-control" type="text" name="Телефон" placeholder="Введите Ваш телефон..." required>\
					<button class="btn-primary">Заказать</button>\
				</form>\
				<div class="success">Спасибо за заявку!</div>\
			</div>\
		</div>')

		$(this).find('.button-group').append('<a class="button toclick" href="#pp-item-' + e + '">Купить в один клик</a>');
	$(this).parent().attr({
		'class' : 'product-layout col-lg-4 col-md-4 col-sm-6 col-xs-6'
	})

	});

$('.product-thumb h4').css('height', '').equalHeights();

$('.toclick, .callback').magnificPopup({
	mainClass: 'mfp-zoom-in',
	removalDelay: 500
	});


//E-mail Ajax Send
	$(".ajax-form").submit(function() {
		var th = $(this);
		$.ajax({
			type: "POST",
			url: "catalog/view/theme/apple/mail.php",
			data: th.serialize()
		}).done(function() {
			var pp_suc = th.closest('.product-popup').find('.success');
			pp_suc.fadeIn();
			setTimeout(function() {
				th.trigger("reset");
				pp_suc.fadeOut();
				$.magnificPopup.close();
			}, 4000);
		});
		return false;
	});

});

php

Спойлер

<?php
class Mail {
	protected $to;
	protected $from;
	protected $sender;
	protected $reply_to;
	protected $subject;
	protected $text;
	protected $html;
	protected $attachments = array();
	public $protocol = 'mail';
	public $smtp_hostname;
	public $smtp_username;
	public $smtp_password;
	public $smtp_port = 25;
	public $smtp_timeout = 5;
	public $verp = false;
	public $parameter = '';

	public function __construct($config = array()) {
		foreach ($config as $key => $value) {
			$this->$key = $value;
		}
	}

	public function setTo($to) {
		$this->to = $to;
	}

	public function setFrom($from) {
		$this->from = $from;
	}

	public function setSender($sender) {
		$this->sender = $sender;
	}

	public function setReplyTo($reply_to) {
		$this->reply_to = $reply_to;
	}

	public function setSubject($subject) {
		$this->subject = $subject;
	}

	public function setText($text) {
		$this->text = $text;
	}

	public function setHtml($html) {
		$this->html = $html;
	}

	public function addAttachment($filename) {
		$this->attachments[] = $filename;
	}

	public function send() {
		if (!$this->to) {
			throw new \Exception('Error: E-Mail to required!');
		}

		if (!$this->from) {
			throw new \Exception('Error: E-Mail from required!');
		}

		if (!$this->sender) {
			throw new \Exception('Error: E-Mail sender required!');
		}

		if (!$this->subject) {
			throw new \Exception('Error: E-Mail subject required!');
		}

		if ((!$this->text) && (!$this->html)) {
			throw new \Exception('Error: E-Mail message required!');
		}

		if (is_array($this->to)) {
			$to = implode(',', $this->to);
		} else {
			$to = $this->to;
		}

		$boundary = '----=_NextPart_' . md5(time());

		$header = 'MIME-Version: 1.0' . PHP_EOL;

		if ($this->protocol != 'mail') {
			$header .= 'To: <' . $to . '>' . PHP_EOL;
			$header .= 'Subject: =?UTF-8?B?' . base64_encode($this->subject) . '?=' . PHP_EOL;
		}

		$header .= 'Date: ' . date('D, d M Y H:i:s O') . PHP_EOL;
		$header .= 'From: =?UTF-8?B?' . base64_encode($this->sender) . '?= <' . $this->from . '>' . PHP_EOL;
		
		if (!$this->reply_to) {
			$header .= 'Reply-To: =?UTF-8?B?' . base64_encode($this->sender) . '?= <' . $this->from . '>' . PHP_EOL;
		} else {
			$header .= 'Reply-To: =?UTF-8?B?' . base64_encode($this->reply_to) . '?= <' . $this->reply_to . '>' . PHP_EOL;
		}
		
		$header .= 'Return-Path: ' . $this->from . PHP_EOL;
		$header .= 'X-Mailer: PHP/' . phpversion() . PHP_EOL;
		$header .= 'Content-Type: multipart/mixed; boundary="' . $boundary . '"' . PHP_EOL . PHP_EOL;

		if (!$this->html) {
			$message  = '--' . $boundary . PHP_EOL;
			$message .= 'Content-Type: text/plain; charset="utf-8"' . PHP_EOL;
			$message .= 'Content-Transfer-Encoding: 8bit' . PHP_EOL . PHP_EOL;
			$message .= $this->text . PHP_EOL;
		} else {
			$message  = '--' . $boundary . PHP_EOL;
			$message .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '_alt"' . PHP_EOL . PHP_EOL;
			$message .= '--' . $boundary . '_alt' . PHP_EOL;
			$message .= 'Content-Type: text/plain; charset="utf-8"' . PHP_EOL;
			$message .= 'Content-Transfer-Encoding: 8bit' . PHP_EOL . PHP_EOL;

			if ($this->text) {
				$message .= $this->text . PHP_EOL;
			} else {
				$message .= 'This is a HTML email and your email client software does not support HTML email!' . PHP_EOL;
			}

			$message .= '--' . $boundary . '_alt' . PHP_EOL;
			$message .= 'Content-Type: text/html; charset="utf-8"' . PHP_EOL;
			$message .= 'Content-Transfer-Encoding: 8bit' . PHP_EOL . PHP_EOL;
			$message .= $this->html . PHP_EOL;
			$message .= '--' . $boundary . '_alt--' . PHP_EOL;
		}

		foreach ($this->attachments as $attachment) {
			if (file_exists($attachment)) {
				$handle = fopen($attachment, 'r');

				$content = fread($handle, filesize($attachment));

				fclose($handle);

				$message .= '--' . $boundary . PHP_EOL;
				$message .= 'Content-Type: application/octet-stream; name="' . basename($attachment) . '"' . PHP_EOL;
				$message .= 'Content-Transfer-Encoding: base64' . PHP_EOL;
				$message .= 'Content-Disposition: attachment; filename="' . basename($attachment) . '"' . PHP_EOL;
				$message .= 'Content-ID: <' . urlencode(basename($attachment)) . '>' . PHP_EOL;
				$message .= 'X-Attachment-Id: ' . urlencode(basename($attachment)) . PHP_EOL . PHP_EOL;
				$message .= chunk_split(base64_encode($content));
			}
		}

		$message .= '--' . $boundary . '--' . PHP_EOL;

		if ($this->protocol == 'mail') {
			ini_set('sendmail_from', $this->from);

			if ($this->parameter) {
				mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header, $this->parameter);
			} else {
				mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header);
			}
		} elseif ($this->protocol == 'smtp') {
			if (substr($this->smtp_hostname, 0, 3) == 'tls') {
				$hostname = substr($this->smtp_hostname, 6);
			} else {
				$hostname = $this->smtp_hostname;
			}

			$handle = fsockopen($hostname, $this->smtp_port, $errno, $errstr, $this->smtp_timeout);

			if (!$handle) {
				throw new \Exception('Error: ' . $errstr . ' (' . $errno . ')');
			} else {
				if (substr(PHP_OS, 0, 3) != 'WIN') {
					socket_set_timeout($handle, $this->smtp_timeout, 0);
				}
	
		
				while ($line = fgets($handle, 515)) {
					if (substr($line, 3, 1) == ' ') {
						break;
					}
				}

				fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . "\r\n");

				$reply = '';

				while ($line = fgets($handle, 515)) {
					$reply .= $line;

					//some SMTP servers respond with 220 code before responding with 250. hence, we need to ignore 220 response string
					if (substr($reply, 0, 3) == 220 && substr($line, 3, 1) == ' ') {
						$reply = '';
						continue;
					}
					else if (substr($line, 3, 1) == ' ') {
						break;
					}
				}

				if (substr($reply, 0, 3) != 250) {
					throw new \Exception('Error: EHLO not accepted from server!');
				}

				if (substr($this->smtp_hostname, 0, 3) == 'tls') {
					fputs($handle, 'STARTTLS' . "\r\n");

					$reply = '';

					while ($line = fgets($handle, 515)) {
						$reply .= $line;

						if (substr($line, 3, 1) == ' ') {
							break;
						}
					}

					if (substr($reply, 0, 3) != 220) {
						throw new \Exception('Error: STARTTLS not accepted from server!');
					}

					stream_socket_enable_crypto($handle, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
				}

				if (!empty($this->smtp_username)  && !empty($this->smtp_password)) {
					fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . "\r\n");

					$reply = '';

					while ($line = fgets($handle, 515)) {
						$reply .= $line;

						if (substr($line, 3, 1) == ' ') {
							break;
						}
					}

					if (substr($reply, 0, 3) != 250) {
						throw new \Exception('Error: EHLO not accepted from server!');
					}

					fputs($handle, 'AUTH LOGIN' . "\r\n");

					$reply = '';

					while ($line = fgets($handle, 515)) {
						$reply .= $line;

						if (substr($line, 3, 1) == ' ') {
							break;
						}
					}

					if (substr($reply, 0, 3) != 334) {
						throw new \Exception('Error: AUTH LOGIN not accepted from server!');
					}

					fputs($handle, base64_encode($this->smtp_username) . "\r\n");

					$reply = '';

					while ($line = fgets($handle, 515)) {
						$reply .= $line;

						if (substr($line, 3, 1) == ' ') {
							break;
						}
					}

					if (substr($reply, 0, 3) != 334) {
						throw new \Exception('Error: Username not accepted from server!');
					}

					fputs($handle, base64_encode($this->smtp_password) . "\r\n");

					$reply = '';

					while ($line = fgets($handle, 515)) {
						$reply .= $line;

						if (substr($line, 3, 1) == ' ') {
							break;
						}
					}

					if (substr($reply, 0, 3) != 235) {
						throw new \Exception('Error: Password not accepted from server!');
					}
				} else {
					fputs($handle, 'HELO ' . getenv('SERVER_NAME') . "\r\n");

					$reply = '';

					while ($line = fgets($handle, 515)) {
						$reply .= $line;

						if (substr($line, 3, 1) == ' ') {
							break;
						}
					}

					if (substr($reply, 0, 3) != 250) {
						throw new \Exception('Error: HELO not accepted from server!');
					}
				}

				if ($this->verp) {
					fputs($handle, 'MAIL FROM: <' . $this->from . '>XVERP' . "\r\n");
				} else {
					fputs($handle, 'MAIL FROM: <' . $this->from . '>' . "\r\n");
				}

				$reply = '';

				while ($line = fgets($handle, 515)) {
					$reply .= $line;

					if (substr($line, 3, 1) == ' ') {
						break;
					}
				}

				if (substr($reply, 0, 3) != 250) {
					throw new \Exception('Error: MAIL FROM not accepted from server!');
				}

				if (!is_array($this->to)) {
					fputs($handle, 'RCPT TO: <' . $this->to . '>' . "\r\n");

					$reply = '';

					while ($line = fgets($handle, 515)) {
						$reply .= $line;

						if (substr($line, 3, 1) == ' ') {
							break;
						}
					}

					if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) {
						throw new \Exception('Error: RCPT TO not accepted from server!');
					}
				} else {
					foreach ($this->to as $recipient) {
						fputs($handle, 'RCPT TO: <' . $recipient . '>' . "\r\n");

						$reply = '';

						while ($line = fgets($handle, 515)) {
							$reply .= $line;

							if (substr($line, 3, 1) == ' ') {
								break;
							}
						}

						if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) {
							throw new \Exception('Error: RCPT TO not accepted from server!');
						}
					}
				}

				fputs($handle, 'DATA' . "\r\n");

				$reply = '';

				while ($line = fgets($handle, 515)) {
					$reply .= $line;

					if (substr($line, 3, 1) == ' ') {
						break;
					}
				}

				if (substr($reply, 0, 3) != 354) {
					throw new \Exception('Error: DATA not accepted from server!');
				}

				// According to rfc 821 we should not send more than 1000 including the CRLF
				$message = str_replace("\r\n", "\n", $header . $message);
				$message = str_replace("\r", "\n", $message);

				$lines = explode("\n", $message);

				foreach ($lines as $line) {
					$results = str_split($line, 998);

					foreach ($results as $result) {
						if (substr(PHP_OS, 0, 3) != 'WIN') {
							fputs($handle, $result . "\r\n");
						} else {
							fputs($handle, str_replace("\n", "\r\n", $result) . "\r\n");
						}
					}
				}

				fputs($handle, '.' . "\r\n");

				$reply = '';

				while ($line = fgets($handle, 515)) {
					$reply .= $line;

					if (substr($line, 3, 1) == ' ') {
						break;
					}
				}

				if (substr($reply, 0, 3) != 250) {
					throw new \Exception('Error: DATA not accepted from server!');
				}

				fputs($handle, 'QUIT' . "\r\n");

				$reply = '';

				while ($line = fgets($handle, 515)) {
					$reply .= $line;

					if (substr($line, 3, 1) == ' ') {
						break;
					}
				}

				if (substr($reply, 0, 3) != 221) {
					throw new \Exception('Error: QUIT not accepted from server!');
				}

				fclose($handle);
			}
		}
	}
}

 

html footer

Спойлер

 


	<footer class="main-footer">



		<div class="footer-cnt">

			<div class="container">

				<div class="row">

					

					<div class="col-md-3 col-sm-6">

						

						<div class="logo">

							<?php if ($logo){ ?>

								<a href="<?php echo $home; ?>">

									<img src="<?php echo $logo; ?>" alt="<?php echo $name; ?>" class="img-responsive"> 

								</a>

							<?php } ?>

						</div>



					</div>



					<div class="col-md-7 hidden-sm hidden-xs">



						<nav class="footer-menu">



							<?php if ($informations) { ?>

								<ul class="nav navbar-nav">

									<?php foreach ($informations as $information) { ?>

									<li><a href="<?php echo $information['href']; ?>"><?php echo $information['title']; ?></a></li>

									<?php } ?>

									<li><a href="/skidki">Скидки</a></li>

						        	<li><a href="<?php echo $contact; ?>">Контакты</a></li>

								</ul>

		        			<?php } ?>

						</nav>



					</div>



					<!--<div class="col-md-2 col-sm-6">

						

						<ul class="nav-social">

							<li><a href="https://vk.com/club152644180" rel="nofollow" target="_blank"><i class="fa fa-vk"></i></a></li>

							<li><a href="http://facebook.com" rel="nofollow" target="_blank"><i class="fa fa-facebook"></i></a></li>

							<li><a href="http://instagram.com" rel="nofollow" target="_blank"><i class="fa fa-instagram"></i></a></li>

						</ul>

					</div>-->

				</div>

			</div>

		</div>

		

		<div class="footer-phone">

			

			<div class="container">

				<div class="col-sm-12">

					<div class="site-phone_wrap">

						<div class="site-phone">

							<a href="<?php echo $contact; ?>"><?php echo $telephone; ?></a>

						</div>

						<a href="#callback" class="callback">Заказать Звонок!</a>

					</div>

				</div>

			</div>



		</div>

	</footer>

	

	<div id="callback" class="callback-form product-popup">

		<h2>Заказать Звонок</h2>

		<p>Введите номер телефона и наш менеджер перезвонит Вам в течении <strong>15 минут</strong>.</p>

		<form class="ajax-form">

			<!-- Hidden Required Fields -->

			<input type="hidden" name="project_name" value="EtolShop">

			<input type="hidden" name="admin_email" value="<?php echo $email; ?>">

			<input type="hidden" name="form_subject" value="Заявка с сайта ETOLSHOP">

			<!-- END Hidden Required Fields -->



			<input class="form-control" type="text" name="Телефон" placeholder="Введите Ваш телефон..." required>

			<button class="btn-primary">Заказать</button>



		</form>

	<div class="success">Спасибо за заявку!</div>

	</div>





</body>

</html>

Помогите пожалуйста уже 2 месяца голову ломаю.-_-

footer.tpl mail.php theme.js

Змінено користувачем LLlPAM888
Надіслати
Поділитися на інших сайтах


Перестал срабатывать запрос sendmail.
в логах пишет такую вот ошибку
[Sat Feb 29 10:57:57 2020] [error] [client 77.222.156.194] PHP Warning: mail(): Could not execute mail delivery program '/usr/sbin/sendmail -t -i -f [email protected]' in /var/www/lllpam/data/www/etolshop.com.ua/catalog/view/theme/apple/mail.php on line 52, referer: https://etolshop.com.ua/
при обращении к стандартным скриптам
или
[Sat Feb 29 14:08:06 2020] [error] [client 77.222.156.194] sh: 1: Cannot fork, referer: https://etolshop.com.ua/
[Sat Feb 29 14:09:08 2020] [error] [client 77.222.156.194] PHP Warning: mail(): Could not execute mail delivery program '/usr/sbin/sendmail -t -i -f [email protected]' in /var/www/lllpam/data/www/etolshop.com.ua/mail.php on line 2
при обращении к тестовому обработчику.
в настройках домена выбрана опция cgi bin, при смене на апач материться что нужен php 5.45
куда смотреть)?

etolshop.com.ua.error.log

Надіслати
Поділитися на інших сайтах


Единственное к чему я пришел, нашел логи почты в которых ошибка при недоставленном сообщении такая:
[Sat Feb 29 22:22:09 2020] [error] [client 77.222.156.194] PHP Warning: mail(): Could not execute mail delivery program '/usr/sbin/sendmail -t -i -f [email protected]' in /var/www/lllpam/data/www/etolshop.com.ua/catalog/view/theme/apple/mail.php on line 52, referer: https://etolshop.com.ua/

Так же заметил что при отправке формы callback в консоли network "mail.php отправляется 2 раза, а при отправке покупка в один клик, один раз, может ли это вызывать проблему? mail.php отправляет jquerry? Проблема в нем?

1.jpg

2.jpg

Надіслати
Поділитися на інших сайтах


Вообщем разобрался я, проблема была действительно в отправке двух переменных mail.php
Из за того что в header.tpl скрипт ajax (theme.js) был подключен после переменной <?php foreach ($scripts as $script) { ?>
из за этого происходил казус
он не укладывался в 50 мс и отправлялся 2 РАЗА методом POST, от чего у sendmail случайно случался инсульт и он либо писал ошибку sendmail либо приходило одно письмо.
Проблема в том что к массиву sendmail обращались 2 раза СРАЗУ и он отвечал отказом в обе стороны.
Решением оказалось передвинуть вызов скрипта в header.tpl в самый верх.
2 месяца Карл.... Я ушел бухать...

Надіслати
Поділитися на інших сайтах


10 часов назад, nikifalex сказал:

разбирайтесь с файлом mail.php  у вас в

вы точно прислали именно этот файл?

мало того что это само по себе уже жуть от говнотемы, так еще и вообще не то

вы правы файл действительно не тот, спасибо что откликнулись, успехов Вам

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.