Перейти к содержанию
katilina

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

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

Появилась необходимость рассылать письма незарегистрированным покупателям. Покопавшись в интернете нашла решение, но не работающее. Обращаюсь за помощью к ассам. Использую 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>
  • +1 1

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


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

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

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


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

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

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

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


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

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

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

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

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


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

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

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


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

public function getAllCustomers() {

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

return $query->rows;

}

  • +1 1

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


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

Или:

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

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

 

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

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

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


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

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

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

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


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

Ошибка в логах 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 и почему он не принимается от сервера?

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


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

Ошибка в логах 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 и почему он не принимается от сервера?

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

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


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

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

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

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


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

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

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


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

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

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

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


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

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

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

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


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

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

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


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

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

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

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

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

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


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

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

 return $query->rows;

 и 

return $query->row;

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

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.