【问题标题】:PHP Nette Throws Error When Someone Submits Form当有人提交表单时 PHP Nette 抛出错误
【发布时间】:2021-09-25 20:43:38
【问题描述】:

每当有人提交表单时,我都会收到此错误:

致命错误:未捕获的 Nette\Mail\SendException:无法发送电子邮件。

这是我的代码:

if ($form->isSubmitted()) {
  $values = $form->getValues();

  $mail = new \Nette\Mail\Message;
  $mail->setFrom('asdr1@yahoo.com')
          ->addTo('asdr1@yahoo.com')
          ->setSubject('New contact')
          ->setHtmlBody('Hi<br> you\'ve got new message.<br> from: ' . $values['name'] . '<br> email: ' . $values['email'] . '<br> Message:' . $values['message']);

  $mailer = new Nette\Mail\SendmailMailer();
  $mailer->send($mail);

我如何为 gmail 设置 SMTP

public $defaults = [
        'smtp' => false,
        'host' => null,
        'port' => null,
        'username' => null,
        'password' =>  null,
        'secure' => null,
        'timeout' => null,
        'clientHost' => null,
    ];

【问题讨论】:

    标签: php smtp nette


    【解决方案1】:

    SendmailMailer 使用 php 函数 mail() 必须在 php.ini 中配置才能工作,请参阅 https://www.php.net/manual/en/mail.configuration.php

    在 Nette 中使用 smtp 的最简单方法是 SmtpMailer

    $mailer = new \Nette\Mail\SmtpMailer($this->defaults);
    

    另外不要忘记设置正确的配置,gmail 不会接受空凭据。比如:

    public $defaults = [
        'host' => 'smtp.gmail.com',
        'port' => 465,
        'username' => 'example@gmail.com',
        'password' =>  '****',
        'secure' => 'ssl',
    ];
    

    【讨论】:

    • 谢谢,密码是gmail密码或者我们开启二重验证后生成的app密码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 2019-03-12
    • 2014-05-25
    相关资源
    最近更新 更多