2014-07-07 7 views
6

Come faccio a recuperare e salvare l'allegato inviato a me tramite un post modulo con del Mailgun POSTRecupera allegato dal Mailgun modulo per l'inserimento PHP

Di seguito l'alcuni dei parametri

attachment-1  
{:filename=>"crabby.gif", :type=>"image/gif", :name=>"attachment-1", :tempfile=>#<Tempfile:/tmp/RackMultipart20140707-2-slsrkh>, :head=>"Content-Disposition: form-data; name=\"attachment-1\"; filename=\"crabby.gif\"\r\nContent-Type: image/gif\r\nContent-Length: 2785\r\n"} 

attachment-2  
{:filename=>"attached_файл.txt", :type=>"text/plain", :name=>"attachment-2", :tempfile=>#<Tempfile:/tmp/RackMultipart20140707-2-sudxuf>, :head=>"Content-Disposition: form-data; name=\"attachment-2\"; filename=\"attached_файл.txt\"\r\nContent-Type: text/plain\r\nContent-Length: 32\r\n"} 

Content-Type  
multipart/mixed; boundary="------------020601070403020003080006" 

risposta

5

quindi so questo è in ritardo di un anno, ma ho avuto lo stesso problema e ho capito come scaricare gli allegati. I file nel post sono memorizzati nella variabile ambientale $_FILES. Le informazioni per ogni file avrà un aspetto simile:

Array 
(
    [attachment-1] => Array 
     (
      [name] => ATextFile.txt 
      [type] => text/plain 
      [tmp_name] => /tmp/php8zhmlU 
      [error] => 0 
      [size] => 70144 
     ) 
) 

Il percorso del file viene memorizzato nella tmp_name, quindi in questo caso, /tmp/php8zhmlU è il percorso completo del file. move_uploaded_file sovrascriverà qualsiasi file esistente! Per scaricare tutti gli allegati dal POST ho scritto una funzione:

function download_attachments($pathToDownloadDirectory) 
{ 
    foreach($_FILES as $file) 
    { 
     if($file['error'] == "0") 
     { 
      if(!(move_uploaded_file($file['tmp_name'], $pathToDownloadDirectory . $file['name']))) 
      { 
       return 0; 
      } 
     } 
     else 
     { 
      return 0; 
     }  
    } 
    return 1; 
} 

download_attachments("/Full/Path/To/Some/Dir/"); 

Documentazione per questo piano può essere found here.

+1

grazie mille. Questo ha funzionato. :-) –

+0

Can lo chiarisci un po ', forse con qualche codice di esempio. Sto riscontrando lo stesso problema – ratherBeKiting

+0

facendo riferimento alla documentazione del mailgun qui, https://documentation.mailgun.com/quickstart-receiving.html#supported-actions-for-routes –

4
  1. azione uso negozio da sessione di percorso al fine di ottenere informazioni sulla tua e-mail. (retrieving stored message
  2. json_decode "allegati" proprietà al fine di ottenere informazioni sui tuoi allegati
  3. chiave API
  4. get e utilizzare libreria PHP al fine di utilizzare ottenere api.

se JSON decodificato lista degli allegati è $ file, si può fare

$mgClient = new Mailgun('yourApiKey'); 

foreach ($files as $file){ 
    file_put_contents($file->name,$mgClient->get($file->url)->http_response_body);  
} 

scaricare ogni attaccamento