无法通过生产服务器上的Laravel artisan命令行发送邮件

时间:2017-07-24 15:21:54

标签: laravel

我正在处理一项计划任务,该计划任务应该在产品重新投入库存时向客户发送电子邮件。它在我的本地环境中工作正常,但它不在我的生产服务器上(由OVH提供的共享托管)

这是我使用php artisan alerts:send

运行的SendAlerts命令
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

use App\Alert;

class SendAlerts extends Command {
   /**
   * The name and signature of the console command.
   *
   * @var string
   */
   protected $signature = 'alerts:send';

   /**
   * The console command description.
   *
   * @var string
   */
   protected $description = 'Send alerts by email';

   /**
   * Create a new command instance.
   *
   * @return void
   */
   public function __construct() {
      parent::__construct();
   }

   /**
   * Execute the console command.
   *
   * @return mixed
   */
   public function handle() {
      $alerts = Alert::with('professional', 'product.stock')->get();

      foreach( $alerts as $alert ) {
         $stock = $alert->color->stock;

         if( $stock->current > 0 ) {
            $alert->send();
         }
      }
   }
}

在我的Alert模型中,我创建了一个使用Mailgun驱动程序发送电子邮件的send方法。

public function send() {
   // Send email
   Mail::send('emails.alert.alert', ['professional' => $this->professional, 'alert' => $this], function($m) use ($email) {
      $m->to($email)->subject(__('emails.alert.subject'));
   });

   $this->delete();
}

这在我的本地环境中工作但是当我尝试在我的生产服务器上运行它时出现以下错误:

[GuzzleHttp\Exception\ConnectException]                                 
cURL error 7:  (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

我猜这个问题来自Mail函数,因为当我删除它并回显一些内容然后在生产服务器上运行命令行时它会起作用。

请注意,我在此项目的许多其他功能中使用相同的Mail功能,它可以在任何地方使用。它不仅适用于命令行。

有人知道这个问题的来源吗?

更新

在尝试各种各样的事情并切换回原始代码后,我得到了一个全新的错误:

[ErrorException]                    
mkdir(): No such file or directory

我在存储文件夹上尝试了chmod -R 777。就在此之后我得到了cURL错误7.所以我添加了这段代码:

$ch = curl_init("[mydomain]");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

然后,即使删除了上一段代码,我也收到了mkdir()错误。这完全是随机的......

0 个答案:

没有答案