katilina

[не Решено] Почтовая рассылка незарегистрированным покупателям

Рекомендуемые сообщения

katilina    161

Появилась необходимость рассылать письма незарегистрированным покупателям. Покопавшись в интернете нашла решение, но не работающее. Обращаюсь за помощью к ассам. Использую ocstore 1.5.5.1.1

 

1. admin\controller\sale\contact.php
После

					case 'customer_all':
						$customer_data = array(
							'start'  => ($page - 1) * 10,
							'limit'  => 10
						);
									
						$email_total = $this->model_sale_customer->getTotalCustomers($customer_data);
										
						$results = $this->model_sale_customer->getCustomers($customer_data);
				
						foreach ($results as $result) {
							$emails[] = $result['email'];
						}						
						break;

добавить

//////// add all
 
                case 'customer_all_all':
                    $results = $this->model_sale_customer->getAllCustomers();
 
                    foreach ($results as $result) {
                        $emails[] = $result['email'];
                    }                    
                    break;
 
                ////////

после

$this->data['text_customer_all'] = $this->language->get('text_customer_all');

добавить

/// add all
        $this->data['text_customer_all_all'] = $this->language->get('text_customer_all_all');
        ///

2. admin\model\sale\customer.php
После

public function getCustomerByEmail($email) {
        $query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "customer WHERE email = '" . $this->db->escape($email) . "'");
 
        return $query->row;
    }

добавить

/////// add all
 
    public function getAllCustomers($email) {
        $query = $this->db->query("SELECT firstname, lastname, email, telephone, fax, payment_company AS company FROM " . DB_PREFIX . "order");
 
        return $query->row;
    }
 
    ///////

3. admin\language\russian\sale\contact.php

После

$_['text_customer_all']        = 'Все покупатели';[/code]
добавить
[code]/// add all
$_['text_customer_all_all']        = 'В том числе и незарегистрированные';
///

4. admin\view\template\sale\contact.tpl

После

 <option value="customer_all"><?php echo $text_customer_all; ?></option>

добавить

<option value="customer_all_all"><?php echo $text_customer_all_all; ?></option>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Baco    395

Вопрос в том, откуда брать е-мейлы незарегистрированных ? у вас есть подписка или какая нибудь форма, которая собирает такие е-мейлы ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
katilina    161

Информация о покупателях отображается же в панеле управления, статус заказа, детали оплаты, адреса. Разве в БД это не записывается?

Форма оформления заказа есть. Я имею в виду покупателей, которые отказались от регистрации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Baco    395

Информация о покупателях отображается же в панеле управления, статус заказа, детали оплаты, адреса. Разве в БД это не записывается?

Форма оформления заказа есть. Я имею в виду покупателей, которые отказались от регистрации.

То есть данные с "гостевых заказов" вытянуть надо ? тогда вопрос 2: "Как различить, кроме как сравнивания с таблицей зарегистрированных пользователей, е-мейлы гостей ?", а то доставаться будут абсолютно все, и то при условии, что при оформлении вводится е-меил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
katilina    161

В том-то и дело, что абсолютно все нужны. На сайте отсутствует регистрация, а поле email является обязательным при оформлении заказа

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 097

public function getAllCustomers() {

$query = $this->db->query("SELECT `firstname`, `lastname`, `email` FROM `".DB_PREFIX."order`");

return $query->rows;

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Baco    395

Или:

public function getAllCustomers($email) {        $query = $this->db->query("SELECT DISTINCT * FROM `".DB_PREFIX."order`");         return $query->rows;}

а в контроллере уже вытягивать что надо...

 

Вот так думаю правильней будет...

Изменено пользователем Baco

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 097

1. ну и зачем тебе неиспользуемый аргумент $email в методе, который вызывается БЕЗ аргументов?  :huh: 

2. и возвращать одну (первую) строку результата - как бы это сказать...  :unsure:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
katilina    161

Ошибка в логах Error: RCPT TO not accepted from server!  если прописываю



public function getAllCustomers() {
        $query = $this->db->query("SELECT `firstname`, `email` FROM `".DB_PREFIX."order");
        return $query->rows;
    }

При варианте  $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order");   Добавляется ошибка Uninitialized string offset: 0

Почта на сайте через smpt работает, письма о заказе приходят, обратная связь работает. В БД проверила наличие записей в таблице order, имеются такие firstname  и email

Вопрос: что такое RCPT TO и почему он не принимается от сервера?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
toporchillo    435

Ошибка в логах Error: RCPT TO not accepted from server!  если прописываю

При варианте  $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order");   Добавляется ошибка Uninitialized string offset: 0

Почта на сайте через smpt работает, письма о заказе приходят, обратная связь работает. В БД проверила наличие записей в таблице order, имеются такие firstname  и email

Вопрос: что такое RCPT TO и почему он не принимается от сервера?

Логи почтовика смотрели?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
katilina    161

Логи в админке смотрела  Error: RCPT TO not accepted from server! 

При выборе зарегистрированных покупателей рассылка уходит без проблем

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
toporchillo    435

Пишите в лог то, что передается на вход функции mail()

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
katilina    161

Пишите в лог то, что передается на вход функции mail()

Простите? Не поняла что и куда писать :) Этот код в начале ветки не мой, я такой сама не напишу, хотя понимаю, о чём речь. И ошибку мне в этом найти очень сложно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
katilina    161

Если исключить повторяющиеся адреса эл. почты в записях order, то скрипт срабатывает и почта отправляется

 public function getAllCustomers() {
       $query = $this->db->query("SELECT distinct email FROM " . DB_PREFIX . "order");
       return $query->row;
    }

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 097

опять вы одну (первую) строку тянете из базы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
katilina    161

Вы были правы, сейчас заработало. По какой-то причине почта не отправлялась, может, кэш мне надо было лучше чистить.

И написать так

public function getAllCustomers() {
        $query = $this->db->query("SELECT distinct `email` FROM `".DB_PREFIX."order`");
        return $query->rows;
    }

Иначе незарегистрированному покупателю, который 5 раз оформил заказ на сайте, будет приходить по 5 одинаковых писем рассылки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
James026    22

Мне кажется дело  в

 return $query->rows;

 и 

return $query->row;

Там множ число, там единственное)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу