2012-07-03 21 views
10

Jak zawsze tutaj jest miejsce, w którym wiele się nauczyłem. I mam teraz nowe rzeczy do nauki:swiftmailer i formularz email z załącznikiem - beginner

Mam formularza HTML:

<tr><td width="16%">File attachment</td><td width="2%">:</td><td><input type="file" name="fileatt" /></td></tr> 

i mail.php:

$attachfile=$_POST["fileatt"]; 

i prawidłowy kod swiftmailer do wysyłania e-maili z;

Mam google i znalazłem wiele przykładów, jak wysłać załącznik z plikiem przechowywanym na stronie, ale chciałbym to zrobić w locie. Tak więc, po przesłaniu przycisku, wyślesz go ludziom, zamiast przesyłać plik.

// Create the Transport 
$transport = Swift_SmtpTransport::newInstance('mail.server.co.uk', 25) 
->setUsername('user') 
->setPassword('pass') 
; 

// Create the Mailer using your created Transport 
$mailer = Swift_Mailer::newInstance($transport); 

// Create a message 
$message = Swift_Message::newInstance($subject) 
    ->setFrom(array('[email protected]' => 'name')) 

    ->setBody($html, 'text/html') 
    ; 
// Add alternative parts with addPart() 
$message->addPart(strip_tags($html), 'text/plain'); 

// Send the message 
$result = $mailer->send($message); 

Czy ktoś może mi pomóc, jak to zrobić, przesyłając plik w locie? Z góry dziękuję!!!

Odpowiedz

25

Jest prosty sposób, aby to zrobić, proszę bardzo:

$message->attach(
Swift_Attachment::fromPath('/path/to/image.jpg')->setFilename('myfilename.jpg') 
); 

To jeden ze sposobów SwiftMail może to zrobić, teraz po prostu plik/tmp i włącz powyższe pod następujący:

Zakładając, że: fileatt jest zmienną dla $ _FILE, ['tmp_name'] faktycznie jest plikiem tmp, który PHP tworzy z przesłanego formularza.

$message->attach(
Swift_Attachment::fromPath($_FILES['fileatt']['tmp_name'])->setFilename($_FILES['fileatt']['name']) 
); 

Więcej informacji na SwiftMail załączniki można znaleźć na tej stronie docs

Więcej informacji na $ _FILES można znaleźć tutaj na w3schools, mimo że nie podoba w3schools, ta strona jest stałe.

+0

Dzięki za pomoc, próbowałem, ale nie dostać folder tmp dlatego załącznik nie działa ... Dowolny pomysł? –

+0

Zauważ, że miałem błąd w moim kodzie, miałem spację po 'fileatt' w $ _FILES, będąc 'fileatt', właśnie to edytowałem. Jeśli to nie był problem, sprawdź, czy odbierasz plik w pierwszej kolejności, spróbuj: 'print_r ($ _ FILES);' –

+0

Po pierwsze, jesteś ACE !!!!!!! Działa teraz z drugą linią, jeszcze jedno: nazwa pliku jest dziwna, czy jest jakikolwiek sposób nazwać go tak, jak powinien być? Mam nadzieję, że to nie jest zbyt dumne pytanie ... Jeszcze raz dziękuję –

3

Innym sposobem, aby to zrobić, używając tylko jednej zmiennej do ścieżki i nazwy pliku jest:

$message->attach(Swift_Attachment::fromPath('full-path-with-attachment-name'));