Phpmailer: несколько динамических вложений в одной форме

Я создаю службу рассылки.
Мне нужно динамически прикрепить один или несколько файлов к электронной почте, используя php, phpmailer и только один «слот» для добавления файлов в html-форму.
Я просто знаю, как отправить одно вложение, а не два или более, в одном письме.

здесь вы HTML-код:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<div class="main_container">

<form action="phpmailer/sendmail.php" method="post" enctype="multipart/form-data" id="prenota">

<div class="form_title">
<h2>Mailing List</h2>
</div>

<div class="form_title">
<p>Message:</p>
</div>

<label for="message">
<textarea name="message"></textarea>
</label>

<label for="file">
Select one or more file to send
<input name="file" type="file" id="file_ok">
</label>

<div class="submit-container">
<input class="submit-button" type="submit" name="submit" value="Invia"><br>
</div>

</form>

</div>
</body>
</html>

и php для phpmailer (sendmail.php, он работает с хостингом, который я использую):

<?php
require_once('libs/PHPMailer/PHPMailerAutoload.php');


$db= new PDO('mysql:host=00.000.000.000;dbname=dbname_1', 'dbname', 'dbpass');//connection setup

$m_list = $db->query("SELECT id, nome, email
FROM mailing_list
")->fetchAll(PDO::FETCH_ASSOC);


$mail             = new PHPMailer(true);

$mail->Port = 25;
$mail->CharSet = 'UTF-8';


//variables
$email_receiver =  $m_list['email'];
$name_receiver = $m_list['nome'];

$nome_sender= "mr x";
$messagge= stripslashes($_POST['message']);

foreach ($m_list as $eachmail) {

$email_receiver =  $eachmail['email'];
$name_receiver = $eachmail['nome'];

$mail->From = "[email protected]";

$mail->FromName = "service";

$mail->AddReplyTo($email_receiver, $name_receiver);

$mail->MsgHTML($body);

$mail->AddAddress($email_receiver, "dynamic name");

$mail->Subject    = "Message from website";

$body             = '<strong>email send to:</strong> ' . $name_receiver . '<br/>
<strong>email:</strong> ' . $email_receiver . '<br/>
<strong>message:</strong> ' . stripslashes($message) . '<br/><br/>';

$mail->MsgHTML($body);
$mail->Send(true);
$mail->ClearAllRecipients(true);

}

echo "mail sent";

?>

Я предполагаю, что мне нужно сохранить файлы в массиве, а затем для каждого файла создать относительное вложение. К сожалению, я не могу. Любая помощь?

0

Решение

Прежде всего, я использовал «инъекцию» Jquery, чтобы добавить столько файлов ввода, сколько я хочу, в dom главной формы, и удалить их при желании.

$( document ).ready(function() {
$( '#add_more' ).click(function() {
var current_count = $('input[type="file"]').length;
var next_count = current_count +1;
$('#prenota').prepend('<p id="here_' + next_count + '"><input type="file" name="file_' + next_count + '" /></p>')
$('#here_' + next_count + '').append('<a class="delete_this" href="#">delete</a>');
});


$('.delete_this').live('click', function(){
var current_todelete = $(this).closest("p").attr("id");
$('#' + current_todelete + '').remove();
});
});

Затем я добавил несколько строк в php-файл, предназначенный для сбора информации о сообщениях и отправки электронных писем, чтобы он мог переносить вложения (как предложил мне Synchro):

if (isset($_FILES)){
foreach ($_FILES as $file) {

$filename = $file['name'];
$filetype = $file['type'];
$filetmp_name = $file['tmp_name'];
$filesize = $file['size'];

if($filename){
$temPath = '../../../../../public/' . basename($filename);

//var_dump($temPath);
//die();

if (move_uploaded_file($filetmp_name, $temPath)) {
$mail->AddAttachment($temPath, $filename);
}
}
}
}else{
$mail->AddAttachment(false);
}

Надеюсь быть полезным людям с такой же проблемой, как у меня.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]