I have a yiisoft/yii2-app-advanced installed. There are three main folders - common, frontend, backend. The folder for emails is in common/mail folder. If I try to send email from frontend controller on register user it throws me an error:
The view file does not exist:
C:\wamp64-3-2-0\www\yii2\frontend/mail\emailVerify-html.php
Registration is generated via console command. But is obvious that the path to mail folder is wrong. I found a workaround to it via
\Yii::$app->mailer->htmlLayout = '#common/mail/layouts/html';
\Yii::$app->mailer->textLayout = '#common/mail/layouts/text';
but it does not look very good. Is it possible to set it up in config file? Hope so. Thanks.
SO as I found out there is an option in config file named viewPath which is not mentioned in documentation.
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '#common/mail',
'useFileTransport' => false,
'transport' => [
'class' => 'Swift_SmtpTransport',
'encryption' => 'tls',
'host' => 'localhost',
'port' => '587',
'username' => 'your_username',
'password' => 'your_password',
],
],
Related
I get error when trying send mail with Yii::$app->mailer->compose() function. This error appears when trying to connect smtp server, so I provide error message and mailer YII2 configuration
Expected response code 250 but got code "535", with message "535-5.7.8
Username and Password not accepted.
Learn more at 535 5.7.8 https://support.google.com/mail/?p=BadCredentials 59sm3639427wrc.23 -> gsmtp"
Here is params from config/common.php file:
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'useFileTransport' => false,
'transport' => [
'class' => 'Swift_SmtpTransport',
'port' => '587',
'encryption' => 'tls',
'username' => 'myemailbox#yahoo.com',
'password' => 'myemailpass',
'host' => 'smtp.mail.yahoo.com',
],
],
I already enabled "Allow apps that use less secure sign in" function in Yahoo account settings. Trying "app password" option but got the same result.
Before using yahoo smtp I tried it the same way with google smtp. Error message still refers to the https://support.google.com page. Is it possible Apache cached login and pass to smtp server?
Of course I checked google support page and followed instructions included https://accounts.google.com/DisplayUnlockCaptcha page.
try changing port
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'useFileTransport' => false,
'transport' => [
'class' => 'Swift_SmtpTransport',
'port' => '465',
'encryption' => 'tls',
'username' => 'myemailbox#yahoo.com',
'password' => 'myemailpass',
'host' => 'smtp.mail.yahoo.com',
],
],
I resolved this case, but didn`t detect what exactly was the cause. Maybe there was some sort of cache of config error.
So I put this direct setting right before compose function:
\Yii::$app->mailer->setTransport([
'class' => 'Swift_SmtpTransport',
'port' => '587',
'encryption' => 'tls',
'username' => 'myemailbox#yahoo.com',
'password' => 'myemailpass',
'host' => 'smtp.mail.yahoo.com',
]);
And it started to work.
I use Windows and Yii 2.0.13.1 and xampp with php7.1.4.
When logging in, I click on reset it link and i'm entering my email and send, I encounter this error:
Swift_TransportException
Process could not be started [The system cannot find the path specified.
]
My common/config/main-local.php is:
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '#common/mail',
// 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,
],
Other settings and files are in the default mode.
what is the problem? Please guide me
Seems that in your config is missing the transport config
eg: using gmail.com as transport (you should choose the trasport available for your host)
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '#common/mail',
'useFileTransport' => false,//set this property to false to send mails to real email addresses
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.gmail.com',
'username' => 'yourmail#gmail.com',
'password' => 'your_password',
'port' => '587',
'encryption' => 'tls',
'streamOptions' => [
'ssl' => [
'verify_peer' => false,
'allow_self_signed' => true
],
]
],
],
Everything is right now
I tried to do some changes in common/config/main-local.php
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.mailtrap.io',
'username' => 'example#examplemail.com',
'password' => '***************',
'port' => '2525',
'encryption' => 'tls',
],
],
Maybe some of your transport settings are incorrect, so it cannot send an email. For local server you can just set useFileTransport to true like:
'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' => true,
],
Then check your <app>/runtime/mail/folder, where *.eml mail will be generated. Therefore you can click on your password-recovery link and proceed futher.
P.S. Yii2 advanced template includes email password-recovery feature from the box (if you are implementing it from scratch)
I have a error with yii2, I can't send emails via yii with a email account. If my password is correct :(
This is my code:
web.php
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.gmail.com',
'username' => 'user#hya.com.mx',
'password' => 'passwd',
'port' => '587',
'encryption' => 'tls',
],
],
'log'
Controller.php
Yii::$app -> mailer -> compose()
-> setFrom('users#hya.com.mx')
-> setTo('jhon#hya.com.mx')
-> setSubject('Test')
-> setTextBody('Plain text content')
-> setHtmlBody('It is a test')
-> send();
It looks like you are using Google SMTP server. Google has a new security check that only allows you to send emails from google apps. If you are using any other you will run into such errors. To fix this you can do as follows:
Use default sendmail function by having
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'useFileTransport' => false,
],
I find the first solution more efficient
Change google setting to allow less secure apps
Follow this link to change you gmail settion https://myaccount.google.com/security
I use the following configuration and work right
is pratically equals to yours but with a difference the username is google mail user and not an noyt google app user
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '#common/mail',
// 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' => true,
'useFileTransport' => false,//set this property to false to send mails to real email addresses
//comment the following array to send mail using php's mail function
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.gmail.com',
'username' => 'myname#gmail.com',
'password' => 'mypassword',
'port' => '587',
'encryption' => 'tls',
],
],
hope is useful
I get this error when i'am using yii2 with a postgresql database.
SQLSTATE[HY000] [2002] No such file or directory
Caused by: PDOException
SQLSTATE[HY000] [2002] No such file or directory
I configured the file main-local.php like this :
<?php
return [
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'pgsql:host=127.0.0.1;port=5432;dbname=dbname',
'username' => 'user',
'password' => 'pass',
'charset' => 'utf8',
],
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '#common/mail',
// 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' => true,
],
],
];
By the way when i use mysql it's working .
This is obviously a configuration problem.
Call the requirements page provided by yii2 and check if the PDO Postgresql extension is installed.
Get your config right. PostgreSQL is different to MySQL. Every Database Cluster contains at least one named database. A database contains at least one named schema which in turn contain tables.
With that knowledge, your main-local.php should look like this:
<?php
return [
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'pgsql:host=localhost;dbname=YOURDATABASE',
'username' => 'YOURPOSTGRESUSERNAME',
'password' => 'YOURPOSTGRESPASSWORD',
'charset' => 'utf8',
'schemaMap' => [
'pgsql' => [
'class' => 'yii\db\pgsql\Schema',
'defaultSchema' => 'public' //specify your schema here, public is the default schema
]
], // PostgreSQL
],
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '#common/mail',
// 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' => true,
],
],
];