Witam!

Napisalem sobie klase do odczytywania i wysylania poczty email przy uzyciu protokolu IMAP. Mam jednak problem z funkcja wysylajaca poczte.

  1. <?php
  2.  
  3. function send_mail($od, $od_addr, $do, $cc = '', $bcc = '', $temat, $tresc, $reply = '', $replyname = '', $priorytet = 3,$zapisz = false, $zalacz = false, $wyslij = true)
  4. {
  5. global $email_sent, $email_draft, $attach_dir;
  6. $envelope['from'] = &#092;"$od <$od_addr>\";
  7. $envelope['date'] = date('r');
  8. $envelope['return-path'] = $od_addr;
  9. $envelope['subject'] = $temat;
  10. if($cc != '')
  11. $envelope['cc'] = $cc;
  12. $envelope[&#092;"custom_headers\"] = array(\"X-Priority: \".$priorytet);
  13. if($bcc != '')
  14. array_push($envelope[&#092;"custom_headers\"], \"Bcc: \".$bcc);
  15. if($reply != '')
  16. {
  17. if($replyname == '')
  18. array_push($envelope[&#092;"custom_headers\"], \"Reply-To: \".$reply);
  19. else
  20. array_push($envelope[&#092;"custom_headers\"], \"Reply-To: \".$replyname.\" <$reply>\");
  21. }
  22. $part1[&#092;"type\"] = TYPEMULTIPART;
  23. $part1[&#092;"subtype\"] = \"mixed\";
  24. $typy_mime = array(TYPETEXT, TYPEMULTIPART, TYPEMESSAGE, TYPEAPPLICATION, TYPEAUDIO, TYPEIMAGE, TYPEVIDEO, TYPEOTHER);
  25. if(is_array($zalacz))
  26. {
  27. $ile_zal = count($zalacz);
  28. for($i = 0; $i < $ile_zal; $i++)
  29. {
  30. $filename = $attach_dir.$zalacz[$i];
  31. $fp = fopen($filename, &#092;"r\");
  32. $mime = mime_content_type($filename);
  33. $pos = strpos($mime,'/');
  34. $type = substr($mime,0,$pos);
  35. switch($type)
  36. {
  37. case 'text': $type = TYPETEXT; break;
  38. case 'multipart': $type = TYPEMULTIPART; break;
  39. case 'message': $type = TYPEMESSAGE; break;
  40. case 'application': $type = TYPEAPPLICATION; break;
  41. case 'audio': $type = TYPEAUDIO; break;
  42. case 'image': $type = TYPEIMAGE; break;
  43. case 'video': $type = TYPEVIDEO; break;
  44. case 'other': $type = TYPEOTHER; break;
  45. }
  46. $subtype = substr($mime,$pos+1,strlen($mime)-$pos);
  47. $contents = fread($fp, filesize($filename));
  48. fclose($fp);
  49. $fname = substr($zalacz[$i], 44, strlen($zalacz[$i]));
  50. ${&#092;"part2\".$i}[\"type\"] = $type;
  51. ${&#092;"part2\".$i}[\"subtype\"] = $subtype;
  52. ${&#092;"part2\".$i}[\"encoding\"] = ENCBINARY;
  53. ${&#092;"part2\".$i}[\"contents.data\"] = $contents;
  54. ${&#092;"part2\".$i}[\"disposition.type\"] = \"attachment\";
  55. ${&#092;"part2\".$i}[\"disposition\"] = array(\"filename\" => $fname);
  56. delete_file($zalacz[$i]);
  57. }
  58. }
  59. else
  60. $zalacz = false;
  61. $part3[&#092;"type\"] = TYPETEXT;
  62. $part3[&#092;"subtype\"] = \"plain\";
  63. $part3[&#092;"charset\"] = \"iso-8859-2\";
  64. $part3[&#092;"description\"] = $temat;
  65. $part3[&#092;"contents.data\"] = $tresc;
  66. if($zalacz)
  67. {
  68. $body[1] = $part1;
  69. $j = 2;
  70. for($i = 0; $i <$ile_zal; $i++)
  71. $body[$j++] = ${&#092;"part2\".$i};
  72. $body[$j] = $part3;
  73. }
  74. else
  75. $body[1] = $part3;
  76. $mail = imap_mail_compose(unserialize(serialize($envelope)), $body);
  77. if($zapisz)
  78. {
  79. $envelope['to'] = $do;
  80. $mail2 = imap_mail_compose(unserialize(serialize($envelope)), $body);
  81. if(!$wyslij)
  82. return imap_append($this->id, $this->mailserver.$email_draft, $mail2, &#092;"Seen Draft\");
  83. imap_append($this->id, $this->mailserver.$email_sent, $mail2, &#092;"Seen\");
  84. }
  85. if($wyslij)
  86. {
  87. list($t_header,$t_body)=split(&#092;"rnrn\",$mail,2);
  88. return imap_mail($do, $temat, $t_body, $t_header);
  89. }
  90. }
  91. ?>


Otóż wysyla poczte idealnie, jednak w przypadku gdy chce zapisac dodatkowo list w skrzynce Wyslane pojawia sie problem, gdyz odczytujac nastepnie zapisana wiadomosc nie mozna odczytac z niej zalacznikow. Najdziwniejsze jest to ze wiadomosc wysylana i zapisywana to jest praktycznie ta sama wiadomosc, ktora jest przysylana, odbierana i zalaczniki widac bez najmniejszych problemow.

Czy ktos wie w czym moze tutaj byc problem.

Zamieszcze dodatkowo funkcje odczytujaca zalaczniki (calej klasy nie umieszczam bo jest za duza).

  1. <?php
  2.  
  3. function get_attachments($numer)
  4. {
  5. $strukt = $this->fetchstructure($numer);
  6. if(!isset($strukt->parts))
  7. return false;
  8. $czesci = count($strukt->parts);
  9. $zalaczniki = array();
  10. if($czesci > 1)
  11. for($i = 0; $i < $czesci; $i++)
  12. {
  13. if($strukt->parts[$i]->type != TYPEMULTIPART)
  14. {
  15. $check = false;
  16. if(isset($strukt->parts[$i]->parameters))
  17. {
  18. $parametry = $strukt->parts[$i]->parameters;
  19. for($j = 0; $j < count($parametry); $j++)
  20. {
  21. if(isset($parametry[$j]->attribute) && ($parametry[$j]->attribute == &#092;"name\" || $parametry[$j]->attribute == \"filename\"))
  22. {
  23. array_push($zalaczniki,$parametry[$j]->value);
  24. $check = true;
  25. }
  26. }
  27. }
  28. if(!$check && isset($strukt->parts[$i]->dparameters))
  29. {
  30. $parametry = $strukt->parts[$i]->dparameters;
  31. for($j = 0; $j < count($parametry); $j++)
  32. {
  33. if(isset($parametry[$j]->attribute) && ($parametry[$j]->attribute == &#092;"name\" || $parametry[$j]->attribute == \"filename\"))
  34. array_push($zalaczniki,$parametry[$j]->value);
  35. }
  36. }
  37. }
  38. }
  39. return $zalaczniki;
  40. }
  41.  
  42. ?>