Retrieve Attachment from Mailgun Form Post PHP

送分小仙女□ 提交于 2019-12-23 09:03:54

问题


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"

回答1:


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.




回答2:


  1. use store action from route session in order to obtain information about your email. (retrieving stored message
  2. json_decode "attachments" property in order to obtain information about your attachments
  3. 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



来源:https://stackoverflow.com/questions/24605291/retrieve-attachment-from-mailgun-form-post-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!