web-dev-qa-db-ja.com

Webform:アップロードされたファイルを添付ファイルとして送信する

ユーザーがファイルをアップロードできるウェブフォームがあります。このファイルをサイト管理者に送信されるメールに添付したい。

そうすることのベストプラクティスは何ですか?ヘルパーモジュールを見つけようとしましたが、見つかりませんでした。

3
doron

または、Mail SystemおよびMime Mailモジュールを使用できます。 「添付ファイルとしてファイルを含める」チェックボックスがWebformメール設定に表示されます。

5
Enrique

Mimemail モジュールを使用して、ファイルをWebフォームの添付ファイルとして送信できます。また、ファイルタイプを選択することもできます。

Mimemail:

  • これにより、ユーザーはHTMLメールを受信でき、他のモジュールで使用できます。メール機能は、HTMLメッセージ本文を受け入れ、mime-endcodeして送信します。
  • HTMLにグラフィックが埋め込まれている場合、これらのグラフィックはMIMEエンコードされ、メッセージの添付ファイルとして含まれます。
  • テーマ設定可能なHTMLメッセージ形式でテーマのスタイルシートファイルを自動的に含めることにより、サイトのスタイルを採用します
  • 受信者の設定が利用可能であり、プレーンテキストを好む場合、HTMLはプレーンテキストに変換され、そのまま送信されます。それ以外の場合、メールはプレーンテキストの代替を含むテーマ化可能なHTMLで送信されます。
  • 特定のメールキーでメッセージのテーマを設定できます。
  • CSSスタイルをインラインスタイル属性に変換します。
  • 簡単なシステムアクションと、埋め込み画像と添付ファイルを含むHTMLメールを送信するための Rules アクションを提供します。

電子メールのレイアウトを作成するときに考慮する必要があるいくつかの深刻な制限があることに注意してください。詳細は 電子メール標準プロジェクト を参照してください。

まず、このコードを現在のテーマのTemplate.phpファイルに貼り付けます

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;
}

あなたのテーマ名であなたのテーマ名を変更することを忘れないでください

2)次に、現在のテーマディレクトリにwebform-mail.tpl.phpを作成し、このコードを貼り付けます。

<?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());
?>

これで、キャッシュをクリアして完了し、これから取得します source これまで使用したことがありません。

0
Bala

Webform_multifileモジュールは、あなたが望むものに役立つと思います。

0
Mahipal Purohit