2013-03-24 65 views

回答

1

這不像換一個運輸工具那麼簡單。正如你所說的,傳輸在Illuminate \ Mail \ MailServiceProvider中被硬編碼。

你可能想延長L4郵件實現用你自己,換它在你的配置/ app.php供應商陣列:

  • 更換提供商陣列的郵件提供商:

配置/ app.php

... 
'providers' => array(
'SendmailServiceProvider', 
  • 添加sendmail的路徑爲二進制:

配置/ mail.php

'sendmail_path' => '/usr/bin/sendmail -bs', 
  • 確保您composer.json文件自動加載 「類映射從應用程序/庫:」

composer.json:

....  
"autoload": { 
    "classmap": [ 
     "app/libraries", 
.... 
  • Add y我們的Sendmail的服務提供商:

應用程序/庫/ SendmailServiceProvider.php

<?php 

use \Swift_Mailer; 
use Illuminate\Support\ServiceProvider; 
use Illuminate\Mail\Mailer as Mailer; 
use Swift_SendmailTransport as SendmailTransport; 

class SendmailServiceProvider extends ServiceProvider { 

    /** 
    * Indicates if loading of the provider is deferred. 
    * 
    * @var bool 
    */ 
    protected $defer = true; 

    /** 
    * Register the service provider. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     $this->registerSwiftMailer(); 

     $this->app['mailer'] = $this->app->share(function($app) 
     { 
      // Once we have create the mailer instance, we will set a container instance 
      // on the mailer. This allows us to resolve mailer classes via containers 
      // for maximum testability on said classes instead of passing Closures. 
      $mailer = new Mailer($app['view'], $app['swift.mailer']); 

      $mailer->setLogger($app['log']); 

      $mailer->setContainer($app); 

      $from = $app['config']['mail.from']; 

      // If a "from" address is set, we will set it on the mailer so that all mail 
      // messages sent by the applications will utilize the same "from" address 
      // on each one, which makes the developer's life a lot more convenient. 
      if (is_array($from) and isset($from['address'])) 
      { 
       $mailer->alwaysFrom($from['address'], $from['name']); 
      } 

      return $mailer; 
     }); 
    } 

    /** 
    * Register the Swift Mailer instance. 
    * 
    * @return void 
    */ 
    protected function registerSwiftMailer() 
    { 
     $config = $this->app['config']['mail']; 

     $this->registerSwiftTransport($config); 

     // Once we have the transporter registered, we will register the actual Swift 
     // mailer instance, passing in the transport instances, which allows us to 
     // override this transporter instances during app start-up if necessary. 
     $this->app['swift.mailer'] = $this->app->share(function($app) 
     { 
      return new Swift_Mailer($app['swift.transport']); 
     }); 
    } 

    /** 
    * Register the Swift Transport instance. 
    * 
    * @param array $config 
    * @return void 
    */ 
    protected function registerSwiftTransport($config) 
    { 
     $this->app['swift.transport'] = $this->app->share(function($app) use ($config) 
     { 
      extract($config); 

      // The Swift SMTP transport instance will allow us to use any SMTP backend 
      // for delivering mail such as Sendgrid, Amazon SMS, or a custom server 
      // a developer has available. We will just pass this configured host. 
      $transport = SendmailTransport::newInstance($sendmail_path); 

      // Once we have the transport we will check for the presence of a username 
      // and password. If we have it we will set the credentials on the Swift 
      // transporter instance so that we'll properly authenticate delivery. 
      if (isset($username)) 
      { 
       $transport->setUsername($username); 

       $transport->setPassword($password); 
      } 

      return $transport; 
     }); 
    } 

    /** 
    * Get the services provided by the provider. 
    * 
    * @return array 
    */ 
    public function provides() 
    { 
     return array('mailer', 'swift.mailer', 'swift.transport'); 
    } 

} 

不是真的測試,但應該工作正常。嘗試把這個routes.php文件,並打了一下:

Route::get('/', function() 
{ 
    Mail::send('emails.auth.reminder', array('token' => '123456'), function($m) 
    { 
     $m->from('[email protected]', 'Laravel'); 

     $m->to('[email protected]')->cc('[email protected]'); 

    }); 
}); 
+0

不知道,但似乎泰勒在覈心的impemented PHP的郵件功能作爲替代的運輸,如果是你的用例有趣:HTTPS: //github.com/laravel/laravel/blob/develop/app/config/mail.php – 2013-03-28 15:59:00