@PRIZRAKeee

Почему не отправляется файл по почте?

Здравствуйте. Прошу помочь. На сайте есть форма для вакансий. Все поля работают. Потребовалось отправлять текстовый файл с резюме. Вроде всё сделал правильно, но при отправки данных с формы (если мы загрузили файл) появляется ошибка. Без загрузки файла всё работает. Ошибка в консоли "Swift_IoException in FileByteStream.php line 144: Unable to open file for reading". Файл хранится во временной папке и не сохраняется после отправки (это мне нужно). Я попробовал закинуть файл на сервер и при отправке почты прописать вручную путь до файла для attach("/папки сервера/tmp/php/uploads/phpfoeu5Y/resume.docx") то файл прикрепляется и приходит на почту. Но если я засуну этот же путь в переменную $path = "/папки сервера/tmp/php/uploads/phpfoeu5Y/resume.docx"; и выведу attach($path) то мне выдаст ошибку. Помогите пожалуйста, укажите мне на мою ошибку.
<form action="/ajax/vacancy" class="pop_form" id="form-resume" enctype="multipart/form-data" data-id="vacancy" onsubmit="sendVacancy(this, event)">
        <div class="f_tit">Отклик на вакансию</div>
		<div class="row_form_information_vacancy">
        	<div class="form_information_vacancy">

				<input type="text" name="name_vacancy" value="" class="form_information_vacancy_name" readonly>

				<input type="text" name="wages" value="" class="form_information_vacancy_wages" readonly>

        	</div>
		</div>
		<input type="file" name="ypicture" id="ypicture" value="" style="display:none;">
        <fieldset class="form_block_vacancy">
            <label>
                <input type="text" name="name" value="" placeholder="Имя, фамилия" class="f_field form_input_vacancy_name">
            </label>
        </fieldset>
        <fieldset class="form_block_vacancy">
            <label>
                <input type="text" name="phone" value="" placeholder="Телефон" class="f_field form_input_vacancy_phone">
            </label>
        </fieldset>
        <fieldset class="form_block_vacancy">
            <label>
                <input type="text" name="email" value="" placeholder="E-mail:" class="f_field form_input_vacancy_mail">
            </label>
        </fieldset>
        <fieldset class="form_block_vacancy">
            <label>
                <textarea name="text" cols="30" rows="5" placeholder="Комментарий:" class="f_ta form_textarea_vacancy"></textarea>
            </label>
        </fieldset>
		<div class="attach-file-wrap" style="display:none;">
        	<label class="text attach-file" for="file">
				<img src="/images/resume.png">
				<div class="fileLabel">Прикрепите файл формата doc, docx или pdf размером не более 10 Мб</div>
                   <div class="fileLabel2 hide"></div>
			</label>
			<input class="text attach-file-input file" type="file" name="file">
		</div>
		<div class="policy policy_form_vacancy">Нажимая кнопку «Отправить», вы подтверждаете свое согласие на обработку <a href="/policy" target="_blank" style="color: #000">персональных данных</a></div>
        <input type="submit" name="" value="Отправить" class="f_btn">
    </form>


Код JavaScript:
function sendAjaxResume(t,e,i,n){
		e=e||{},"undefined"==typeof n&&(n="json");
		var formData = new FormData($('#form-resume')[0]);
		$.ajax({
			url:t,
			data: formData,
			dataType:n,
			processData: false,
	        contentType: false,
			type:"post",
			dataType: 'json',
			beforeSend:function(t){
				return t.setRequestHeader("X-CSRF-Token",$("meta[name='csrf-token']").attr("content"))
			},
			success:function(t){
				"function"==typeof i&&i(t)
			},
			error:function(t,e,i){
				alert("Не удалось выполнить запрос! Ошибка на сервере.");
			}
		})
	}

	function sendVacancy(t,e,id,site){
	    e.preventDefault(),t=$(t);
	    var i=t.serialize(),n=$(t).attr("action");
	    t.find(".err-msg-block").remove();
		sendAjaxResume(n,i,function(e)
	    {
	      if("undefined"!=typeof e.errors)
	      {
	        applyFormValidate(t,e.errors);
	        var i=[];
	        for(var n in e.errors)i.push(e.errors[n]);
	        var o=i.join("<br />");
	        t.find(".f_tit").after('<div class="err-msg-block">'+o+"</div>")
	      } else {
	        resetForm(t),popup("Спасибо за письмо, в ближайшее время мы Вам ответим!");
	      }
	    })
	}


Код PHP:

public function postVacancy() {
			$data = Request::only(['name', 'phone','email','text','name_vacancy','wages']);
			$valid = Validator::make($data, [
				'name'  => 'required',
				'phone' => 'required',
				'email' => 'required',
			], [
				'name.required'  => 'Не заполнено поле Имя',
				'phone.required' => 'Не заполнено поле Телефон',
				'email.required' => 'Не заполнено поле e-mail',
			]);
			if ($valid->fails()) {
				return ['errors' => $valid->messages()];
			} else {
			$path = $_FILES["file"]["tmp_name"].'/'.$_FILES["file"]["name"];
			$feedback_data = [
				'type' => 10,
				'data' => $data
			];
			$feedback = Feedback::create($feedback_data);
			Mail::queue('mail.callback', ['feedback' => $feedback], function ($message) use ($feedback) {
				$title = $feedback->id . ' | Вакансия | ';
				$message->from($this->fromMail, $this->fromName)
					->to(Settings::get('feedback_email'))
					->subject($title);
				$message->attach($path);
			});
			return ['success' => true];
			}
		}
  • Вопрос задан
  • 396 просмотров
Пригласить эксперта
Ответы на вопрос 1
@402d
начинал с бейсика на УКНЦ в 1988
$path = $_FILES["file"]["tmp_name"].'/'.$_FILES["file"]["name"];
ну и что тут у Вас ?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы