2008-10-02 5 views
6

Я работаю над функциями чтения электронной почты PHP в течение большей части двух дней. Я пишу скрипт для чтения писем из почтового ящика и сохранения любых вложений на сервере. Если вы когда-либо делали что-то подобное, вы могли бы понять мою боль: PHP не очень хорошо работает с электронной почтой!Как сохранить вложения электронной почты на сервер в PHP?

Я подключился к POP3-серверу, и я могу выполнять итерацию файлов. Вот приблизительный контур кода:

if (!$mbox = imap_open ("{myserver.com:110/pop3/notls}INBOX", "u", "p")) 
    die ('Cannot connect/check mail! Exiting'); 

if ($hdr = imap_check($mbox)) 
    $msgCount = $hdr->Nmsgs; 
else 
    die ("Failed to get mail"); 

foreach ($overview as $message) { 
    $msgStruct = imap_fetchstructure($mbox, $message->msgno); 

    // if it has parts, there are attachments that need reading 
    if ($msgStruct->parts) { 
     foreach ($msgStruct->parts as $key => $part) { 
      switch (strtoupper($part->subtype)) { 
       case 'GIF': case 'JPEG':case 'PNG': 

        //do something - but what?! 

        break; 
      } 
     } 
    } 
} 

Я отметил, где я застрял. Я могу использовать imap_fetchbody($mbox, $message->msgno, $key+1) но получает мне кучу данных, как это:

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8S 
EhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEU 
Hh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAAR 
CAHiAi0DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA 
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK 
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG 
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl 
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA 
... 

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

Вкратце, я ищу что-то, что может превратить исходную строку MIME в реальные данные.

+0

вы проверили, что это кодировка приложения? – kender 2008-10-02 14:28:27

+0

эй вы можете опубликовать более полный фрагмент? я не могу заставить его работать bc im not sure where $ overview is from – st4ck0v3rfl0w 2010-02-19 02:58:33

+0

У меня такая же проблема, как у вас. Я нашел хорошую статью, и я думаю, что это может вам помочь http://www.linuxscope.net/articles/mailAttachmentsPHP.html наслаждайтесь этим :) – Hassan 2011-09-15 12:43:37

ответ

4

я нашел краткое руководство, как лечить письма с PHP: here.

В нижней части этой страницы есть вложение тела echo:

if (substr($ContentType,0,4) == "text") { 
echo imap_qprint($fileContent); 
} else { 
echo imap_base64($fileContent); 
} 

Я думаю, это то, что вам может понадобиться ...

(редактирование: в вашем случае, если это изображение всегда вы может пропустить if часть. и, конечно, сохранить файл вместо вторя его :)

1

MIME данные базовые 64 кодированных, так что я думаю, что вы должны быть в состоянии расшифровать его, используя base64_decode

1

Zend framework содержит Zend_Mail, что значительно упрощает чтение почтовых сообщений, а Zend_Mime, который, по моему мнению, может анализировать многопользовательское сообщение mime в разумной структуре данных.

http://framework.zend.com/manual/en/zend.mail.read.html

Смежные вопросы