Данный способ не является заменой msOrderFiles, так как фактически не прикрепляет файлы к письму, ибо при попытке добавить в письмо type = file идет ошибка. Способ прост как валенок — мы вне формы msOrder создаем соответствующий инпут, грузим документ пользователя на сервер и в письме передаем на него ссылку.

Можно поступить красивее и добавить свое поле к стандартным minishop2, инструкций полно, но мне, если честно, уже было лениво это делать и ссылку я делаю в стандарном поле text_address. Итак, по порядку.

Обычная форма, например tpl.msOrder, под ней (после тега form)

 <div class="cash__form-file">
         <span id="result">Прикрепить реквизиты организации</span>
	<input type="file" name="file[]" id="js-file">
	</div>


И популярный в сети скрипт в шаблоне корзины.

$("#js-file").change(function(){
	if (window.FormData === undefined) {
		alert('В вашем браузере FormData не поддерживается')
	} else {
		var formData = new FormData();
		formData.append('file', $("#js-file")[0].files[0]);
 
		$.ajax({
			type: "POST",
			url: '/assets/upload.php',
			cache: false,
			contentType: false,
			processData: false,
			data: formData,
			dataType : 'json',
			success: function(msg){
				if (msg.error == '') {
					$("#js-file").hide();
					$('#result').html('Файл '+msg.success+' успешно загружен');
					$('.cash__form input[name=text_address]').val('<a href="site.ru/assets/uploads/user_images/'+msg.success+'" target="_blank">'+msg.success+'</a>');
				} else {
					$('#result').html(msg.error);
				}
			}
		});
	}
});


Обратите внимание на путь к картинке (каталог user_images заранее нужно создать) и путь к сайту. Теперь создаём upload.php. Да, это может быть и ресурс, но мы идем по пути для ленивых и тех, кто ночь промучался и делает форму на рассвете с пятой чашкой кофе, пытаясь вставить файл в само письмо.

<  ? php // тут убрать пробелы
 
// Название <input type="file">
$input_name = 'file';
 
// Разрешенные расширения файлов.
$allow = array();
 
// Запрещенные расширения файлов.
$deny = array(
	'phtml', 'php', 'php3', 'php4', 'php5', 'php6', 'php7', 'phps', 'cgi', 'pl', 'asp', 
	'aspx', 'shtml', 'shtm', 'htaccess', 'htpasswd', 'ini', 'log', 'sh', 'js', 'html', 
	'htm', 'css', 'sql', 'spl', 'scgi', 'fcgi', 'exe'
);
 
// Директория куда будут загружаться файлы.
$path = '/путь от корня/public_html/assets/uploads/user_images/';
 
 
$error = $success = '';
if (!isset($_FILES[$input_name])) {
	$error = 'Файл не загружен.';
} else {
	$file = $_FILES[$input_name];
 
	// Проверим на ошибки загрузки.
	if (!empty($file['error']) || empty($file['tmp_name'])) {
		$error = 'Не удалось загрузить пустой файл. ';
	} elseif ($file['tmp_name'] == 'none' || !is_uploaded_file($file['tmp_name'])) {
		$error = 'Не удалось загрузить файл, нет названия файла.';
	} else {
		// Оставляем в имени файла только буквы, цифры и некоторые символы.
		$pattern = "[^a-zа-яё0-9,~!@#%^-_\$\?\(\)\{\}\[\]\.]";
		$name = mb_eregi_replace($pattern, '-', $file['name']);
		$name = mb_ereg_replace('[-]+', '-', $name);
		$name = date('Y-m-d-H-i___').$name;
		$parts = pathinfo($name);
 
		if (empty($name) || empty($parts['extension'])) {
			$error = 'Недопустимый тип файла';
		} elseif (!empty($allow) && !in_array(strtolower($parts['extension']), $allow)) {
			$error = 'Недопустимый тип файла';
		} elseif (!empty($deny) && in_array(strtolower($parts['extension']), $deny)) {
			$error = 'Недопустимый тип файла';
		} else {
			// Перемещаем файл в директорию.
			if (move_uploaded_file($file['tmp_name'], $path . $name)) {
				// Далее можно сохранить название файла в БД и т.п.
				$success = $name;
			} else {
				$error = 'Не удалось загрузить файл - нет директории.';
			}
		}
	}
}
 
// Вывод сообщения о результате загрузки.
if (!empty($error)) {
	$error = '<p style="color: red">' . $error . '</p>';  
}
 
$data = array(
	'error'   => $error,
	'success' => $success,
);
 
header('Content-Type: application/json');
echo json_encode($data, JSON_UNESCAPED_UNICODE);
exit();


Ну вот и всё. Почти. Теперь идем в чанк письма менеджеру (конечно своему, не родному, чтобы не затерся).
{extends 'my.msEmail'}

{block 'title'}
    {'ms2_email_subject_new_manager' | lexicon : $order}
{/block}

 {block 'file'}

 <tr><th style="{$style.th}">Реквизиты</th><td></td></tr>
 
 {/block}


И чанк my.msEmail. Не весь привожу, а то много текста будет.

 <table class="body-wrap" style="padding:0 20px 20px 20px;width: 100%;background:#f6f6f6;margin-top:10px;">
        <tr>
            <td></td>
            <td class="container" style="border:1px solid #f0f0f0;background:#ffffff;width:800px;margin:auto;">
              <div class="content">
         <h3 style="{$style.h}{$style.h3}">покупатель</h3>
                <table style="width:100%;">
                    
                        <tr>
                            <th style="{$style.th}">E-mail</th><td>{$user.email}</td></tr>
                        <tr>    <th style="{$style.th}">Ф.И.О. получателя</th><td>{$address.receiver}</td></tr>
                        <tr><th style="{$style.th}">Телефон</th> <td>{$address.phone}</td></tr>
                        <tr><th style="{$style.th}">Город</th> <td>{$address.city}</td></tr>
                        <tr><th style="{$style.th}">Комментарий</th><td>{$address.comment}</td></tr>
                         {block 'file'}{/block}
                 
                        <tr>
                          <td><p>Способ доставки:<b></th><td>{$delivery.name}</b></p></td>
                        </tr> 
                  </table>
              </div>
                <!-- /content -->
            </td>
            <td></td>
        </tr>
    </table>
   

В итоге в письме у нас есть ссылка на загруженный файл. Да, не очень удобно, но зато она есть :)