ユーザーがファイルをアップロードできるウェブフォームがあります。このファイルをサイト管理者に送信されるメールに添付したい。
そうすることのベストプラクティスは何ですか?ヘルパーモジュールを見つけようとしましたが、見つかりませんでした。
または、Mail SystemおよびMime Mailモジュールを使用できます。 「添付ファイルとしてファイルを含める」チェックボックスがWebformメール設定に表示されます。
Mimemail モジュールを使用して、ファイルをWebフォームの添付ファイルとして送信できます。また、ファイルタイプを選択することもできます。
Mimemail:
電子メールのレイアウトを作成するときに考慮する必要があるいくつかの深刻な制限があることに注意してください。詳細は 電子メール標準プロジェクト を参照してください。
まず、このコードを現在のテーマの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 これまで使用したことがありません。
Webform_multifileモジュールは、あなたが望むものに役立つと思います。