Plusieurs "To" dans API Mailjet

Eléphant du PHP | 80 Messages

04 août 2021, 11:04

Bonjour,
J'utilise l'API de Mailjet pour envoyer des mails, et cela fonctionne impecc.

Toutefois, afin d'avancer un peu, je souhaite pouvoir envoyer un même message à de multiples personnes, et là, je me heurete à un souci. Les mails seraient normalement en bdd, mais là, j'ai voulu tester simplement dans un tableau, et avec la boucle for, cela ne marche pas !

Pourriez-vous me dire quelle est mon erreur de syntaxe ?
Les variables $message et $sujet sont bien entendue renseignées !
 
$list_mail=array('[email protected]', '[email protected]', '[email protected]');

$body = [
    'Messages' => [
      [
        'From' => ['Email' => "[email protected]",'Name' => "G... (Message automatique)"],
        'ReplyTo' => ['Email' => "[email protected]",'Name' => "G....."],
		"To" => [
			for ($a=0; $a<count($list_mail); $a++)
				{
				["Email" => $list_mail[$a],"Name" => ""],
				}
				],
        'Subject' => $sujet,
        'TextPart' => "",
        'HTMLPart' => $message,
        'CustomID' => "AppGettingStartedTest",
       ]
    ]
  ];

	$mj = new \Mailjet\Client('.....f7882d4cfc','....441a5f61',true,['version' => 'v3.1']);
	$response = $mj->post(Resources::$Email, ['body' => $body]);
	$response->success() && var_dump($response->getData());
En vous remerciant !

Stéphane

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

04 août 2021, 12:21

La boucle for au milieu de la définition d'une variable, c'est pas une bonne idée.
Fais ta boucle fort avant pour construire ton tableau de destinataire, et c'est ce tableau que tu vas utiliser ensuite.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 80 Messages

04 août 2021, 16:14

C'est bien ce que je pensais, mais là, je me heurte à un souci de compétence technique sur la manière de faire la chose !
Pourriez-vous m'expliquer comment créer ce tableau de destinataires, et l'intégrer dans le 'To' !

J'ai les 'compétences' pour comprendre une méthode proposée, l'adapter et parfois l'améliorer, mais de ce qui est de la créer en amont, j'ai de malheureuses lacunes !

Merci de ton/votre aide éventuelle !

Stéphane

Eléphant du PHP | 80 Messages

04 août 2021, 21:33

J'imagine qu'au final, ca doit ressembler à quelque chose du style, mais bien sur, y'a un hic !! :)
	
$list_mail=array('[email protected]', '[email protected]', '[email protected]');
	for ($a=0; $a<count($list_mail); $a++)
		{
		$mails[] = ["Email" => $list_mail[$a],"Name" => ""];
		}

print_r($mail);

  $body = [
    'Messages' => [
      [
        'From' => ['Email' => "[email protected]",'Name' => "G... (Message automatique)"],
        'ReplyTo' => ['Email' => "no-reply@g....",'Name' => "G...."],
		"To" => [
				$mails
				],
        'Subject' => $sujet,
        'TextPart' => "",
        'HTMLPart' => $message,
        'CustomID' => "AppGettingStartedTest",
       ]
    ]
  ];

ynx
Mammouth du PHP | 586 Messages

05 août 2021, 08:17

Oui c'est bien la bonne solution, tu n'es pas loin.

Le hic vient du fait que tu as ajouté des crochets autour de la variable $mails dans la construction du tableau $body ("To" => [$mails]).
La clé "To" attends un tableau contenant la liste des adresses, or à cause de l'ajout des crochets, tu y affectes un tableau qui contient le tableau contenant les adresses (tu peux faire un print_r($body) pour voir l'erreur sur la structure du tableau).

Tu devrais donc pouvoir résoudre le soucis en supprimant les crochets autour de la variables $mails dans la construction de $body, la variable $mails étant déjà le tableau contenant les adresses.