2016-12-26 2 views
4

Я использую laravel 5.3. Мне нужно отправить почту с разными учетными данными (хост, порт, имя пользователя, пароль).Как условно изменить почтовый транспортер в laravel 5?

Я могу отправить с настройкой laravel по умолчанию (.env).

Но мне нужна динамическая реализация уровня.

Я делаю массив конфигурации,

// Pre-Mail Setup Config. 
      $store_config = [ 
       'list' => 
        //SET 1 
       ['from_name' => 'sender1', 
       'from_address' => 'from_adderss1', 
       'return_address' => 'reply1', 
       'subject' => 'subject1', 
       'host' => 'host1', 
       'port' => 'post1', 
       'authentication' => 'auth1', 
       'username' => 'uname1', 
       'password' => 'pass1'], 
       //SET 2 
       [.........], 
       //SET 3 
       [.........] 
      ]; 

Я стараюсь следующий отправить почту, но он не будет работать.

// Inside Foreach. 
$transporter = \Swift_MailTransport::newInstance('smtp.gmail.com', 465, 'ssl') 
       ->setUsername($config['username']) 
       ->setPassword($config['password']); 

$mailer = \Swift_Mailer::newInstance($transporter); 


$message->from($config['from_address'], $config['from_name']); 


$message->to('To_Email, 'Name') 
     ->subject('My Subject') 
     ->setBody('My Content', 'text/html'); 
$mailer->send($message); 

Что случилось с моим кодом?

Возможно ли это?

Или любое другое решение?

+0

Возможный дубликат http://stackoverflow.com/questions/26546824/multiple-mail-configurations –

+0

На самом деле, этот тип реализации устарел в laravel 5. Так что я только создаю и задаю решение уровня версии. –

ответ

0

Наконец-то я нашел способ решить эту проблему.

На самом деле Laravel 5 не поддерживает эту конфигурацию нескольких транспортеров.

поэтому я использую альтернативный пакет для его достижения.

Мой код,

foreach ($store_configs['list'] as $store_config) { 

     // Create Custom Mailer Instances. 
     $mailer = new \YOzaz\LaravelSwiftmailer\Mailer(); 
     $transport = \Swift_SmtpTransport::newInstance(
              $store_config['host'], 
              $store_config['port'], 
              $store_config['authentication']); 

     // Assign Dynamic Username. 
     $transport->setUsername($store_config['username']); 

     // Assign Dynamic Password. 
     $transport->setPassword($store_config['password']); 
     $smtp = new \Swift_Mailer($transport); 
     $mailer->setSwiftMailer($smtp); 



      $mailer->send('template', ['data'], function ($message) use ($queue) { 
       // Default Response goes here 
       $message->from('From Address', 'From Name'); 

       $message->to($email, 'Name')->subject('My Subject') 
        ->setBody('My HTML', 'text/html'); 
       $message->getSwiftMessage(); 
       // 
      }); 
    } 

Его прекрасно работает с несколькими и динамическим транспортером.

Спасибо всем!