Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno PHP odeslání emailu s přílohou

Ahoj,

potřebuji pomocí vestavěné funkce v php mail odesílat emaily s přílohou.
Tuto věc sice řeší PHP Mailer, který nemůžu z licenčních důvodů použít.

Jde mi o uživatelskou přívětivost aplikace, takže maily budou obsahovat tzv. CID inline obrázky.

Toto se mi však nedaří delší čas dořešit.

Můj kód vypadá takto:

$boundary = md5(uniqid(time()));
$separator = "\r\n"

$file = "C:\\imagesMail\\simple.jpg";
                $file_size = filesize($file);
                $handle = fopen($file, "r");
                $content = fread($handle, $file_size);
                fclose($handle);
                    $attachment = chunk_split(base64_encode($content));
                    $filename = pathinfo("C:\\imagesMail\\simple.jpg" , PATHINFO_BASENAME);
                    $mimeType = mime_content_type("C:\\imagesMail\\simple.jpg");
                    $message .= "--" . $boundary . $separator;
                    $message .= "Content-Type: " . $mimeType . "; name*=utf-8''" . $separator;
                    $message .= "Content-Type: application/octet-stream; name=\"simple.jpg\" ";
                    $message .= "Content-Transfer-Encoding: base64" . $separator;
                    $message .= "Content-Disposition: attachment; filename=\"" . $filename . "\"" . $separator;
                    $message .= "\"Content-Transfer-Encoding: base64". $separator;
                    $message .= $attachment . $separatorDouble;


                    mail($toAddressList, "=?utf-8?B?" . ObjectEncoder::Base64($subject) . "?=", $message, $header)

Výsledkem současného kódu je funkční mail, avšak příloha má nulovou velikost.
Takže prohlížeč hlásí, že obrázek je poškozen.

Děkuji za rady.

Předmět Autor Datum
Veľmi jednoducho, pošli si tým phpmailerom jednoduchý email s vloženým obrázkom. Pozri si zdrojový k…
čitateľ 20.09.2016 19:36
čitateľ
Ok, asi je to příliš podrobná, či odborná věc. Dostal jsem se teda do stavu, kdy se odesílá email i…
Velitel 21.09.2016 13:52
Velitel
Aha, tak to není omezením, ale je to bug v parseru poradny,který hlásí dlouhý text, nicméně podstatn…
Velitel 21.09.2016 13:54
Velitel
na prvý pohľad to vyzerá správne, možno len malá chybička nebolo by zlé to vidieť hotové aj s obsaho…
čitateľ 21.09.2016 15:19
čitateľ
toto som chcel ešte pridať, je tam aj tvoj CID rfc2387
čitateľ 21.09.2016 15:20
čitateľ
Juchů. Byla tam chybka. Už je to operational. Možno označit vyřešené. poslední
Velitel 21.09.2016 15:23
Velitel

Ok, asi je to příliš podrobná, či odborná věc.
Dostal jsem se teda do stavu, kdy se odesílá email i s přílohou - v pořádku.
Potřebuji jen správně upravit hlavičky, aby fungovala reference na CID (identifikátor).
Tedy abych dosáhl přesně toho, že se zobrazuje obrázek u HTML formátu, přičemž se obrázek bere přímo z těla daného mailu a zobrazuje se v tagu:
<img src="cid:image.001.src">
Můj kód tedy už vypadá takto (Píši níže v dalším příspěvku, protože je tu velikostní omezení:

Aha, tak to není omezením, ale je to bug v parseru poradny,který hlásí dlouhý text, nicméně podstatná část kódu tu je (dole je jen odeslání)

 static function mail_attachment() {
            $file = "C:\\imagesMail\\simple.jpg";
            $filename = "simple.jpg";
            $file_size = filesize($file);
            $handle = fopen($file, "r");
            $content = fread($handle, $file_size);
            fclose($handle);
            $content = base64_encode($content);

            //$content = chunk_split(base64_encode($content));
            $uid = md5(uniqid(time()));
            $name = basename($file);

// header
            $header = "From: martin <hokus@pokus.cz>\r\n";
            $header .= "Reply-To: hokus@pokus.cz\r\n";
            $header .= "MIME-Version: 1.0\r\n";
            $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";

// message & attachment
            $nmessage = "--".$uid."\r\n";
            $nmessage .= "Content-type:text/html; charset=iso-8859-1\r\n";
            $nmessage .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
            $nmessage .= "Ahoj<img src=\"cid:image.001.src\" alt=\"IETF logo\">"."\r\n\r\n";

            $nmessage .= "--".$uid."\r\n";
            $nmessage .= "Content-Type: image/jpeg; name=\"".$filename."\"\r\n";
            $nmessage .= "Content-Transfer-Encoding: base64\r\n";
            $nmessage .= "Content-ID: <image.001.src>";
            $nmessage .= "Content-Disposition: inline; filename=\"".$filename."\"\r\n\r\n";
            $nmessage .= $content."\r\n\r\n";
            $nmessage .= "--".$uid."--";
          

Díky za případnou reakci.

Zpět do poradny Odpovědět na původní otázku Nahoru