Witam!
Napisalem sobie klase do odczytywania i wysylania poczty email przy uzyciu protokolu IMAP. Mam jednak problem z funkcja wysylajaca poczte.
<?php
function send_mail($od, $od_addr, $do, $cc = '', $bcc = '', $temat, $tresc, $reply = '', $replyname = '', $priorytet = 3,$zapisz = false, $zalacz = false, $wyslij = true)
{
global $email_sent, $email_draft, $attach_dir; $envelope['from'] = \"$od <$od_addr>\";
$envelope['date'] = date('r'); $envelope['return-path'] = $od_addr;
$envelope['subject'] = $temat;
if($cc != '')
$envelope['cc'] = $cc;
$envelope[\"custom_headers\"] = array(\"X-Priority: \".$priorytet);
if($bcc != '')
array_push($envelope[\"custom_headers\"], \"Bcc: \".$bcc); if($reply != '')
{
if($replyname == '')
array_push($envelope[\"custom_headers\"], \"Reply-To: \".$reply); else
array_push($envelope[\"custom_headers\"], \"Reply-To: \".$replyname.\" <$reply>\"); }
$part1[\"type\"] = TYPEMULTIPART;
$part1[\"subtype\"] = \"mixed\";
$typy_mime = array(TYPETEXT
, TYPEMULTIPART
, TYPEMESSAGE
, TYPEAPPLICATION
, TYPEAUDIO
, TYPEIMAGE
, TYPEVIDEO
, TYPEOTHER
); {
$ile_zal = count($zalacz); for($i = 0; $i < $ile_zal; $i++)
{
$filename = $attach_dir.$zalacz[$i];
$fp = fopen($filename, \"r\"); $mime = mime_content_type($filename);
switch($type)
{
case 'text': $type = TYPETEXT; break;
case 'multipart': $type = TYPEMULTIPART; break;
case 'message': $type = TYPEMESSAGE; break;
case 'application': $type = TYPEAPPLICATION; break;
case 'audio': $type = TYPEAUDIO; break;
case 'image': $type = TYPEIMAGE; break;
case 'video': $type = TYPEVIDEO; break;
case 'other': $type = TYPEOTHER; break;
}
${\"part2\".$i}[\"type\"] = $type;
${\"part2\".$i}[\"subtype\"] = $subtype;
${\"part2\".$i}[\"encoding\"] = ENCBINARY;
${\"part2\".$i}[\"contents.data\"] = $contents;
${\"part2\".$i}[\"disposition.type\"] = \"attachment\";
${\"part2\".$i}[\"disposition\"] = array(\"filename\" => $fname);
delete_file($zalacz[$i]);
}
}
else
$zalacz = false;
$part3[\"type\"] = TYPETEXT;
$part3[\"subtype\"] = \"plain\";
$part3[\"charset\"] = \"iso-8859-2\";
$part3[\"description\"] = $temat;
$part3[\"contents.data\"] = $tresc;
if($zalacz)
{
$body[1] = $part1;
$j = 2;
for($i = 0; $i <$ile_zal; $i++)
$body[$j++] = ${\"part2\".$i};
$body[$j] = $part3;
}
else
$body[1] = $part3;
if($zapisz)
{
$envelope['to'] = $do;
if(!$wyslij)
return imap_append($this->id, $this->mailserver.$email_draft, $mail2, \"Seen Draft\");
imap_append($this->id, $this->mailserver.$email_sent, $mail2, \"Seen\");
}
if($wyslij)
{
list
($t_header,$t_body)=split(\"rnrn\",$mail,2); return imap_mail($do, $temat, $t_body, $t_header);
}
}
?>
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).
<?php
function get_attachments($numer)
{
$strukt = $this->fetchstructure($numer);
if(!isset($strukt->parts)) return false;
$czesci = count($strukt->parts); if($czesci > 1)
for($i = 0; $i < $czesci; $i++)
{
if($strukt->parts[$i]->type != TYPEMULTIPART)
{
$check = false;
if(isset($strukt->parts[$i]->parameters)) {
$parametry = $strukt->parts[$i]->parameters;
for($j = 0; $j < count($parametry); $j++) {
if(isset($parametry[$j]->attribute) && ($parametry[$j]->attribute == \"name\" || $parametry[$j]->attribute == \"filename\")) {
$check = true;
}
}
}
if(!$check && isset($strukt->parts[$i]->dparameters)) {
$parametry = $strukt->parts[$i]->dparameters;
for($j = 0; $j < count($parametry); $j++) {
if(isset($parametry[$j]->attribute) && ($parametry[$j]->attribute == \"name\" || $parametry[$j]->attribute == \"filename\")) }
}
}
}
return $zalaczniki;
}
?>