mailgun send inline image не работает?

Я использую mailgun для отправки почты. Я пытаюсь использовать Python API

pwd = "path-to-image/logo.png"
return requests.post(
     "https://api.mailgun.net/v2/sandboxsomething.mailgun.org/messages",
     auth=("api", "key-something"),
     files=[("inline", open(pwd)),],
     data={"from": src,
           "to": des,
           "subject": sub,
           "html": message})

но он не может отправить изображение.

после этого я пытаюсь показать только png файл при печати print open(pwd).read() Я получил:

 �PNG


 none

но когда я пытаюсь print open('path-to-image/a.txt')Я получаю содержимое файла:

all content of a.text
none

Почему png файл не читается?

3 ответа

Решение

Открытое изображение должно быть:

open(pwd,"rb")

для чтения в двоичном режиме.

Немного поздно, чтобы ответить на это, но я также искал решение и не мог найти онлайн. Я закодировал свой собственный, и я учил, что делюсь этим здесь.

Когда почтовое оружие отправляет новое сообщение конечной точке, оно анализирует встроенные изображения как вложения. Вот исправление, чтобы сохранить изображения встроенными с помощью PHP.

//Handling images
if(!empty($_FILES)){

   //Remove <> from string to set proper array key
   $inline_images=str_replace(array('<', '>'), '', $_POST['content-id-map']);

   //Get inline images
   $inline_images=json_decode($inline_images, true);

   if(!empty($inline_images)){

       foreach($inline_images as $key=>$i){
          if(isset($_FILES[$i])){

             //Now we have the inline images. You upload it to a folder or encode it base64.

            //Here is an example using base64
            $image=file_get_contents(base64_encode($_FILES[$i]['tmp_name']));

            //Now, we will str_replace the image from the email body with the encoded 6ase64 image. 

           $_POST['body-html']=str_replace('cid:'.$key, 'data:image/png;base64,'.$image, $_POST['body-html']);
        }
  }


   //Parsing actual attachments

      //Unset all inline images from attachments array
      foreach($inline_images as $i){
         unset($_FILES[$i]);
      }

       //Now, since we have removed all inline images from $_FILES. You can add your code to parse actual attachments here. 
   }
} 

Вот вам и простой способ разбора встроенных вложений с помощью mailgun.

open(pwd,"rb")

Вы можете использовать эту ссылку: /questions/17761382/smuschaet-rezhim-fajla-python-w/17761396#17761396

Другие вопросы по тегам