Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Envio em lote de emails Tenho um formulário para envio de "peças" de marqketing, eu consigo enviar individualmente, porém quero enviar para todos os clientes essa peça. Eu não estou sabendo como mandar para a função onEnvio o email public function onLote ($param) { try { TTransaction::open('sample'); $criteria = new TCriteria; $criteria->setPro...
RF
Envio em lote de emails  
Tenho um formulário para envio de "peças" de marqketing, eu consigo enviar individualmente, porém quero enviar para todos os clientes essa peça. Eu não estou sabendo como mandar para a função onEnvio o email


public function onLote ($param)
{
try
{
TTransaction::open('sample');
$criteria = new TCriteria;
$criteria->setProperty('limit' ,2);
$criteria->setProperty('offset',0);
$criteria->setProperty('order','id');

$repository = new TRepository('Cliente');
$clientes = $repository->load($criteria);

foreach ($clientes as $cliente)
{
$cliente->email; // Como passo para a outra função o valor dentro de $cliente?
self::onEnvio();
}
TTransaction::close();
}
catch (Exception $e)
{
new TMessage('error',$e->getMessage());
}


}



public function onEnvio()
{

//$nomeemail = 'teste';
try
{
// get the form data
$data = $this->form->getData();
// validate data
$this->form->validate();

// open a transaction with database
TTransaction::open('permission');

$preferences = SystemPreference::getAllPreferences();

$mail = new TMail;
$mail->setFrom( trim($preferences['mail_from']) , TSession::getValue('username'));
$mail->addAddress ($data->email); //( trim($preferences['mail_support']) );
$mail->setSubject( $data->empreendimento );

if ($preferences['smtp_auth'])
{
$mail->SetUseSmtp();
$mail->SetSmtpHost($preferences['smtp_host'], $preferences['smtp_port']);
$mail->SetSmtpUser($preferences['smtp_user'], $preferences['smtp_pass']);
}
$mail->setHtmlBody ($data->emailmarketing);
// $mail->setTextBody($data->emailmarketing);

$mail->send();

// close the transaction
TTransaction::close();

// Mensagem de sucesso COMENTE ELA PARA O ENVIO EM LOTE
new TMessage('info', _t('Message sent successfully'));
}
catch (Exception $e) // in case of exception
{
// get the form data
$object = $this->form->getData();

// fill the form with the active record data
$this->form->setData($object);

// shows the exception error message
new TMessage('error', $e->getMessage());

// undo all pending operations
TTransaction::rollback();
}
}


Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (2)


NR

Se entendi direito você quer utilizar a função onEnvio tanto para envio individual quanto em lote, certo? Nesse caso, primeiro eu modificaria a função onEnvio para receber o email, assunto e texto por parâmetro e executar o envio do email somente. Outras tarefas, como buscar os dados formulário, ficariam a cargo de outras funções:
  1. <?php
  2. public function onEnvio($email,$assunto,$texto)
  3. {
  4.        $preferences SystemPreference::getAllPreferences(); 
  5.        $mail = new TMail
  6.        $mail->setFromtrim($preferences['mail_from']) , TSession::getValue('username')); 
  7.        $mail->addAddress ($email); 
  8.        $mail->setSubject$assunto ); 
  9.        if ($preferences['smtp_auth']) 
  10.       { 
  11.            $mail->SetUseSmtp(); 
  12.            $mail->SetSmtpHost($preferences['smtp_host'], $preferences['smtp_port']); 
  13.            $mail->SetSmtpUser($preferences['smtp_user'], $preferences['smtp_pass']); 
  14.       } 
  15.       
  16.       $mail->setHtmlBody ($texto); 
  17.       $mail->send(); 
  18. }
  19. public function onLote ($param
  20.     ...         
  21.     foreach ($clientes as $cliente
  22.     { 
  23.          $this->onEnvio($cliente->email,'assunto','texto'); 
  24.     }
  25.     ...
  26. ?>
RF

Entendi, ok, obrigado tudo em ordem agora.