odeslání MIME dopisů

Zdravím všechny,
nevíte někdo jak by šlo obejít odesílání MIME dopisů zde na WZ? Fce imap_mail_compose() není povolená a při ručním sestavování hlavičky a těla jsem narazil na problém:

Netuším jak ta fce generuje skupinu znaků v následujícím řádku v BOUNDARY (zřejmě slouží ke spojení více dílčích částí MIME): Content-Type: MULTIPART/mixed; BOUNDARY="000_0013_01C22600.7825E4C0"
Na lokále jsem použil nějakou svou nesmyslnou skupinu znaků a po uložení textu z PHP skriptu (který mě na lokále generuje tu MIME zprávu) do textového souboru s příp. MSG se v e-mail klientovi normálně zobrazí i s přílohou. Pokud ale skript spusím na WZ tak dopis sice dojde, ale bez textu i přílohy.

Neznáte někdo RFC specifikaci? Příp. dá se MIME sestavit i jinak než přes imap_mail_compose()?
??? Tak z toho jsem mimo:o))))
A nesel by misto toho pouzit cizi SMTP server ? ... na tohle tema uz tu bylo nejedno vlakno :o)

Radek
vytvorit spravnou podobu MIME emailu neni vubec jednoduche. zkus k tomu pouzit nekterou z jichz hotovych trid - hledej ve starsich prispevcich.

m.
MIME trida:

<?


class mime_mail
{
var $parts;
var $to;
var $from;
var $headers;
var $subject;
var $body;


function mime_mail() {
$this->parts = array();
$this->to = "";
$this->from = "";
$this->subject = "";
$this->body = "";
$this->headers = "";
}


function add_attachment($message, $name = "", $ctype = "application/octet-stream") {
$this->parts[] = array (
"ctype" => $ctype,
"message" => $message,
// "encode" => $encode,
"name" => $name
);
}


function build_message($part) {
$message = $part[ "message"];
$message = chunk_split(base64_encode($message));
$encoding = "base64";
return "Content-Type: ".$part[ "ctype"].
($part[ "name"]? "; name = \"".$part[ "name"].
"\"" : "").

"\nContent-Transfer-Encoding: $encoding\n\n$message\n";
}


function build_multipart() {
$boundary = "b".md5(uniqid(time()));
$multipart =
"Content-Type: multipart/mixed; boundary = $boundary\n\nThis is a MIME encoded message.\n\n--$boundary";

for($i = sizeof($this->parts)-1; $i >= 0; $i--)
{
$multipart .= "\n".$this->build_message($this->parts[$i]).
"--$boundary";
}
return $multipart.= "--\n";
}


function get_mail($complete = true) {
$mime = "";
if (!empty($this->from))
$mime .= "From: ".$this->from. "\n";
if (!empty($this->headers))
$mime .= $this->headers. "\n";

if ($complete) {
if (!empty($this->to)) {
$mime .= "To: $this->to\n";
}
if (!empty($this->subject)) {
$mime .= "Subject: $this->subject\n";
}
}

if (!empty($this->body))
$this->add_attachment($this->body, "", "text/plain");
$mime .= "MIME-Version: 1.0\n".$this->build_multipart();

return $mime;
}


function send() {
$mime = $this->get_mail(false);
mail($this->to, $this->subject, "", $mime);
}
};

?>



SMTP TRIDA:

<?php


class smtp_mail {
var $fp = false;
var $lastmsg = "";


function read_line()
{
$ret = false;

$line = fgets($this->fp, 1024);

if(ereg("^([0-9]+).(.*)$", $line, &$data)) {
$recv_code = $data[1];
$recv_msg = $data[2];

$ret = array($recv_code, $recv_msg);
}

return $ret;
}


function dialogue($code, $cmd)
{
$ret = true;

fwrite($this->fp, $cmd."\r\n");

$line = $this->read_line($this->fp);

if($line == false) {
$ret = false;
$this->lastmsg = "";
} else {
$this->lastmsg = "$line[0] $line[1]";

if($line[0] != $code) {
$ret = false;
}
}

return $ret;
}


function error_message()
{
echo "SMTP protocol failure (".$this->lastmsg.").<br>";
}


function crlf_encode($data)
{
$data .= "\n";
$data = str_replace("\n", "\r\n", str_replace("\r", "", $data));
$data = str_replace("\n.\r\n", "\n. \r\n", $data);

return $data;
}

function handle_e_mail($from, $to, $data)
{
$rcpts = explode(",", $to);

$err = false;
if(!$this->dialogue(250, "HELO phpclient") ||
!$this->dialogue(250, "MAIL FROM:$from")) {
$err = true;
}

for($i = 0; !$err && $i < count($rcpts); $i++) {
if(!$this->dialogue(250, "RCPT TO:$rcpts[$i]")) {
$err = true;
}
}

if($err || !$this->dialogue(354, "DATA") ||
!fwrite($this->fp, $data) ||
!$this->dialogue(250, ".") ||
!$this->dialogue(221, "QUIT")) {
$err = true;
}

if($err) {
$this->error_message();
}

return !$err;
}


function connect($hostname)
{
$ret = false;

$this->fp = fsockopen($hostname, 25);

if($this->fp) {
$ret = true;
}

return $ret;
}


function send_e_mail($hostname, $from, $to, $data, $crlf_encode = 0)
{
if(!$this->connect($hostname)) {
echo "cannot open socket<br>\n";
return false;
}

$line = $this->read_line();
$ret = false;

if($line && $line[0] == "220") {
if($crlf_encode) {
$data = $this->crlf_encode($data);
}

$ret = $this->handle_e-mail($from, $to, $data);
} else {
$this->error_message();
}

fclose($this->fp);

return $ret;
}
}
?>


bye
ku*! sorry, ale proc sakra ty kusy zdrojaku nedavate nekde do file a sem hodit jen link na stazeni??? toto ma temer nulovou informacni hodnotu - leda ze by jsi chtel spolehat, ze tam forum nic nezmenilo ;-) spatne se to prenasi, zneprehledni to celej thread atd... zrovna od Mastera bych to necekal :-) nebo se za tebe nekdo maskuje? :-)

m.s.
To víš martine, vono zase otevřít ftp klienta připojit se na web, zkopírovat to tam, zavřít a dám se odkaz je mnohem složitější než to sem přímo hodit, to víš, člověk je od přírody tvor líný^_^.
>to víš, člověk je od přírody tvor líný^_^...
...me to povidej! ale jsou veci ktere lenost nelenost...
od pocitace se take zvednu a dojdu na wc... :-)

m.s.
Já taky:-)
:o)))))))))))))))))))))))))))))))
Nikdo se nemaskuje :-) Jsem to ja aneb: Master ®

Ale stjne tady na tento thread už nikdo nereagoval, tak jsem si řekl že to sem hodím narovinu :-)

sorry all

end message

Master ®
:-)))