提问人:PeterPan 提问时间:4/20/2022 最后编辑:PeterPan 更新时间:4/23/2022 访问量:1678
CodeIgnititer 4:无法使用 PHP SMTP 发送电子邮件
CodeIgnititer 4: Unable to send email using PHP SMTP
问:
我阅读了与该问题相关的所有其他答案,但没有一个有帮助。
当我尝试在我的本地主机或生产服务器上运行以下设置时,我收到以下错误消息:
Unable to send email using PHP SMTP. Your server might not be configured to send mail using this method.
我安装了 CodeIgniter 4 并添加了以下内容:.env
email.production.protocol = smtp
email.production.SMTPHost = my.server.com
email.production.SMTPUser = [email protected]
email.production.SMTPPass = MyPassword
email.production.SMTPCrypto = ssl
email.production.SMTPPort = 465
email.production.SMTPFromName = "Foo Bar"
对于端口或加密,或者我尝试了所有可能的选择。
在设置中已经设置(建议来自这里。465
587
ssl
tsl
app/Config/Email.php
public $newline = "\r\n";
我能够成功运行
telnet my.server.com 465
telnet my.server.com 587
然后我在末尾添加了以下代码:app/Config/Email.php
public function __construct()
{
$this->protocol = $_ENV['email.production.protocol'];
$this->SMTPHost = $_ENV['email.production.SMTPHost'];
$this->SMTPUser = $_ENV['email.production.SMTPUser'];
$this->SMTPPass = $_ENV['email.production.SMTPPass'];
$this->SMTPPort = $_ENV['email.production.SMTPPort'];
$this->SMTPCrypto = $_ENV['email.production.SMTPCrypto'];
$this->fromEmail = $_ENV['email.production.SMTPUser'];
$this->fromName = $_ENV['email.production.SMTPFromName'];
}
在我的控制器中,我添加了一个功能:
$email = \Config\Services::email();
$email->setSubject("Test");
$email->setMessage("Test");
$email->setTo("[email protected]");
if ($email->send(false)) {
return $this->getResponse([
'message' => 'Email successfully send',
]);
} else {
return $this
->getResponse(
["error" => $email->printDebugger()],
ResponseInterface::HTTP_CONFLICT
);
}
调用此函数将生成上述错误消息。 我假设这与错误消息所描述的服务器配置无关,因为 localhost 和生产环境正在发生。
更新:这必须与 CI 设置有关。无论我尝试使用哪种服务器,即使使用完全不正确的值(例如密码不正确),错误也是完全相同的。
答:
1赞
Ondri Nurdiansyah
4/20/2022
#1
我通常使用smtp gmail为我的客户发送电子邮件。“通过短信发送邮件 Gmail”中最重要的一点是,您必须更新Gmail安全规则:
- 在您的 Gmail 帐户中,单击“管理您的 Google 帐户”
- 单击“安全性”选项卡
- 然后,将“安全性较低的应用程序访问”设置为“打开”
之后,你像这样设置你的'app\config\EMail.php':
public $protocol = 'smtp';
public $SMTPHost = 'smtp.gmail.com';
public $SMTPUser = '[email protected]';
public $SMTPPass = 'yourpassword';
public $SMTPPort = 465;
public $SMTPCrypto = 'ssl';
public $mailType = 'html';
最后,您可以在控制器上创建 sendEmai 函数,如下所示:
$email = \Config\Services::email();
$email->setFrom('[email protected]', 'Mr Sender');
$email->setTo('[email protected]');
$email->setSubject('Test Subject');
$email->setMessage('Test My SMTP');
if (!$email->send()) {
return false;
}else{
return true;
}
评论
0赞
PeterPan
4/20/2022
感谢您的回答,但我没有 gmail 电子邮件地址。
0赞
steven7mwesigwa
4/20/2022
@ondri-nurdiansyah 请注意,自 2022 年 5 月 30 日起,Google 将不再支持使用要求您仅使用用户名和密码登录 Google 帐号的第三方应用或设备。- 安全性较低的应用和您的Google帐户
0赞
Ondri Nurdiansyah
4/20/2022
去年,我收到了来自我的组织的电子邮件。它使用“roundcube”作为邮件服务器,我使用PHPMailer库通过PHP发送电子邮件。控制器上的设置和功能看起来很相似
0赞
PeterPan
4/20/2022
@OndriNurdiansyah 我正在使用自己的邮件服务器,我需要使用 SMTP。在其他 php 库中,我的邮件服务器正在工作。我认为问题出在代码上。
评论