web-dev-qa-db-fra.com

Formulaire Web: envoyer des fichiers téléchargés en pièces jointes

J'ai un formulaire Web où un utilisateur peut télécharger un fichier; Je souhaite que ce fichier soit joint à l'e-mail envoyé au responsable du site.

Quelle est la meilleure pratique pour le faire? J'ai essayé de trouver un module d'assistance, mais je n'en ai pas trouvé.

3
doron

Ou vous pouvez utiliser les modules Mail System et Mime Mail. Une case "Inclure les fichiers en tant que pièces jointes" apparaîtra dans la configuration de Webform E-Mails.

5
Enrique

Vous pouvez utiliser le module Mimemail pour envoyer un fichier en pièce jointe dans le formulaire Web, et vous pouvez également choisir les types de fichiers.

Mimemail:

  • Il permet aux utilisateurs de recevoir des e-mails HTML et peut être utilisé par d'autres modules. La fonctionnalité de messagerie accepte un corps de message HTML, le mime-endcode et l'envoie.
  • Si le HTML contient des graphiques intégrés, ces graphiques sont codés MIME et inclus en tant que pièce jointe de message.
  • Adopte le style de votre site en incluant automatiquement les fichiers de feuilles de style de votre thème dans un format de message HTML à thème
  • Si la préférence du destinataire est disponible et qu'il préfère le texte en clair, le code HTML sera converti en texte brut et envoyé tel quel. Sinon, l'e-mail sera envoyé en HTML thématique avec une alternative en texte brut.
  • Vous permet de thématiser les messages avec une clé de messagerie spécifique.
  • Convertit les styles CSS en attributs de style en ligne.
  • Fournit des actions système simples et des actions Rules pour envoyer des e-mails HTML avec des images et des pièces jointes intégrées.

Notez qu'il existe de sérieuses limitations que vous devez prendre en considération lors de la création de mises en page d'e-mails, voir Email Standard Project pour plus d'informations.

Collez d'abord ce code dans votre fichier Template.php de thème actuel

function yourthemename_webform_mail_headers($node, $submission, $email) {
  $attach_bool = false;
  foreach ($node->webform['components'] as $item) {
    if ($item['type'] = 'file') {
      $attach_bool = true;  // found a file component!
      break;
    }
  }
  $headers = array(
    'X-Mailer' => 'Drupal Webform (PHP/' . phpversion() . ')',
  );
  if ($attach_bool) {
    $hash = md5('randomstring');  // remember you can change randomstring to anything you want, just make sure it's consistent w/ part 2
    $headers['Content-Type'] = "multipart/mixed; boundary=\"".$hash."\"";
  }
  return $headers;
}

N'oubliez pas de changer le nom des jeunes avec le nom de votre thème

2) Maintenant, créez webform-mail.tpl.php dans votre répertoire de thème actuel et collez ce code.

<?php
// $Id: webform-mail.tpl.php,v 1.3.2.2 2010/03/25 02:07:29 quicksketch Exp $

/**
* @file
* Customize the e-mails sent by Webform after successful submission.
*
* This file may be renamed "webform-mail-[nid].tpl.php" to target a
* specific webform e-mail on your site. Or you can leave it
* "webform-mail.tpl.php" to affect all webform e-mails on your site.
*
* Available variables:
* - $node: The node object for this webform.
* - $submission: The webform submission.
* - $email: The entire e-mail configuration settings.
* - $user: The current user submitting the form.
* - $ip_address: The IP address of the user submitting the form.
*
* The $email['email'] variable can be used to send different e-mails to different users
* when using the "default" e-mail template.
*/
?>
<?php
$hash = md5('randomstring');  // refer to part 1
$attachments = '';
foreach ($node->webform['components'] as $item) {  // loop through each webform component
  if ($item['type'] == 'file') {  // is it a file?
    if ($submission->data[$item['cid']]) {  // did the user attach a file?
      $result = db_query_range('SELECT f.filename, f.filepath, f.filemime FROM {files} f WHERE f.fid = ' . $submission->data[$item['cid']]['value'][0], 0, 1);
      // query the database for the file information
      $file = db_fetch_array($result);
      $attachments[] = array(
        'mime' => $file['filemime'],
        'path' => $file['filepath'],
        'name' => $file['filename'],
        'data' => chunk_split(base64_encode(file_get_contents($file['filepath']))));
    }
    ob_start();
  }
}

if (is_array($attachments)) {
  print "--".$hash."\n"
    ."Content-Type: text/plain; charset=ISO-8859-1\n";
}
?>
<?php print t('Submitted on %date'); ?>

<?php if ($user->uid): ?>
<?php print t('Submitted by user: %username'); ?>
<?php else: ?>
<?php print t('Submitted by anonymous user: [%ip_address]'); ?>
<?php endif; ?>

<?php print t('Submitted values are') ?>:

%email_values

<?php print t('The results of this submission may be viewed at:') ?>

%submission_url

<?php
if (is_array($attachments)) { // let's attach the files now
  foreach ($attachments as $attachment) {
    print "--".$hash."\n"
      ."Content-Type: ".$attachments['mime']."; name=".$attachment['name']."\n"
      ."Content-Disposition: attachment; filename=".$attachment['name']."\n"
      ."Content-Transfer-Encoding: base64\n\n"
      .$attachment['data']."\n";
  }
  print "--".$hash."--";
}
print(ob_get_clean());
?>

Maintenant, videz le cache et faites et récupérez de cela source et je ne l'ai jamais utilisé auparavant.

0
Bala

Je pense que le module webform_multifile est utile pour ce que vous voulez.

0
Mahipal Purohit