2017-04-11 7 views
1

私はLaravel 5.2アプリケーションを使用しています。私の開発環境とステージング環境では、Universal Toメール構成オプションdescribed in the docsを使用したいと考えています。開発環境で普遍的なすべての電子メールは、実際の顧客/クライアント/に何かの代わりに、そのアドレスに行くことを保証します。Laravel開発と生産の間で普遍的な

私は、これをプロダクションで別々に指定する方法を考えることはできません。プロダクションではにはが普及しているはずです - 電子メールは実際のアドレスに出て行くべきです。

異なるenv()値を使用する標準的な方法は機能していないようです。たとえば、次のように

のconfig/mail.php

'to' => [ 
    'address' => env('UNIVERSAL_TO', false) 
], 

.env

[email protected] 

これは正常に動作します - 予想通り、すべてのメールは、指定されたUNIVERSAL_TOに行きます。しかし、私は、私は例えば、生産に必要になるものにすることを変更した場合:

UNIVERSAL_TO= 

(または=''、または=false、または単に完全にこれを省略)、すべてのメールを送信すること(storage/laravel.log中)で失敗します。

local.ERROR: exception 'Swift_RfcComplianceException' with message 'Address in mailbox given [] does not comply with RFC 2822, 3.6.2.' in path/to/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php:348 

config/mail.phpは、単にアレイを返しているので、私は、私が代わりに変数として設定し、環境に応じて、それに「から」を追加することができたとし、そのような:

$return = [ ... normal mail config array ... ]; 

if (!\App::environment('production')) { 
    $return['to'] => [ 
     'address' => '[email protected]' 
    ]; 
} 

return $return; 

しかし、これはちょっと...ハッキーのようです。より良い方法がありますか?

+0

わかりません。それを空に設定しようとすると、空のメールアドレスにメールを送信しようとしますか? – apokryfos

+0

あなたのメールを誤って定義することはできません。あなたがUNIVERSAL_TOを定義した場合 'アドレス' => ENV( 'UNIVERSAL_TO'、「[email protected]) と、この行はUNIVERSAL_TOする必要があります=あなた.envファイルに ので、あなたはそれを(使用します。製造)。ステージングまたはローカルでは、テストアドレスを使用します。 falseは電子メールではありません –

+0

プロダクションでは* no * universalが必要です。私がリンクしているドキュメントを参照してください - 普遍的なのポイントは、dev環境で電子メールを捕まえて、実際の顧客に行かないことです。 –

答えて

0

はい私はあなたがハッキーな方法と呼んでいるものはまだかなりしていますが、今はまだそれほど良い方法が見つかっていません。

$default = [ 
    .... 
] 

if (env('APP_ENV', 'local') === 'staging'){ 
    $default['to'] = [ 
     'address' => '[email protected]', 
    ] 
} 

return $default; 
0

私は、これは動作するはずだと思う - UNIVERSAL_TOが設定されていない限り、それはnullとしてconfig('mail.to')を残します。

'to' => env('UNIVERSAL_TO', false) ? [ 
    'address' => env('UNIVERSAL_TO'), 
] : null, 
関連する問題