PHPMailer отправляет имя вложения, а не вложение
Привет, у меня есть поле для загрузки файла с именем="файл1" и кодом в скрипте phpmailer:
if (isset($_FILES['file1']))
{
$file1_path = $_FILES['file1']['tmp_name'];
$file1_name = $_FILES['file1']['name'];
$file1_type = $_FILES['file1']['type'];
$file1_error = $_FILES['file1']['error'];
$mail->AddAttachment($file1_path);
}
И по какой-то причине он прикреплен, как php45we34 (каждый раз, когда разница, кажется, что это путь к временному имени, а не фактический файл)
Есть какая-нибудь помощь?
3 answers
Я предлагаю вам использовать функцию move_uploaded_file перед добавлением вложения.
Это пример кода, который переместит файл из временного расположения где-нибудь на вашем сервере
$target_path = "uploads/";
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
echo "The file ". basename( $_FILES['uploadedfile']['name']).
" has been uploaded";
} else{
echo "There was an error uploading the file, please try again!";
}
После этого добавление должно работать нормально.
$mail->AddAttachment(basename($target_path . $_FILES['uploadedfile']['name']));
Удалите пробелы из вашего имени файла!
Blue hills.jpg
должно быть Blue_hills.jpg
Сделай
$fileName = str_replace(' ', '_', $fileName);
То, что вы видите, - это то, что должно произойти. Вы не указываете имя вложения, поэтому PHPMailer использует имя временного файла, который он прикрепляет.
Если вы хотите, чтобы у файла было другое имя, вы должны указать его. Принятый ответ работает, потому что он идет наоборот - он изменяет имя файла так, чтобы файл имел желаемое имя.
Обычным способом продолжения было бы выдать
$mail->AddAttachment($file1_path, $_FILES['file1']['name']);
Для переопределения имени вложения.