Локальная отправка email в консоли. Где файл email ?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
zxczxc12
Сообщения: 133
Зарегистрирован: 2013.01.24, 21:16

Локальная отправка email в консоли. Где файл email ?

Сообщение zxczxc12 » 2017.12.12, 02:33

У меня настроено так , что если локально я отправляю email ( SwiftMailer) то файл мыла ложится в зависимости от id приложения в котором запускается майлер:

frontent -> frontend/runtime/mail/...
backend -> backend/runtime/mail/...

но вот с консолью мыла нет :-(
console -> console/runtime/<НЕТ ПАПКИ MAIL>


подскажите подалуйста как исправить данную ситуацию

Аватара пользователя
yiijeka
Сообщения: 3031
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь

Re: Локальная отправка email в консоли. Где файл email ?

Сообщение yiijeka » 2017.12.12, 08:35

> то файл мыла ложится в зависимости от id приложения....

Покажите код

zxczxc12
Сообщения: 133
Зарегистрирован: 2013.01.24, 21:16

Re: Локальная отправка email в консоли. Где файл email ?

Сообщение zxczxc12 » 2017.12.12, 10:15

yiijeka писал(а):
2017.12.12, 08:35
> то файл мыла ложится в зависимости от id приложения....

Покажите код

Так показывать то и нечего :

Код: Выделить всё

$mailer = new Mailer();
$mailer->compose(['html' => $this->html_view, 'text' => $this->text_view], $this->params)
            ->setTo($this->to)
            ->setFrom($this->sender_email)
            ->setSubject($this->subject)
            ->send();
но можно вообще упростить вопрос

YII_DEBUG = true
и
YII_ENV = dev

Код: Выделить всё

Yii::error('test');
Вопрос - где файл mail ??
( в глобальном варианте шлет правильно на мыло домена )

zxczxc12
Сообщения: 133
Зарегистрирован: 2013.01.24, 21:16

Re: Локальная отправка email в консоли. Где файл email ?

Сообщение zxczxc12 » 2017.12.12, 10:17

yiijeka писал(а):
2017.12.12, 08:35
> то файл мыла ложится в зависимости от id приложения....

Покажите код

Так показывать то и нечего :

Код: Выделить всё

$mailer = new Mailer();
$mailer->compose(['html' => $this->html_view, 'text' => $this->text_view], $this->params)
            ->setTo($this->to)
            ->setFrom($this->sender_email)
            ->setSubject($this->subject)
            ->send();
но можно вообще упростить вопрос

YII_DEBUG = true
и
YII_ENV = dev
\Выполняем в консоли код контроллера:

Код: Выделить всё

class SendRegistrationReminderController extends \yii\console\Controller
{
    public function actionIndex()
    {
        \Yii::error('test');
        exit;
     }
}
Вопрос - где файл mail ??
( в глобальном варианте шлет правильно на мыло домена )

Аватара пользователя
Dominus
Сообщения: 759
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Локальная отправка email в консоли. Где файл email ?

Сообщение Dominus » 2017.12.12, 10:31

Может дело в console/config/params.php?
А именно:

Код: Выделить всё

<?php
return [
    'adminEmail' => '',// <---
    'supportEmail' => '',    
];
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!

zxczxc12
Сообщения: 133
Зарегистрирован: 2013.01.24, 21:16

Re: Локальная отправка email в консоли. Где файл email ?

Сообщение zxczxc12 » 2017.12.12, 12:39

Dominus писал(а):
2017.12.12, 10:31
Может дело в console/config/params.php?
А именно:

Код: Выделить всё

<?php
return [
    'adminEmail' => '',// <---
    'supportEmail' => '',    
];

не
дело не в этом ( но я попробовал на всякий случай )

и да, мне определенно понятно что дело в конфиге , но где именно - вопрос

поэтому покажу ка я вообще конфигурацию:

код файла Yii.php который используется при запуске контроллера в консоли:

Код: Выделить всё

#!/usr/bin/env php
<?php
/**
 * Yii console bootstrap file.
 *
 * @link http://www.yiiframework.com/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

define('YII_DEBUG',false);
require(__DIR__ . '/env.php');

// fcgi doesn't have STDIN and STDOUT defined by default
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));

require(__DIR__ . '/vendor/autoload.php');
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/common/config/bootstrap.php');
require(__DIR__ . '/console/config/bootstrap.php');


$config = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/common/config/base.php'),
    require(__DIR__ . '/console/config/console.php')
);

$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);


env.php

Код: Выделить всё

<?php

/**
 * Require helpers
 */
require_once(__DIR__ . '/common/helpers.php');

defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');


common/config/base.php

Код: Выделить всё

<?php
$config = [
    'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
    'extensions' => require(__DIR__ . '/../../vendor/yiisoft/extensions.php'),
    'language' => Yii::getAlias('@defaultLanguage'),
    'sourceLanguage' => 'ru',
    'bootstrap' => ['log'],
    'defaultRoute' => 'site/index',

    'components' => [

        'cache' => [
            'class' => 'yii\redis\Cache',
            'redis' => [
                'hostname' => 'localhost',
                'port' => 6379,
                'database' => 0,
            ],
            'keyPrefix' => Yii::getAlias('@domainName')
        ],

        'redis' => [
            'class' => 'yii\redis\Connection',
            'hostname' => 'localhost',
            'port' => 6379,
            'database' => 1,
        ],

        'formatter' => [
            'class' => 'yii\i18n\Formatter',
            //'dateFormat' => 'MM-dd-yyy',
            //'datetimeFormat' => 'php:m-d-Y H:i:s',
            //'timeFormat' => 'H:i:s',
            'timeZone' => 'UTC',
            'locale' => 'en_US'
        ],

        'i18n' => [
            'translations' => [
                '*' => [
                    'class' => 'yii\i18n\DbMessageSource',
                    'db' => 'db',
                    'sourceLanguage' => 'ru', // Developer language
                    'sourceMessageTable' => '{{%language_source}}',
                    'messageTable' => '{{%language_translate}}',
                    'cachingDuration' => 86400,
                    'enableCaching' => YII_DEBUG ? false : true,
                    'forceTranslation' => true
                ],
            ],
        ],

        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => Yii::getAlias('@dsn'),
            'username' => Yii::getAlias('@dbUsername'),
            'password' => Yii::getAlias('@dbPassword'),
            'charset' => 'utf8',
            'enableSchemaCache' => true,
            'schemaCache' => 'cache',
            'schemaCacheDuration' => 5533600,
        ],

        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'useFileTransport' => YII_DEBUG ? true : false,
            'messageConfig' => [
                'charset' => 'UTF-8',
                'from' => Yii::getAlias('@supportEmail')
            ]
        ],

        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                'db' => [
                    'class' => 'yii\log\DbTarget',
                    'levels' => ['error', 'warning'],
                    'except' => [
                        'yii\web\HttpException:404',
                    ],
                    'prefix' => function () {
                        $url = !Yii::$app->request->isConsoleRequest ? Yii::$app->request->getUrl() : null;

                        return sprintf('[%s][%s]', Yii::$app->id, $url);
                    },
                    'logVars' => ['_SERVER'],
                    'logTable' => '{{%system_log}}',
                ],
                [
                    'class' => 'yii\log\EmailTarget',
                    'mailer' => 'mailer',
                    'levels' => ['error', 'warning'],
                    'message' => [
                        'to' => [Yii::getAlias('@supportEmail')],
                        'subject' => 'Server LOG',
                    ],
                ],
            ],
        ],

        'settings' => [
            'class' => 'common\components\Settings'
        ]

    ],

    'modules' => [

        'gridview' => [
            'class' => '\kartik\grid\Module'
        ],

        'fileStorage' => [
            'class' => '\trntv\filekit\Storage',
            'baseUrl' => '@storageUrl/source',
            'filesystem' => [
                'class' => 'common\components\filesystem\LocalFlysystemBuilder',
                'path' => '@storage/web/source'
            ],
            'as log' => [
                'class' => 'common\behaviors\FileStorageLogBehavior',
                'component' => 'fileStorage'
            ]
        ],
    ],

    'params' => [
        'appName' => Yii::getAlias('@appName'),
        'adminEmail' => Yii::getAlias('@adminEmail'),
        'robotEmail' => Yii::getAlias('@robotEmail'),
        'supportEmail' => Yii::getAlias('@supportEmail'),
        'pageSize' => 10
    ],

];

