Мой код прекрасно работает на локальном хосте с включенной поддержкой php mail
Он отлично работает на локальном хосте, но не на удаленном хостинге, потому что хостинговая компания отключила его, а вы , вероятно, не контролируйте его.
Чтобы отправить электронное письмо в cakephp, используйте класс электронной почты Cakephp 3. В app.php в папке config добавьте новую запись в таблицу EmailTransport.
В вашем случае «Smtp». Укажите в нем хост, порт, имя пользователя и пароль:
'EmailTransport' => [
'default' => [
'className' => 'Smtp',
// The following keys are used in SMTP transports
'host' => 'localhost',
'port' => 25,
'timeout' => 30,
'username' => 'user',
'password' => 'secret',
'client' => null,
'tls' => null,
'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null),
],
‘mail’=> [
'host' => 'smtp.gmail.com',
'port' => 587,
'username' =>xxxxx', //gmail id
'password' =>xxxxx, //gmail password
'tls' => true,
'className' => 'Smtp'
]
],
Теперь в Controller функция отправки электронной почты использует записанную выше запись в функции transport (), как показано ниже.
Добавить путьв контроллере - используйте Cake \ Mailer \ Email:
function sendEmail()
{
$message = "Hello User";
$email = new Email();
$email->transport('mail');
$email->from(['Sender_Email_id' => 'Sender Name'])
->to('Receiver_Email_id')
->subject(‘Test Subject’)
->attachments($path) //Path of attachment file
->send($message);
}
Также имейте в виду, что многие хостинговые компании также блокируют стандартные порты smtp. (Я знаю, что цифровой океан делает это, например). Поэтому вам, возможно, придется изменить этот порт или связаться с ним, чтобы он был открыт для вас (обычно после некоторой проверки).
Некоторые сведения о том, что я только что ответил: https://www.digitalocean.com/community/questions/digital-ocean-firewall-blocking-sending-email