配置 CakePhp 以使用 SMTP 发送邮件
Configure CakePhp to send mail with SMTP
为了安全起见,我的网络服务器已禁用邮件我现在需要重新配置我的蛋糕php代码以按照主机的建议通过 SMTP 发送电子邮件。
我的代码在启用 php 邮件的本地主机上运行良好
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
My code runs fine on localhost with php mail enabled
它在本地主机上运行良好,但在您的远程主机上却不行,因为您的托管公司禁用了它并且您可能对它没有太多控制权。
要在 cakephp 中发送电子邮件,请使用 Cakephp 3 的电子邮件 class。在配置文件夹下的 app.php 中,在 table 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
对我有用的是https://book.cakephp.org/2/en/core-utility-libraries/email.html
编辑/app/Config/email.php
public $smtp = array(
'transport' => 'Smtp',
'from' => array('xxxxxxxxxx@gmail.com' => 'Betting site'),
'host' => 'ssl://smtp.gmail.com',
'port' => 465,
'username' => 'xxxxxxxxxx@gmail.com',
'password' => 'xxxxxxxxxxpass',
'client' => null,
'log' => true
);
为了安全起见,我的网络服务器已禁用邮件我现在需要重新配置我的蛋糕php代码以按照主机的建议通过 SMTP 发送电子邮件。
我的代码在启用 php 邮件的本地主机上运行良好
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
My code runs fine on localhost with php mail enabled
它在本地主机上运行良好,但在您的远程主机上却不行,因为您的托管公司禁用了它并且您可能对它没有太多控制权。
要在 cakephp 中发送电子邮件,请使用 Cakephp 3 的电子邮件 class。在配置文件夹下的 app.php 中,在 table 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
对我有用的是https://book.cakephp.org/2/en/core-utility-libraries/email.html
编辑/app/Config/email.php
public $smtp = array(
'transport' => 'Smtp',
'from' => array('xxxxxxxxxx@gmail.com' => 'Betting site'),
'host' => 'ssl://smtp.gmail.com',
'port' => 465,
'username' => 'xxxxxxxxxx@gmail.com',
'password' => 'xxxxxxxxxxpass',
'client' => null,
'log' => true
);