if (YII_ENV == 'prod') {
    $config['components']['log']['targets']['email'] = [
        'class' => 'yii\log\EmailTarget',
        'levels' => ['error'],
        'message' => ['from' => Yii::getAlias('@robotEmail'), 'to' => Yii::getAlias('@errorEmail')]
    ];
}

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

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

return $config;
console/config/console.php

Код: Выделить всё

<?php
return [
    'id' => 'console',
    'basePath' => dirname(__DIR__),
    'controllerNamespace' => 'console\controllers',
    'bootstrap' => ['log'],
    'controllerMap' => [

        'message' => [
            'class' => 'console\controllers\ExtendedMessageController'
        ],

        'app' => 'console\\controllers\\AppController',

        'migrate' => 'dmstr\\console\\controllers\\MigrateController',

        'rbac' => [
            'class' => 'console\controllers\RbacController'
        ],

        'fixture' => [
            'class' => 'yii\faker\FixtureController',
            'fixtureDataPath' => '@tests/common/fixtures/data',
            'templatePath' => '@tests/common/templates/fixtures',
            'namespace' => 'tests\common\fixtures',
        ],
    ],

    'modules' => [
        'rbac' => 'dektrium\rbac\RbacConsoleModule',
    ],

    'params' => [
        'yii.migrations' => [
            '@lajax/translatemanager/migrations',
            '@modules/user/migrations',
            '@yii/rbac/migrations',
        ],
    ],

];

