S
S
Sandro_s2018-10-07 19:34:08
Yii
Sandro_s, 2018-10-07 19:34:08

Swift_TransportException error when sending mail - how to fix?

The project has already implemented a send form when ordering goods and everything works ok. but now you also need to send emails via the 'Contacts' form
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 (for 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'));
    }
}
*/

Answer the question

In order to leave comments, you need to log in

2 answer(s)
S
Sandro_s, 2018-10-10
@Sandro_s

Swap 'setFrom' and 'setTo' in 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;
        }
    }

D
Dmitry, 2018-10-07
@slo_nik

Why don't you have the full address here?
With this parameter, you can "play around"
Try to disable, change ssl to tsl.
In general, you have an authorization error.
Here are the response codes
ps
In the Swift_SmtpTransport settings, you must specify your data to enter your account on the mail server.
for example

'host' => 'smtp.gmail.com', // или какой у него в действительности
'port' => '465', // или какой у него в действительности
'username' => '[email protected]'
'password' => '121212' // пароль для входа в [email protected]

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question