Estoy trabajando con una aplicación Laravel 5.2. En mis entornos de desarrollo y ensayo, me gustaría utilizar la opción de configuración de correo "Universal To" descrita en los documentos . Un universal para en entornos de desarrollo garantiza que todos los correos electrónicos vayan a esa dirección, en lugar de a los clientes/clientes reales/lo que sea.
Sin embargo, no puedo encontrar la manera de especificar esto de manera diferente en producción. En producción, no debería haber direcciones universales: los correos electrónicos deberían enviarse a direcciones reales.
El enfoque estándar de usar diferentes valores de env() no parece funcionar. Por ejemplo:
config/correo.php :
'to' => [ 'address' => env('UNIVERSAL_TO', false) ],desarrollo .env :
UNIVERSAL_TO=my-testing-address@somewhere.com Esto funciona bien: todos los correos electrónicos van al UNIVERSAL_TO especificado, como se esperaba. Pero si cambio eso a lo que querré en producción, por ejemplo:
producción .env
UNIVERSAL_TO= (o ='' , o =false , o simplemente omitiendo esto por completo), el envío de cualquier correo falla con (en storage/laravel.log ):
local.ERROR: excepción 'Swift_RfcComplianceException' con el mensaje 'La dirección en el buzón dada [] no cumple con RFC 2822, 3.6.2.' en ruta/al/proveedor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php:348
config/mail.php solo está devolviendo una matriz, así que supongo que podría configurarlo como una variable y luego, dependiendo del entorno, agregarle el 'a', así:
$return = [ ... normal mail config array ... ]; if (!\App::environment('production')) { $return['to'] => [ 'address' => 'my-testing-address@somewhere.com' ]; } return $return;Pero esto parece un poco... raro. ¿Hay una mejor manera?
Creo que esto debería funcionar: deja config('mail.to') como null a menos que se establezca UNIVERSAL_TO .
'to' => env('UNIVERSAL_TO', false) ? [ 'address' => env('UNIVERSAL_TO'), 'name' => env('UNIVERSAL_TO_NAME') ] : null,Me topé con este problema cuando busqué en Google este comportamiento. Como las respuestas no son perfectas, decidí agregar mis resultados.
Si alguna vez se rompió, parece que esto se ha solucionado ahora. Al omitir UNIVERSAL_TO en su archivo .env, el correo solo se enviará al destinatario designado.
Quizás el problema era que no tenía un valor null , sino false como predeterminado.
config/correo.php
'to' => [ 'address' => env('MAIL_GLOBAL_RECIPIENT'), // when not found, defaults to null 'name' => 'Developer' ],env local
MAIL_GLOBAL_RECIPIENT=my@email.comproduction .env ni siquiera tiene esa variable
Sí, todavía hago más o menos lo que llamas una manera hacky y por ahora todavía no he encontrado mejores formas.
$default = [ .... ] if (env('APP_ENV', 'local') === 'staging'){ $default['to'] = [ 'address' => 'webmaster@xxx.com', ] } return $default;