Autor | Zpráva | ||
---|---|---|---|
Kubas Profil * |
#1 · Zasláno: 18. 2. 2012, 13:54:14
Zdravím,
párkrát se to tu už sice řešilo, nicméně nic to neřešilo můj problém. Jde o to, že na např. seznam.cz mi emaily ze skriptu chodí v pořádku, akurát na gmail ten email někdy dojde a někdy ne (nevidím v tom žádnou pravidelnost) a když už dojde, tak dojde jenom příloha ale text k té zprávě chybí. Nejspíš bude chyba asi někde v hlavičce. Neví někdo prosím co s tím? Na odesílání používám následující script - $ppn = "muj@email.cz"; $zprava = "Toto je zpráva"; $target = "prilohy/".basename($_FILES['uploaded']['name']) ; $m = move_uploaded_file($_FILES['uploaded']['tmp_name'],$target); $attachment_name = $target; $fp = FOpen ($attachment_name, 'r'); $contents = FRead ($fp, FileSize($attachment_name)); $contents = Chunk_Split(Base64_Encode($contents)); FClose ($fp); $headers = "From: Ahoj <$ppn>\n"; $headers .= "Reply-To: <$ppn>\n"; $headers .= "MIME-Version: 1.0\n"; $headers .= "Content-Type: multipart/related; type=\"multipart/alternative\"; boundary=\"" ."----=MIME_BOUNDRY_main_message\"\n"; $headers .= "X-Sender: Odesilatel <$ppn>\n"; $headers .= "X-Mailer: PHP4\n"; $headers .= "X-Priority: 3\n"; $headers .= "Return-Path: <$ppn>\n"; $headers .= "This is a multi-part message in MIME format.\n"; $headers .= "------=MIME_BOUNDRY_main_message \n"; $headers .= "Content-Type: multipart/mixed; boundary=\"" ."----=MIME_BOUNDRY_message_parts\"\n"; $message = "------=MIME_BOUNDRY_message_parts\n"; $message .= "Content-Type: text/html; charset=\"UTF-8\"\n"; $message .= "Content-Transfer-Encoding: quoted-printable\n"; $message .= "$zprava\n"; $message .= "------=MIME_BOUNDRY_main_message\n"; $message .= "Content-Type: application/octet-stream;\n\tname=\"" . $attachment_name . "\"\n"; $message .= "Content-Transfer-Encoding: base64\n"; $message .= "Content-Disposition: attachment;\n\tfilename=\"" . $attachment_name . "\"\n\n"; $message .= $contents; //Zakodovana priloha $message .= "\n"; $message .= "------=MIME_BOUNDRY_main_message--\n"; //ODESLÁNÍ EMAILU if (mail($address, $subject, $message, $headers)) { print 'Email byl úspěšně odeslán.'; } else { print 'Došlo k chybě!'; } Děkuji |
||
Časová prodleva: 8 dní
|
|||
Davex Profil |
#2 · Zasláno: 26. 2. 2012, 14:01:37
1) Tyto řádky nepatří do hlavičky, ale do těla zprávy
$headers .= "This is a multi-part message in MIME format.\n"; $headers .= "------=MIME_BOUNDRY_main_message \n"; $headers .= "Content-Type: multipart/mixed; boundary=\"" ."----=MIME_BOUNDRY_message_parts\"\n"; 2) Vložená část oddělená ----=MIME_BOUNDRY_message_parts mi připadá zbytečná. Kdyby tam měla zůstat, tak není ukončená.
3) Budu-li předpokládat, že v příloze zprávy není její alternativa v jiném formátu, tak není vhodné použití typu multipart/related; type="multipart/alternative" . Pro obyčejnou zprávu s přílohou je vhodnější typ multipart/mixed .
4) Za všemi hlavičkami by měl být prázdný řádek. |
||
Časová prodleva: 7 dní
|
|||
Kubas Profil * |
#3 · Zasláno: 4. 3. 2012, 18:42:41 · Upravil/a: Kubas
Děkuju za reakci,
nicméně asi jsem buď natvrdlý, nebo mi to dneska už prostě nemyslí. Nemohl by jste mi prosím ukázat, jak by to ve výsledku mělo vypadat? Protože - Davex: „1) Tyto řádky nepatří do hlavičky, ale do těla zprávy“ Když jsem u všech tří řádků změnil z $headers na $message, text emailu se nezobrazoval už ani na seznamu, když jsem změnil jenom třetí řádek $headers .= "Content-Type: multipart/mixed; boundary=\"" ."----=MIME_BOUNDRY_message_parts\"\n"; $message .= "Content-Type: multipart/mixed; boundary=\"\"".PHP_EOL; tak mi začal chodit text emailu i na gmail, akurát v tomto tvaru ------=MIME_BOUNDRY_message_parts Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <p>A toto je text u pĹĂlohy, kterĂ˝ bude zobrazen</p> Když jsem zkusil odmazat ty tři řádky (přepsání na $headers místo $message sice částečně pomohlo, na gmail ale zase bez textu), tak mi to přišlo jako Content-Type: text/html; boundary="" <p>ZprĂĄviÄka ÄÄĹĄĹýŞåuĂĂŠ</p> Děkuju za rady P.S.: Text zprávy potřebuju posílat jako text/html, kvůli wysiwyg editoru a nikoli jako text/plain |
||
Davex Profil |
#4 · Zasláno: 4. 3. 2012, 19:38:50
ad 1) Přepsat
$headers na $message nestačí, protože si pak tu proměnnou přepíšeš. Mělo by to být nějak takto pohromadě:
$message = "This is a multi-part message in MIME format.\n"; $message .= "------=MIME_BOUNDRY_main_message\n"; $message .= "Content-Type: multipart/mixed; boundary=\"" ."----=MIME_BOUNDRY_message_parts\"\n\n"; $message .= "------=MIME_BOUNDRY_message_parts\n"; // atd. |
||
Kubas Profil * |
#5 · Zasláno: 4. 3. 2012, 21:13:55
Děkuji, ale to je to co sem říkal.. To řešení je vlastně jenom přepsané
$headers na $message .. V emailu sice příloha přijde, ale bez textu.
Když řádek $message .= "------=MIME_BOUNDRY_main_message\n"; přepíšu jako $headers .= "------=MIME_BOUNDRY_main_message\n"; , tak mi email už přijde, ale s obsahem
------=MIME_BOUNDRY_message_parts Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <p>Toto je textĂk zprĂĄviÄky ÄĹĄÄĹŞýåĂĂŠ</p> |
||
abc Profil |
#6 · Zasláno: 4. 3. 2012, 21:24:50
Kubas:
Myslím, že by bylo asi nejlepší, kdybys přidal aktuální kód... |
||
Kubas Profil * |
#7 · Zasláno: 4. 3. 2012, 21:29:52
$ppn = "muj@email.cz"; $zprava = "Toto je zpráva s diakritikou ěščřžýáíé"; $target = "prilohy/".basename($_FILES['uploaded']['name']) ; $m = move_uploaded_file($_FILES['uploaded']['tmp_name'],$target); $attachment_name = $target; $fp = FOpen ($attachment_name, 'r'); $contents = FRead ($fp, FileSize($attachment_name)); $contents = Chunk_Split(Base64_Encode($contents)); FClose ($fp); $headers = "From: Zdraví <$ppn>".PHP_EOL; $headers .= "Reply-To: <$ppn>".PHP_EOL; $headers .= "MIME-Version: 1.0".PHP_EOL; $headers .= "Content-Type: multipart/related; type=\"multipart/alternative\"; boundary=\"" ."----=MIME_BOUNDRY_main_message\"".PHP_EOL; $headers .= "X-Sender: Odesilatel <$ppn>".PHP_EOL; $headers .= "X-Mailer: PHP4".PHP_EOL; $headers .= "X-Priority: 3".PHP_EOL; $headers .= "Return-Path: <$ppn>".PHP_EOL; $message .= "------=MIME_BOUNDRY_main_message".PHP_EOL; $message .= "Content-Type: multipart/mixed; boundary=\"" ."----=MIME_BOUNDRY_message_parts\"\n\n"; $message .= "------=MIME_BOUNDRY_message_parts".PHP_EOL; $message = "------=MIME_BOUNDRY_message_parts".PHP_EOL; $message .= "Content-Type: text/html; charset=\"UTF-8\"".PHP_EOL; $message .= "Content-Transfer-Encoding: quoted-printable".PHP_EOL; $message .= "$zprava".PHP_EOL; $message .= "------=MIME_BOUNDRY_main_message".PHP_EOL; $message .= "Content-Type: application/octet-stream;\n\tname=\"" . $attachment_name . "\"".PHP_EOL; $message .= "Content-Transfer-Encoding: base64".PHP_EOL; $message .= "Content-Disposition: attachment;\n\tfilename=\"" . $attachment_name . "\"".PHP_EOL; $message .= $contents; //Zakodovana priloha $message .= "------=MIME_BOUNDRY_main_message--".PHP_EOL; //ODESLANI EMAILU if (mail($address, $subject, $message, $headers)) { print 'Email byl úspěšně odeslán.'; } else { print 'Došlo k chybě!'; } |
||
abc Profil |
#8 · Zasláno: 4. 3. 2012, 21:31:02
Kubas:
Řádek 28 změň na $message .= "------=MIME_BOUNDRY_message_parts".PHP_EOL;
Už ti to radil [#4] Davex |
||
Kubas Profil * |
#9 · Zasláno: 4. 3. 2012, 21:31:13 · Upravil/a: Kubas
P.S.: Aktuální kód (s úpravou od Davexe)
Jejda tak tu tečku sem přehlídnul. Toto vyřešilo problém s gmailem - tam už zpráva chodí normálně s diakritikou, akurát na seznamu text zprávy je v "noname" souboru v příloze.. V čem je teda ještě zakopaný pes? |
||
Davex Profil |
#10 · Zasláno: 4. 3. 2012, 22:49:21
Kubas:
Asi ignoruješ mé zbylé rady z [#2]. Navíc těď kombinuješ různé konce řádků \n a PHP_EOL - vyber si jen jednu variantu a tu používej. Také by tam neměly být těsně za sebou dva stejné řádky
$message .= "------=MIME_BOUNDRY_message_parts".PHP_EOL; |
||
Kubas Profil * |
#11 · Zasláno: 5. 3. 2012, 17:39:05
Už to jede, děkuju
|
||
Časová prodleva: 11 let
|
0