My code runs fine on localhost with php mail enabled
It works fine in localhost but not in your remote hosting because your hosting company disabled it and you probably do not have much control over it.
To send an email in cakephp use Email class of Cakephp 3. In app.php under config folder, add a new entry in the table EmailTransport.
In your case ‘Smtp’. Specify host, port, username and password in it:
'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'
]
],
Now in Controller, the function to send email uses above-written entry in transport() function as below.
Add path in controller- use 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);
}
Also have in mind that many hosting companies also block default smtp ports. ( I'm aware that digital ocean does it, for example ). So, you might have to change that port or contact them to get it opened for you ( usually after some sort of verification ).
Some reference about what I just answered: https://www.digitalocean.com/community/questions/digital-ocean-firewall-blocking-sending-email