我读了所有与那个问题有关的其他答案,但没有一个有帮助。
当我尝试在我的localhost或我的生产服务器上运行以下安装程序时,我收到以下错误消息:
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 = My@Mail.com
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";
已经设置(来自here的建议。
我能够成功运行
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("myaddress@example.com");
if ($email->send(false)) {
return $this->getResponse([
'message' => 'Email successfully send',
]);
} else {
return $this
->getResponse(
["error" => $email->printDebugger()],
ResponseInterface::HTTP_CONFLICT
);
}
调用这个函数会产生上面描述的错误消息。我假设这与错误消息描述的服务器配置无关,因为这是在本地主机和生产上发生的。
更新:这一定与CI设置有关。无论我尝试什么服务器,即使是完全不正确的值(eidogg.不正确的密码),错误也是完全相同的。
1条答案
按热度按时间goucqfw61#
我通常使用smtp gmail为我的客户发送电子邮件。“通过smtp gmail发送电子邮件”最重要的是你必须更新你的Gmail安全规则:
1.在您的Gmail帐户中,点击管理您的Google帐户
1.单击选项卡安全
1.然后,将“不太安全的应用程序访问”设置为“打开”
在这之后,您可以像这样设置您的“app\config\EMail.php”:
最后,您可以在控制器上创建sendEmai函数,如下所示: