Настройте CakePhp для отправки почты с SMTP - PullRequest
2 голосов
/ 28 октября 2019

Мои веб-серверы отключили почту в целях безопасности. Теперь мне нужно перенастроить мой код CakePHP для отправки писем через SMTP в соответствии с рекомендациями хоста.

Мой код работает на локальном хосте с включенной поддержкой php mail

use Cake\Mailer\Email;

class LoansController extends AppController

public function sendtestemail(){
$email = new Email();
$email->setViewVars(['name' => 'test test', 'subject'=>'subject test', 
'message'=>'testit']);
$email
->template('bulkemail')
->emailFormat('html')
->to('info@test.co.ke')
->from('info@test.co.ke')
->subject($subject)
->send();
}

ошибка: не удалось отправить электронное письмо: mail () было отключено по соображениям безопасности Cake \ Network \ Exception \ SocketException

1 Ответ

1 голос
/ 28 октября 2019

Мой код прекрасно работает на локальном хосте с включенной поддержкой 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

...