How do i retrieve and save the attachment sent to me via a form post with Mailgun's POST
The following the some of the parameters
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"
So I know this is a year late, but I had the same problem and figured out how to download the attachments. The files in the post are in stored in the environmental variable $_FILES. The information for each file will look something like:
Array
(
[attachment-1] => Array
(
[name] => ATextFile.txt
[type] => text/plain
[tmp_name] => /tmp/php8zhmlU
[error] => 0
[size] => 70144
)
)
The path to the file is stored in tmp_name
, so in this case, /tmp/php8zhmlU
is the full path to the file. move_uploaded_file
will overwrite any existing files! To download all the attachments from the POST
I wrote a function:
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/");
Documentation for this top can be found here.
- use store action from route session in order to obtain information
about your email. (retrieving stored message
- json_decode "attachments" property in order to obtain information
about your attachments
- get api key and use php library in order to use get api.
if you json decoded list of attachments is $files, you can do
$mgClient = new Mailgun('yourApiKey');
foreach ($files as $file){
file_put_contents($file->name,$mgClient->get($file->url)->http_response_body);
}
to download every attachment