【问题标题】:Swiftmailer in Yii2 - Unable to send emailYii2 中的 Swiftmailer - 无法发送电子邮件
【发布时间】:2015-05-14 08:29:59
【问题描述】:

我正在使用基本的 Yii2 模板和 Swiftmailer 来发送电子邮件..

这是我的config/web.php 代码:

'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            'useFileTransport'=>'false',
            'transport' => [
                'class' => 'Swift_SmtpTransport',
                'host' => 'smtp.gmail.com',
                'username' => 'myemail@gmail.com',
                'password' => 'password',
                'port' => '587',
                'encryption' => 'tls',
            ],
        ],

我的控制器代码是:

$fname = Yii::$app->request->post('fname');
        $email = Yii::$app->request->post('email');

        $industry = Yii::$app->request->post('industry');
        $info = Yii::$app->request->post('info');

        $mail = Yii::$app->mailer->compose()
            ->setFrom('myemail@gmail.com')
            ->setTo($email)
            ->setSubject('Test mail')
            ->setTextBody($info)
            ->send();

我收到电子邮件日志,但没有发送电子邮件...

谢谢。

【问题讨论】:

    标签: yii2 swiftmailer


    【解决方案1】:

    为了让您的帐户不那么容易受到攻击,谷歌推出了这项政策。当我们通过自己的帐户登录而没有在 Google 上创建任何应用时,Google 会请求我们的许可以确保我们帐户的安全。

    访问以下网址以解决此问题并选择“开启https://www.google.com/settings/security/lesssecureapps

    【讨论】:

      【解决方案2】:

      注意,您将电子邮件compose()...->send() 的结果分配给$mail,这样您就不会发送电子邮件,而是将结果存储在此变量中。 尝试不分配,例如:

          $industry = Yii::$app->request->post('industry');
          $info = Yii::$app->request->post('info');
      
          Yii::$app->mailer->compose()
              ->setFrom('myemail@gmail.com')
              ->setTo($email)
              ->setSubject('Test mail')
              ->setTextBody($info)
              ->send();
      

      还要注意

      'useFileTransport'=>'false',
      

      false i PHP 值,我认为你需要使用

       'useFileTransport'=>false,
      

      没有' 字符

      【讨论】:

      • 我也试过了……但还是不行……我收到了电子邮件日志,但电子邮件 ID 上没有实际的电子邮件
      • 仍然没有成功...快速提问...web.php 中的username 和控制器中的setFrom() 必须相同...?是否需要将它们都包括在内...?而且我将我的电子邮件地址作为硬编码传递......如果我这样做会有任何问题..?
      • 我是否必须让“不太安全的应用”访问我的 gmail 帐户??
      • 请更好地解释一下 web.php 中的用户名和控制器中的 setFrom () 必须相同的含义?还有一个小细节,我把setTo ()and then setFrom ()放在前面
      • 我的意思是说web.phpsetFrom('email@gmail.com') 中的`'用户名'=>'email@gmail.com' 必须相同...?而且我正在硬编码它。 ..
      【解决方案3】:

      我遇到了同样的问题,我使用port=>25 解决了我的问题。

      【讨论】:

        【解决方案4】:

        scaisEdge 是对的:

        你设置了'useFileTransport'=>'false'。因为'false' 是一个字符串,所以这将评估为(bool) true。您需要将其设置为'useFileTransport' => false

        进一步:

        如果您使用的是始终设置为 string 的 AWS beanstalk 环境变量,您希望将其评估为 true,如下所示:

        'useFileTransport' => $_ENV['APP_STOPMAILER'] === "true" ? true : false,

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-11
          • 2015-04-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多