2012-07-03 24 views
10

Como siempre aquí es el lugar donde he aprendido mucho. Y tengo ahora un nuevo cosas para aprender:swiftmailer y formulario de correo electrónico con archivo adjunto - principiante

Tengo un formulario HTML:

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

y una mail.php:

$attachfile=$_POST["fileatt"]; 

y un código SwiftMailer correcta para enviar correos electrónicos a cabo;

He buscado en Google y he encontrado muchos ejemplos de cómo enviar archivos adjuntos con un archivo almacenado en el sitio web, pero me gustaría hacerlo sobre la marcha. Por lo tanto, cuando envíe el botón, lo enviará a personas en lugar de cargar el archivo.

// 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); 

¿Alguien me podría ayudar a cargar archivos al vuelo, por favor? ¡¡¡Gracias por adelantado!!!

Respuesta

25

Hay una manera simple de hacer esto, aquí van:

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

Esa es una manera SwiftMail puede hacer esto, ahora sólo el archivo/tmp, y girar a lo anterior en lo siguiente:

Suponiendo que fileatt es la variable para $ _FILE, ['tmp_name'] en realidad es el archivo tmp que PHP crea a partir de la carga del formulario.

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

Más información sobre SwiftMail adjuntos se puede encontrar en esta página docs

Más información sobre $ _FILES se puede encontrar aquí en w3schools, a pesar de que no me gusta w3schools, esta página es sólido.

+0

Gracias por su ayuda, he intentado pero no reciben la carpeta tmp por lo tanto, la fijación no funciona ... ¿Alguna idea? –

+0

Fíjese que tuve un error en mi código, tuve un espacio después de 'fileatt' en $ _FILES, siendo 'fileatt', simplemente lo he editado. Si ese no era el problema, compruebe si está recibiendo el archivo en primer lugar, intente a: 'print_r ($ _ FILES);' –

+0

¡Antes que nada, usted es ACE !!!!!!! Está trabajando ahora con la 2da línea, una cosa más: el nombre del archivo es extraño, ¿hay alguna forma de nombrarlo como debería ser? Espero que no sea una pregunta tonta ... Gracias otra vez –

3

Otra manera de hacer esto, utilizando sólo una única variable para la ruta y el nombre es:

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