@Sandro_s

Ошибка Swift_TransportException при отправлении почты- как исправить?

В проекте уже реализована форма отправки при заказе товара и все работает ок. но теперь нужно сделать ещё и отправку писем через форму 'Контакты'

Error: Expected response code 354 but got code "503", with message "503 sender not yet given
"
config.web

spoiler
<?php

$params = require(__DIR__ . '/params.php');

$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'language' => 'ru-RU',
    // контроллер по умолчанию вместо site/index для польз.части
    'defaultRoute' => 'category/index',
    'modules' => [
        'admin' => [
            'class' => 'app\modules\admin\Module',
            'layout' => 'admin',
            'defaultRoute' => 'order/index',
                 ],
        /*'contactus'=> [
            'class' => 'app\modules\contactus\Module',
            'layout' => 'contact',
            'defaultRoute' => 'default/index',  
        ],*/
        /* 'user' => [
            'class' => 'app\modules\contactus\Module',
        ],*/
         'yii2images' => [
            'class' => 'rico\yii2images\Module',
            //be sure, that permissions ok
            //if you cant avoid permission errors you have to create "images" folder in web root manually and set 777 permissions
            'imagesStorePath' => 'upload/store', //path to origin images
            'imagesCachePath' => 'upload/cache', //path to resized copies
            'graphicsLibrary' => 'GD', //but really its better to use 'Imagick'
            'placeHolderPath' => '@webroot/upload/store/no-image.png', // if you want to get placeholder when image not exists, string will be processed by Yii::getAlias
        ],
    ],
    'components' => [
        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => '6H8SRuk9HIPbdCxI7C0lt16sl9rA1luC',
            'baseUrl'=>'',
        ],
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'user' => [
            'identityClass' => 'app\models\User',//если свой класс user, то здесь переименовать
            'enableAutoLogin' => true, //авторизация польз.на основе куки
// куда будет перенапр.польз.если неавтор.      
   //'loginUrl' => 'cart/view'
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
        'mailer' => [
        // 'class' => 'yii\swiftmailer\Mailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            'useFileTransport' => false, //если false то письма будут отпр. если true то в папке runtime 
            'transport'=>[
                'class' => 'Swift_SmtpTransport',     
                'host' => ('smtp.mail.ru'),
                'port' => ('465'), // для mail.ru
                'encryption' => ('ssl'), // tls
                'username' => ('mail'),
                'password' => ('123'),
                
               // 'host' => ('smtp.gmail.com'),
               /* 'options' => array('hostname' => 'smtp.gmail.com',*/
              /*  'username' => 'livadii17',
                'password' => 'paroll',
                'port' => '465',
                "encryption" => ("tls"),*/
            ],
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'db' => require(__DIR__ . '/db.php'),
        
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
            // более конкретные правила должны нах.впереди более общих
            // page и номер стр.
              'category/<id:\d+>/page/<page:\d+>' => 'category/view',
            //ссылка соотв. контр.cat и экшену view
                 'category/<id:\d+>' => 'category/view',
                 //для ссылки карточки товаров
                 'product/<id:\d+>' => 'product/view',
                 'search/<id:\d+>' => 'category/search',
           ],
        ],
        
    ],
    'controllerMap' => [
        'elfinder' => [
            'class' => 'mihaildev\elfinder\PathController',
            'access' => ['@'], //доступ к редактору только для авт.польз.
            'root' => [
                'baseUrl'=>'/web',//папка web upload добавляет сам.
//                'basePath'=>'@webroot',
                'path' => 'upload/global',//куда загружается файл
                'name' => 'Global'//название папки для загрузки в редакторе
                // на хост.дать права на запись
            ],
        ]
    ],
    'params' => $params,
];

if (YII_ENV_DEV) {
    // configuration adjustments for 'dev' environment
    $config['bootstrap'][] = 'debug';
    $config['modules']['debug'] = [
        'class' => 'yii\debug\Module',
    ];

    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = [
        'class' => 'yii\gii\Module',
    ];
}

return $config;



params.php

<?php

return [
    'adminEmail' => '@mail.ru',
     //'emailto'  => '@mail.ru',
];


IndexController (для Contact)

spoiler
<?php
/**
 * Created by PhpStorm.
 * User: Andrey
 * Date: 14.05.2016
 * Time: 10:37
 */

namespace app\controllers;

use Yii;
use yii\App\Controller;
use app\models\ContactForm;
use yii\web\Request;



class IndexController extends AppController
{


  public function actions()
    {
        return [
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
                'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
            ]
        ];
    }
// экшен корзины
    public function actionContact()
    {
        
        //$this->layout = 'contact';
        $this->layout = false;
        

          /* Создаем экземпляр класса */
        $model = new ContactForm();
        /* получаем данные из формы и запускаем функцию отправки contact, если все хорошо, выводим сообщение об удачной отправке сообщения на почту */
        if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app->params['adminEmail'])) {
            Yii::$app->session->setFlash('contactFormSubmitted');
            return $this->refresh();
        /* иначе выводим форму обратной связи */
        } else {
           return $this->render('contact', [
               'model' => $model,
         ]);
           /*  return $this->render('contact', compact('contact'));*/
        }
    }
}

   /*  public function actionView(){
       
       
        // выводим title E-SHOPPER и прицепляем название категории
        /* $this->setMeta('E-SHOPPER | ' . $category->name, $category->keywords, $category->description);

        // рендерим category/view и передаем в него найденные продукты
        return $this->render('index', compact('contact'));
    }
}
*/

  • Вопрос задан
  • 2800 просмотров
Решения вопроса 1
@Sandro_s Автор вопроса
Поменять местами 'setFrom' и 'setTo' в ContactForm

public function contact($adminEmail)
    {
        if(Yii::$app->mailer->compose()
            ->setFrom(Yii::$app->params['adminEmail']) /* от кого */
             ->setTo([$this->email => $this->name]) 
            ->setSubject('Админ') /* имя отправителя */
            ->setTextBody('Добрый день! Ваше сообщение принято!')->setCharset('UTF-8') /* текст сообщения */

                  ->send()
        ){
            return true;
        } else {
            return false;
        }
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега Yii
А почему у Вас тут не полностью адрес?
'adminEmail' => '@mail.ru',
С этим параметром можно "поиграться"
'encryption' => ('ssl'), // tls
Попробовать отключать, сменить ssl на tsl.
В общем у Вас ошибка авторизации.
Вот коды ответов

p.s.
В настройках Swift_SmtpTransport необходимо указать свои данные для входа в аккаунт на почтовом сервере.
Например
'host' => 'smtp.gmail.com', // или какой у него в действительности
'port' => '465', // или какой у него в действительности
'username' => 'username@gmail.com'
'password' => '121212' // пароль для входа в username@gmail.com
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы