Измените имена вложений: wp_mail PHP

Я использую wp_mail для отправки писем с формой, которая есть на моем веб-сайте. Но когда я прикрепляю некоторые файлы, их имена выглядят как «phpr0vAqT» или «phpFO0ZoT».

$files = array(); //Array pour les fichiers
$count = count(array_filter($_FILES['fichier']['name'])); //Compte le nombre de fichiers

        for($i=0;$i<$count;$i++){ //boucle sur chaque fichier

            array_push($files, $_FILES['fichier']['tmp_name'][$i]); //insere le fichier dans l'array $files

         }

Я думаю, что проблема исходит от: ['tmp_name'], но я не знаю, что я могу изменить, потому что wp_mail нужен путь.

Затем я делаю это:

wp_mail($to, $subject, $message, $headers, $files);

отправить почту.

Спасибо.


person Tweak    schedule 05.06.2018    source источник


Ответы (3)


Вы не можете изменить имена вложений с помощью wp_mail.

Возможное решение:

  1. сохраните файлы с правильным именем.
  2. отправьте новые файлы с помощью wp_mail.
  3. удалить файлы.
person Bjorn    schedule 06.06.2018
comment
Я сделаю это, некоторые ребята изменят ядро ​​wordpress, но это не годится для будущих обновлений. Спасибо, Бьорн за ответ. - person Tweak; 06.06.2018
comment
Да, похоже, это единственное решение этой проблемы ... довольно плохо, что здесь делает wordpress ... по крайней мере, они могли бы предоставить нам все варианты, которые есть у класса phpmailer, который они используют. - person GDY; 16.05.2019

Вышеупомянутый подход верен, вот пример того, как вы можете сделать это в php / wp. Надеюсь это поможет!

if(!empty($_FILES['upload-attachment']['tmp_name'])){
            //rename the uploaded file
            $file_path = dirname($_FILES['upload-attachment']['tmp_name']);
            $new_file_uri = $file_path.'/'.$_FILES['upload-attachment']['name'];
            $moved = move_uploaded_file($_FILES['upload-attachment']['tmp_name'], $new_file_uri);
            $attachment_file = $moved ? $new_file_uri : $_FILES['upload-attachment']['tmp_name'];
            $attachments[] = $attachment_file;
 }

И после того, как закончите с приставкой, вы должны очистить

unlink($attachment_file);
person Ken Ye    schedule 16.07.2018
comment
$ _FILES ['upload-attachment'] ['name'] может быть изменено клиентом на '../ etc / hosts' ... - person AndreyP; 04.09.2019

Чтобы изменить имена вложений, вы должны использовать действие phpmailer_init для прямого доступа к PHPMailer экземпляру, используемому в wp_mail(), вместо передачи $files в качестве параметра функции:

function prefix_phpmailer_init(PHPMailer $phpmailer) {
    $count = count($_FILES['fichier']['tmp_name']); //Count the number of files
    for ($i = 0; $i < $count; $i++) { //loop on each file
        if (empty($_FILES['fichier']['error'][$i]))
            $phpmailer->addAttachment($_FILES['fichier']['tmp_name'][$i], $_FILES['fichier']['name'][$i]); //Pass both path and name
    }
}

add_action('phpmailer_init', 'prefix_phpmailer_init');
wp_mail($to, $subject, $message, $headers);
remove_action('phpmailer_init', 'prefix_phpmailer_init');
person AndreyP    schedule 03.09.2019