Jump to content

Отправка писем через сторонний SMTP


Go to solution Solved by n0a,

Recommended Posts

  • Replies 57
  • Created
  • Last Reply

Top Posters In This Topic

  • 3 months later...

ДД! Фрилансеры, не подскажите с данным модулем? Когда захожу в заказ, и жму - уведомить покупателя, далее вылезает ошибка: SMTP Error: Could not connect to SMTP host. Не может законектить в хосту

 

Что делаю:

 

1. Скачал прикрепленный файл, и кинул в корень сайта

2. В config/config.php, добавил: 

[phpmailer]
phpmailer_enable = true;
phpmailer_host = 'ssl://smtp.yandex.ru';
phpmailer_port = 465;
phpmailer_user = 'login@yandex.ru';
phpmailer_password = 'password';
phpmailer_ssl = true;

Пробовал менять по разному настройки, и без ssl, и порт менял и т.д.

 

3. Далее в файле api/Notify.php, как посоветовали выше, пробовал менять на:

$mailer->From = $mailer->Username; // $from
$mailer->FromName = "robot";
$mailer->Sender = $mailer->Username;

 

также, оставлял все по дефолту.

 

Результат один: SMTP Error: Could not connect to SMTP host

 

Link to post
Share on other sites
  • 1 month later...

а можете выложить отдельно изменения notify.php? у меня он сильно нестандартный уже, просто заменить не получится

 

нужно скопировать и заменить первую ф-ю function email

Link to post
Share on other sites

Спасибо! работает

 

только почему-то не отправляются письма клиентам, пишет что неверный адрес хотя пробовал разные http://take.ms/82Qkq

возможно причина не в этой доработке но интересно бы найти ее

Link to post
Share on other sites
  • 3 months later...

Рабочий пример для smtp.yandex.ru

В api/Notify.php заменить ssl на tls

if ($this->config->phpmailer_ssl == true) {
  $mailer->SMTPSecure = "tls";
}

В config/config.php

[phpmailer]
phpmailer_enable = true;
phpmailer_host = "smtp.yandex.ru";
phpmailer_port = 25;
phpmailer_user = "login@domain.com";
phpmailer_password = "password";
phpmailer_ssl = true;
Link to post
Share on other sites
  • 2 weeks later...

У кого SMTP Error: Could not connect to SMTP host

 

Попробуйте вот тут вообще без кавычек:

 

[phpmailer]
phpmailer_enable = true;
phpmailer_host = smtp.provider.com;
phpmailer_port = 25;
phpmailer_user = login@domain.com;
phpmailer_password = password;
phpmailer_ssl = true;

 

Мне помогло.

Link to post
Share on other sites

У меня ошибка так же 

 

SMTP Error: Could not connect to SMTP host. 

А делал все что советовали в посте,  почта на яндеке info@site.ru

Все делал верно, если у многих так, думаю скрипт не рабочий.

Edited by Axotn1k
Link to post
Share on other sites
  • 3 weeks later...

Пипец, ради интереса почитал тему))

В ней 3 ТРИ!!! раза выложена ссылка на БЕСПЛАТНОЕ рабочее решение, плюс хитровыебанный Корс бесплатное решение продает :)

Зачем мучать труп?

Ради пиара гребанного Корса? Другого смысла не вижу...

Link to post
Share on other sites

Уважаемые администраторы!

Прошу удалить пост г-на Kosyak76-a c грязными ругательствами в мой адрес как нарушающий правила форума.

 

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

во-первых, после прямого вопроса посетителя,

во-вторых, много месяцев назад.

 

Кстати, тот посетитель задал свой вопрос ПОСЛЕ того, как были опубликованы другие решения, видимо, что-то ему в них не понравилось...

Link to post
Share on other sites

хитровыебанный Корс бесплатное решение продает :)

Ради пиара гребанного Корса? 

 

Корс опубликовал ссылку на свое решение, когда человек прямо попросил за деньги. К чему маты?

http://forum.simplacms.ru/topic/5654-отправка-писем-через-сторонний-smtp/?p=80421

Link to post
Share on other sites
  • 4 months later...

19.10.2016

так же в инет магазине (на Simpla 2.3.7) перестали приходить заказы на почту

перечитал этот форум и не сразу, но сделал рабочий вариант

ссылка на архив

Edited by Lncm
Link to post
Share on other sites
  • 4 months later...
  • 1 month later...
  • Solution

Тема старая, PHPMailer уже давно обновился. Выкладываю рабочую инструкцию:

 

