2016-08-29 2 views
2

내 모든 사용자에게 뉴스 레터를 보내는 스크립트입니다. 아래 코드에는 테스트를위한 제한이 있습니다. 나는 현재이 오류가 있어요 :sendgrid의 PHP 배열 오류

Catchable fatal error: Argument 1 passed to SendGrid\Email::setTos() must be of the type array, string given, called in /var/www/web/web/sengrid.php on line 44 and defined in /var/www/web/web/sendgrid-php/lib/SendGrid/Email.php on line 90**

여기
<?php 
ini_set("display_errors", "1"); 
error_reporting(E_ALL); 
require_once ('inc/db.php'); 
require("sendgrid-php/sendgrid-php.php"); 

$sendgrid = new SendGrid('myapikey'); 

$email = new SendGrid\Email(); 


$resultado = mysqli_query($dbc,"SELECT email, hash FROM newsletter WHERE enviado = '0' AND newsletter = '1' LIMIT 5"); 

$totalRows = mysqli_num_rows($resultado); 
if ($totalRows == 0){ 
    echo "<p>No results</p>"; 
} 

$rss = ""; 

if(!$xml = simplexml_load_file('http://www.test.com.ar/rss.php')) { 
    echo 'unable to load XML file'; 
} else { 
    foreach($xml->channel->aviso as $aviso) { 

     $rss .= "<div class='box-blanco'>"; 
     $rss .= "<a href='$aviso->link' class='link'><p class='titulo'>$aviso->title</p></a>"; 
     $rss .= "<p class='text-muted-2'>$aviso->provincia $aviso->remuneracion</p>"; 
     $rss .= "</div><div class='col-separador-h'></div>"; 

    }   

} 

는 setTos를 사용하여 모든 이메일을 보내기위한 루프입니다.

while ($usuario = mysqli_fetch_array($resultado, MYSQLI_ASSOC)) { 


$usermail = $usuario['email']; 
$hash = $usuario['hash']; 
$email-> setTos($usermail) 
    ->setFrom("[email protected]") 
    ->setFromName("test") 
    ->setReplyTo("[email protected]") 
    ->setSubject("Convocatorias Semanales") 
    ->setHtml('<html><body>TEST</body></html>'); 



    try { 

    $result = $sendgrid->send($email); 
      mysqli_query($dbc, "UPDATE newsletter SET enviado = '1' WHERE email='$usermail' "); 
      echo "enviado"; 

    } catch(\SendGrid\Exception $e) { 
     echo $e->getCode() . "\n"; 
     foreach($e->getErrors() as $er) { 
      echo $er; 
     } 
    } 

} 


?> 

어떻게 해결할 수 있습니까? 나는 그것을 알 수 없다. https://github.com/sendgrid/sendgrid-php/tree/master/lib/helpers/mail

답변

1

그것은 이미 배열을 기대하고, 그래서 함께 먹이를 말합니다 :

$email-> setTos(array($usermail)); 

이 비록 단지 밴드 에이드 수정, 당신이 먼저 용기 내부의 모든 이메일을받을 수도 있습니다, 다음을 보내

$all_users = array(); // intialzie array 

while ($usuario = mysqli_fetch_array($resultado, MYSQLI_ASSOC)) { 

    $usermail = $usuario['email']; 
    $hash = $usuario['hash']; 
    mysqli_query($dbc, "UPDATE newsletter SET enviado = '1' WHERE email='$usermail' "); 

    $all_users[] = $usermail; // push all emails first 
} 

// then send 

try { 
    $email->setTos($all_users) 
    ->setFrom("[email protected]") 
    ->setFromName("test") 
    ->setReplyTo("[email protected]") 
    ->setSubject("Convocatorias Semanales") 
    ->setHtml('<html><body>TEST</body></html>'); 

    $result = $sendgrid->send($email); 
    echo "enviado"; 

} catch(\SendGrid\Exception $e) { 
    echo $e->getCode() . "\n"; 
    foreach($e->getErrors() as $er) { 
     echo $er; 
    } 
} 
+0

을 난 아직도 내가 이미 편집'$ 이메일 -> setTos ($ ALL_USERS를) 만든 배열 – Santiago

+0

@Santiago과 같은 오류가 있어요' – Ghost