Аватара пользователя
Dominus
Сообщения: 759
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Локальная отправка email в консоли. Где файл email ?

Сообщение Dominus » 2017.12.12, 14:12

Только что сделал тест в своём приложении, всё норм, письмо приходит в папку console/runtime/mail.
Приведу свою конфигурацию и код с тестовым контроллером:
yii.php

Код: Выделить всё

#!/usr/bin/env php
<?php
/**
 * Yii console bootstrap file.
 *
 * @link http://www.yiiframework.com/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/vendor/autoload.php');
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/common/config/bootstrap.php');
require(__DIR__ . '/console/config/bootstrap.php');

$config = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/common/config/main.php'),
    require(__DIR__ . '/common/config/main-local.php'),
    require(__DIR__ . '/console/config/main.php'),
    require(__DIR__ . '/console/config/main-local.php')
);

$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);
common/config/main.php

Код: Выделить всё

return [
    //...
    'components' => [
        //...
        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'viewPath' => '@common/mail',
            'useFileTransport' => false,
        ],
    ],
    //...
];
common/config/main-local.php

Код: Выделить всё

return [
    //...
    'components' => [
        //...
        'mailer' => [                       
            'useFileTransport' => true,
        ],
    ],
    //...
];
console/config/main.php

Код: Выделить всё

<?php
$params = array_merge(
    require(__DIR__ . '/../../common/config/params.php'),
    require(__DIR__ . '/../../common/config/params-local.php'),
    require(__DIR__ . '/params.php'),
    require(__DIR__ . '/params-local.php')
);
return [
    'id' => 'app-console',
    'language' => 'en',
    //...
    'params' => $params,
];
console/config/params.php

Код: Выделить всё

<?php
return [
    'adminEmail' => '',
    'supportEmail' => '',
];
console/config/params-local.php

Код: Выделить всё

<?php
return [
    'adminEmail' => 'admin@example.loc',
    'supportEmail' => 'support@example.loc',
];
console/controllers/EmailController.php

Код: Выделить всё

<?php

namespace console\controllers;

use Yii;
use yii\console\Controller;
use console\components\helpers\Console;

/**
 * Class EmailController
 * @package console\controllers
 */
class EmailController extends Controller
{
    public function actionIndex()
    {
        echo 'yii email/send' . PHP_EOL;
    }

    public function actionSend()
    {
        $email = Yii::$app->params['supportEmail'];
        $send = Yii::$app->mailer->compose()
            ->setTo($email)
            ->setFrom(['test@example.loc' => 'Tester'])
            ->setSubject('Testing')
            ->setTextBody('Send email test for console app.')
            ->send();
        $this->log($send);
    }

    /**
     * @param bool $success
     */
    private function log($success)
    {
        if ($success) {
            $this->stdout(Console::convertEncoding(Yii::t('app', 'Success!')), Console::FG_GREEN, Console::BOLD);
        } else {
            $this->stderr(Console::convertEncoding(Yii::t('app', 'Error!')), Console::FG_RED, Console::BOLD);
        }
        echo PHP_EOL;
    }
}
Результат:

Код: Выделить всё

> php yii email/send
Success!
Письмо пришло в console/runtime/mail
Вроде ничего не забыл.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!

Nex-Otaku
Сообщения: 809
Зарегистрирован: 2016.07.09, 21:07

Re: Локальная отправка email в консоли. Где файл email ?

Сообщение Nex-Otaku » 2017.12.12, 18:16

Дебаг-то включи )

Сам его здесь отключаешь:
zxczxc12 писал(а):
2017.12.12, 12:39
код файла Yii.php который используется при запуске контроллера в консоли:

Код: Выделить всё

#!/usr/bin/env php
<?php
define('YII_DEBUG',false);
require(__DIR__ . '/env.php');
А потом по отключенному дебагу не используешь вывод в файл:
zxczxc12 писал(а):
2017.12.12, 12:39
common/config/base.php

Код: Выделить всё

        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'useFileTransport' => YII_DEBUG ? true : false,
            'messageConfig' => [
                'charset' => 'UTF-8',
                'from' => Yii::getAlias('@supportEmail')
            ]
        ],

urichalex
Сообщения: 800
Зарегистрирован: 2015.08.07, 11:03

Re: Локальная отправка email в консоли. Где файл email ?

Сообщение urichalex » 2017.12.12, 18:18

useFileTransport не указан

zxczxc12
Сообщения: 133
Зарегистрирован: 2013.01.24, 21:16

Re: Локальная отправка email в консоли. Где файл email ?

Сообщение zxczxc12 » 2017.12.13, 09:04

Nex-Otaku писал(а):
2017.12.12, 18:16
Дебаг-то включи )

Аидиегомать !

Спасибо внеземное !!!

Спасибо всем кто заморочился с моей проблемой !!!!!

Ответить