1. Скачиваем PHPMailer и кладем в корень сайта: https://github.com/PHPMailer/PHPMailer и переименовываем PHPMailer-master в PHPMailer. Для тех, кто работает по ssh: 

$ git clone https://github.com/PHPMailer/PHPMailer

2. Заменяем содержимое api/Notify.php на следующее:

<?php

/**
 * Simpla CMS
 *
 * @copyright	2011 Denis Pikusov
 * @link		http://simplacms.ru
 * @author		Denis Pikusov
 *
 */
class Notify extends Simpla {

    function email($to, $subject, $message, $from = '', $reply_to = '') {
        if (!$this->config->phpmailer_enable) {
            $headers = "MIME-Version: 1.0\n";
            $headers .= "Content-type: text/html; charset=utf-8; \r\n";
            $headers .= "From: $from\r\n";
            if (!empty($reply_to))
                $headers .= "reply-to: $reply_to\r\n";

            $subject = "=?utf-8?B?" . base64_encode($subject) . "?=";

            @mail($to, $subject, $message, $headers);
        } else {
            require_once 'PHPMailer/PHPMailerAutoload.php';

            $mailer = new Phpmailer();

            $mailer->IsHTML(true);
            $mailer->SMTPDebug = 0;
            $mailer->CharSet = "utf-8";

            $mailer->IsSMTP();
            $mailer->Host = $this->config->phpmailer_host;
            $mailer->Port = $this->config->phpmailer_port;

            if ($this->config->phpmailer_ssl == true) {
                $mailer->SMTPSecure = "ssl";
            }

            $mailer->SMTPAuth = true;
            $mailer->Username = $this->config->phpmailer_user;
            $mailer->Password = $this->config->phpmailer_password;


            $mailer->AddAddress($to);
            $mailer->From = $mailer->Username; // $from
            $mailer->FromName = "do-not-reply";
            $mailer->Sender = $mailer->Username;
            $mailer->Subject = $subject;
            $mailer->Body = $message;
            
            $mailer->Send();
        }
    }

    public function email_order_user($order_id) {
        if (!($order = $this->orders->get_order(intval($order_id))) || empty($order->email))
            return false;

        $purchases = $this->orders->get_purchases(array('order_id' => $order->id));
        $this->design->assign('purchases', $purchases);

        $products_ids = array();
        $variants_ids = array();
        foreach ($purchases as $purchase) {
            $products_ids[] = $purchase->product_id;
            $variants_ids[] = $purchase->variant_id;
        }

        $products = array();
        foreach ($this->products->get_products(array('id' => $products_ids)) as $p)
            $products[$p->id] = $p;

        $images = $this->products->get_images(array('product_id' => $products_ids));
        foreach ($images as $image)
            $products[$image->product_id]->images[] = $image;

        $variants = array();
        foreach ($this->variants->get_variants(array('id' => $variants_ids)) as $v) {
            $variants[$v->id] = $v;
            $products[$v->product_id]->variants[] = $v;
        }

        foreach ($purchases as &$purchase) {
            if (!empty($products[$purchase->product_id]))
                $purchase->product = $products[$purchase->product_id];
            if (!empty($variants[$purchase->variant_id]))
                $purchase->variant = $variants[$purchase->variant_id];
        }

        // Способ доставки
        $delivery = $this->delivery->get_delivery($order->delivery_id);
        $this->design->assign('delivery', $delivery);

        $this->design->assign('order', $order);
        $this->design->assign('purchases', $purchases);

        // Отправляем письмо
        // Если в шаблон не передавалась валюта, передадим
        if ($this->design->smarty->getTemplateVars('currency') === null) {
            $this->design->assign('currency', reset($this->money->get_currencies(array('enabled' => 1))));
        }
        $email_template = $this->design->fetch($this->config->root_dir . 'design/' . $this->settings->theme . '/html/email_order.tpl');
        $subject = $this->design->get_var('subject');
        $this->email($order->email, $subject, $email_template, $this->settings->notify_from_email);
    }

