Вы хотите контролировать, сколько файлов будет выбрано.Это плохая идея, чтобы отображать большое количество файлов / флажков на вашей странице.Особенно, если файлов так много, что вы не можете запросить их все без ошибки.(Возможно, что-то еще происходит с этой ошибкой 503.) Сколько PDF-файлов мы говорим?В любом случае ...
Что произойдет, если вы покажете мне только 100 файлов, а я выберу все 100. Ваш код отправит мне электронное письмо со 100 вложениями. (Даже 100 не удастся, электронные письма для этого не предназначены.Затем, что произойдет, если мне действительно понравятся ваши PDF-файлы, и все, что я делаю, это целый день сижу за своим компьютером, нажимая «Отправить» снова и снова, отправляя электронное письмо при каждом нажатии кнопки, каждый раз по 100 вложений.Теперь все 100 человек делают это.Я уверен, что вы поймете, что это быстро уничтожит ресурсы вашего сервера.
Если вы можете получить имена файлов из БД, это, вероятно, ваш лучший метод.Я бы разбил на страницы результаты, скажем, только 20 файлов отображаются одновременно.Я бы только позволил пользователю выбрать максимальное количество файлов на отправку, поскольку, скорее всего, существует ограничение на то, что может делать электронное письмо.Я бы даже контролировал, как часто пользователь мог выполнять эту функцию в определенный период времени, чтобы предотвратить злоупотребления.
Я бы также посмотрел просто на прямую загрузку файлов с вашего сервера на компьютер пользователя и полностью в обходвсе это вместе с электронной почтой, если это не входит в задачи вашего текущего проекта.
Но это все темы, о которых вы должны помнить при создании.Но чтобы получить подтверждение концепции.Проверьте ниже.
Шаг 1 - Загрузите PHPMailer и запустите его, чтобы вы могли вызвать $mail = new PHPMailer;
на странице, и это не приведет к ошибке.Вот ссылка:
PHPMailer
Шаг 2. Поиск в структуре папок или БД и возврат массива, содержащего пути к файлам.
Шаг 3 - Цикл по массиву и установите флажки.
Шаг 4 - Создайте объект PHPMailer и добавьте свойства объекта - отправьте электронное письмо.
require('path/to/PHPMailerClass'); //Or the path to the autoloader if that is how you installed.
$path = '/root/path/to/pdfFiles/';
$array = array_map('basename', glob($path . '*.pdf')); //This will return all pdf files in the directory.
echo
'<form action="" method="post">';
foreach($array as $file){
echo '<input name="fileName[]" type="checkbox" value="' . $file . '">' . $file . '<br>';
}
echo '<input name="send_email" type="submit" value="Send Email">';
echo
'</form>';
//You will need an array containing the user's information.
$userData = array(
'name' => 'John Doe',
'email' => 'John.Doe@example.com'
);
if(isset($_POST['send_email']) && $_POST['send_email']){ //Make sure they hit submit.
if(isset($_POST['fileName']) && $_POST['fileName']){ //Make sure they selected a file.
if(count($_POST['fileName']) > 5){
echo 'You can only select 5 files.';
exit();
}
//Set up the email.
$mail = new PHPMailer;
$mail->setFrom('from@example.com', 'Your Name');
$mail->addAddress($userData['email'], $userData['name']);
$mail->Subject = 'This is how to send attachments.';
$mail->isHTML(true);
$mail->Body = $userData['name'] . ',<br>' .
'Here are the files you selected!';
//Here is the attachment part.
foreach($_POST['fileName'] as $file){ //Loop across the selected files.
$mail->AddAttachment($path . $file, $file, 'base64', 'application/pdf'); //Attach the file.
}
if(!$mail->send()) { //Send the mail.
echo 'Message was not sent.';
echo 'Mailer error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent.';
}
}else{
echo 'No file was selected.';
}
}
Если вы тестируете наПри настройке localhost вам, возможно, придется сделать несколько проблем, чтобы получить письма для отправки.Я не разбираюсь в этом, поэтому поищите в Google и ТАК, чтобы решить эту проблему .. Если после нескольких удачных попыток заставить это работать, и вы не можете понять это, напишите другой вопрос.