Message d'avertissement

The subscription service is currently unavailable. Please try again later.

[Résolu] Envoi de mail à différents users

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour
Avec la fonction "_nodeaccess_get_grants();" j'obtiens le résultat ci-dessous,j'aimerais maintenant extraire l'adresse mail de chaque puis leur en envoyé un message avec peut être cette fonction "drupal_mail($module, $key, $to, $language, $params = array(), $from = NULL, $send = TRUE)" mail je n'arrive pas à récupérer l'adresse de messagerie, quelqu'un peut il m'indiquer une piste.
D'avance merci.

[uid] => Array
(
[114] => Array
(
[name] => Milou
[keep] => 1
[grant_view] => 1
[grant_update] => 0
[grant_delete] => 0
)

[152] => Array
(
[name] => Tintin
[keep] => 1
[grant_view] => 1
[grant_update] => 0
[grant_delete] => 0
)

)

Forum : 
Version de Drupal : 

il faudrait plus d info par rapport aux utilisateurs:
-> tous les utilisateurs ou seulement ceux qui ont un rôle spécifique ?
-> donc je dirais 1) recup des uid
2) faire une boucle pour parcourir ton tableau uid et a chaque user tu envoi ton mail.

Merci pour vos réponses, voici l'embryon du "module"

function sendMailUserAutorized_node_insert($node) {

if($node->type=="fichier"){
$nidProjet = $node->field_mc_ref_projet['und'][0]['nid'];
}

$node_projet = node_load($nidProjet);
$users = _nodeaccess_get_grants($node_projet);

foreach ($users['uid']as $key=>$grant){

if($grant['grant_view']=='1'){
$grants_user = $key;

user_load_multiple($grants_user, $conditions = array(), $reset = FALSE);
//drupal_set_message('<pre>'. print_r($grants_user, true) .'</pre>');

}

}

Maintenant il faut que je fasse fonctionner user_load_multiple,après quoi je pense utiliser drupal_mail($module, $key, $to, $language, $params = array(), $from = NULL, $send = TRUE)pour l'envoi, mais bon je ne sais pas encore comment faire fonctionner ces fonctions, donc vous si connaissez des tutos un peu plus explicite que la doc de l'api n'hésitez pas à me les faire connaître.
D'avance merci.

sous drupal6 je fais un truc du genre:

<?php
  $message
= array(
     
'to' => $mail,
     
'subject' => t('mon sujet'),
     
'body' => t("mon texte"),
     
'from'  => $default_from,
  );

 
drupal_mail_send($message);
?>

j espère que ça te donne une piste
++

Merci, je pense utiliser quelque chose de similaire sous D7
http://api.drupal.org/api/drupal/includes!mail.inc/function/drupal_mail_...
Mais auparavant il faut que je passe correctement paramètres à la fonction :
user_load_multiple($uids = array(), $conditions = array(), $reset = FALSE);
C'est à ce niveau que j'ai un soucis.
$uids = array(), $conditions = array()
:-(

Je progresse :
Maintenant je recupere mon adresse mail

function sendMailUserAutorized_node_insert($node) {
 
   if($node->type=="fichier"){
       $nidProjet = $node->field_fichier_ref_projet['und'][0]['nid'];
    
           
       $node_projet = node_load($nidProjet);
      $users = _nodeaccess_get_grants($node_projet);
    
        foreach ($users['uid']as $key=>$grant){
           if($grant['grant_view']=='1'){
                 $grants_user = $key;
             
                   $usersMail = user_load_multiple(array($grants_user));
                                 
                   foreach($usersMail as $a) {
                        $adresseMail = $a->mail ;
                      
                           drupal_set_message('<pre>'. print_r($adresseMail, true) .'</pre>');
                        }
                  }

     }
  }
      

}   

je vois un souci ds ton code

tu écrase a chaque fois $grants_user

donc soit tu utilise une variable dans tons foreach et donc tu fais plutôt

<?php
     
foreach(..............){
        
$mon_user = user_load('',$key);
        
$amail = $mon_user->mail;
         ---->
je fais mon message

     
}
?>

ou tu récupère préalablement tous tes uid pour utiliser user_load_multiple

<?php
 
foreach(.......){

    
$mes_user[] = $key; // important les crochets


  
}

  foreach(
user_load_multiple($mes_user) as $mon_user) {
    
$Amail = $mon_user->mail;
   ......
.....
   }
?>

Merci pour ta réponse, je viens de tester ça marche mais la première adresse mail du tableau liste est présente deux fois.

<?php
foreach ($users['uid']as $key=>$grant){
  if(
$grant['grant_view']=='1'){
 
$grants_user[] = $key;
 }

foreach(
user_load_multiple($grants_user) as $mail_user){
   
$adresse_mail = $mail_user->mail;
   }
?>

Bon maintenant j'en suis à la création et envoi du message avec:

<?php
drupal_mail
($module, $key, $adresse_mail, $language, $params, $from, TRUE))
?>

Les messages sont bien envoyé mais l'objet est le corps sont vides.

Bonjour.
Ca a l'air de fonctionner, mais ce n'est pas encore optimale:
J'attends vos commentaire pour améliorer la chose.
Notamment pour envoyer les mails de façon décalé avec le cron pour éviter le ralentissement à la création du node.
Merci pour vos conseilles.

<?php
function monModule_node_insert($node) {
 
   if(
$node->type=="fichier"){
      
//récupération de l'id du node
      
$nidProjet = $node->field_fichier_ref_projet['und'][0]['nid'];

//on remplis les variables qui construise le mail       
      
$module = 'monModule';
      
$key = 'dc0c398086fee58f9d64e1e47aa4e586';
      
$from = variable_get('system_mail', 'info@mondomaine.fr');
     global
$language_content;
     
$language = $language_content->language;
       
      
$node_projet = node_load($nidProjet);
     
$titleProjet = $node_projet->title;
               
$titleFichier = $node->title;

      
$users = _nodeaccess_get_grants($node_projet);
    
$userName = $node->name;

// bug je jour de la date n'est pas traduit
     
$dateCreation = t(date("D, d/m/Y - G:i", $node->created));

// recuperation de l'id des user qui ont le droit de voir                    
          
foreach ($users['uid']as $key_user=>$grant){
           if(
$grant['grant_view']=='1'){
               
$grants_user[] = $key_user;
                }
// recuperation de ladresse mail de chaque user              
          
foreach(user_load_multiple($grants_user) as $mail_user) {
             
$adresse_mail = $mail_user->mail;
               }

// construire le mail           
              
$params = array();
            
$line1 = 'Le '.$dateCreation.'<br/>Le fichier - '.$titleFichier.' - vient d\'&#234;tre ajout&eacute;<br/>Par l\'utilisateur : '.$userName.'<br/>Au projet : '.$titleProjet.'.';
             
$line2 = 'Le site http://www.mondomaine.com/';
  
              
$subject = 'Ajout d\'un fichier au projet ['.$titleProjet.'] -'.$dateCreation.'';
              
$send = FALSE;
            
$message = drupal_mail($module, $key, $adresse_mail, $language, $params, $from, $send);
   
              
$message['subject'] = $subject;
             
$message['body'] = array();
             
$message['body'][] = $line1;
            
$message['body'][] = $line2;

//Envoie
               //Retrieve the responsible implementation for this message.
               
$system = drupal_mail_system($module,$key);

              
//Format the message body.
            
$message = $system->format($message);

             
//Send e-mail.
            
$message['result'] = $system->mail($message);
        
       }
  }
}
?>