    public function email_order_admin($order_id) {
        if (!($order = $this->orders->get_order(intval($order_id))))
            return false;

        $purchases = $this->orders->get_purchases(array('order_id' => $order->id));
        $this->design->assign('purchases', $purchases);

        $products_ids = array();
        $variants_ids = array();
        foreach ($purchases as $purchase) {
            $products_ids[] = $purchase->product_id;
            $variants_ids[] = $purchase->variant_id;
        }

        $products = array();
        foreach ($this->products->get_products(array('id' => $products_ids)) as $p)
            $products[$p->id] = $p;

        $images = $this->products->get_images(array('product_id' => $products_ids));
        foreach ($images as $image)
            $products[$image->product_id]->images[] = $image;

        $variants = array();
        foreach ($this->variants->get_variants(array('id' => $variants_ids)) as $v) {
            $variants[$v->id] = $v;
            $products[$v->product_id]->variants[] = $v;
        }

        foreach ($purchases as &$purchase) {
            if (!empty($products[$purchase->product_id]))
                $purchase->product = $products[$purchase->product_id];
            if (!empty($variants[$purchase->variant_id]))
                $purchase->variant = $variants[$purchase->variant_id];
        }

        // Способ доставки
        $delivery = $this->delivery->get_delivery($order->delivery_id);
        $this->design->assign('delivery', $delivery);

        // Пользователь
        $user = $this->users->get_user(intval($order->user_id));
        $this->design->assign('user', $user);

        $this->design->assign('order', $order);
        $this->design->assign('purchases', $purchases);

        // В основной валюте
        $this->design->assign('main_currency', $this->money->get_currency());

        // Отправляем письмо
        $email_template = $this->design->fetch($this->config->root_dir . 'simpla/design/html/email_order_admin.tpl');
        $subject = $this->design->get_var('subject');
        $emails = explode(';', $this->settings->order_email);

        foreach ($emails as $email)
            $this->email(trim($email), $subject, $email_template, $this->settings->notify_from_email);
    }

    public function email_comment_admin($comment_id) {
        if (!($comment = $this->comments->get_comment(intval($comment_id))))
            return false;

        $this->design->assign('comment', $comment);

        // Отправляем письмо
        $email_template = $this->design->fetch($this->config->root_dir . 'simpla/design/html/email_comment_admin.tpl');
        $subject = $this->design->get_var('subject');
        $emails = explode(';', $this->settings->comment_email);

        foreach ($emails as $email)
            $this->email(trim($email), $subject, $email_template, $this->settings->notify_from_email);
    }

    public function email_password_remind($user_id, $code) {
        if (!($user = $this->users->get_user(intval($user_id))))
            return false;

        $this->design->assign('user', $user);
        $this->design->assign('code', $code);

        // Отправляем письмо
        $email_template = $this->design->fetch($this->config->root_dir . 'design/' . $this->settings->theme . '/html/email_password_remind.tpl');
        $subject = $this->design->get_var('subject');
        $this->email($user->email, $subject, $email_template, $this->settings->notify_from_email);

        $this->design->smarty->clearAssign('user');
        $this->design->smarty->clearAssign('code');
    }

    public function email_feedback_admin($feedback_id) {
        if (!($feedback = $this->feedbacks->get_feedback(intval($feedback_id))))
            return false;

        $this->design->assign('feedback', $feedback);

        // Отправляем письмо
        $email_template = $this->design->fetch($this->config->root_dir . 'simpla/design/html/email_feedback_admin.tpl');
        $subject = $this->design->get_var('subject');
        $emails = explode(';', $this->settings->comment_email);

        foreach ($emails as $email)
            $this->email(trim($email), $subject, $email_template, "$feedback->name <$feedback->email>", "$feedback->name <$feedback->email>");
    }
}

 

 

3. В конце файла config/config.php добавляем:

 

[phpmailer]
phpmailer_enable = true;
phpmailer_host = "smtp.yandex.ru";
phpmailer_port = 465;
phpmailer_user = "mail@domain";
phpmailer_password = "pass";
phpmailer_ssl = true;
 

Где mail@domain – имя вашей учетной записи на сервере yandex, pass – ваш пароль. После этих изменений все будет работать как часы.

Link to post
Share on other sites
  • 3 weeks later...
  • 5 weeks later...

Аналогично, как и на примере Яндекс. 

 

Outgoing Server Name: smtp.zoho.eu

Port: 465

Security Type: SSL 

 

Скорее всего, что нужно будет указать, что 

 

phpmailer_host = "ssl://smtp.zoho.eu"; 
Edited by artbykoff
Link to post
Share on other sites
  • 3 months later...

Ребята, все поставил по инструкции, но выдает ошибку:

 

 

 

Fatal error: require_once() [function.require]: Failed opening required 'PHPMailer/PHPMailerAutoload.php' (include_path='.:/usr/local/pear/php52') in /home/ikurtov/itarget.com.ua/www/api/Notify.php on line 25

 

 

Можете помочь??? Пожалуйста ...

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...