Mailer a Exchange ⇒ rozbitý email
- ATom
- Člen | 16
Na jednom webu jsem použil Nette Mailer. Vše funguje v pořádku, ale zákazník, který používá MS Exchange si stěžuje že mu úplně všechny zprávy chodí rozbité. V těle zprávy se zobrazuje i kus hlavičky. Tvrdí, že mu všechny emaily chodí v pořádku, jen z mého webu poškozené.
Nesetkal se s tím někdo?
Kolega mi poradil, že mám použít tohle, že tohle kdysi zkoušeli a že to funguje dobře i na Exchange
<?php
if ( @mail($emailTo, 'Prodejny - dotaz',
$body,
'From: ' . $contactArr['email']
. "\n" . 'Return-Path: ' . $contactArr['email']
. "\n" . 'MIME-Version: 1.0'
. "\n" . 'Content-Transfer-Encoding: 8bit'
. "\n" . 'Content-Type: text/plain; charset="utf-8"' ) ) {
?>
Nette ale také používá mail, takže musí být špatně něco v té hlavičce, co Nette vytváří, respektive asi ne špatně, ale něco co Exchange nezvládne.
- Honza Kuchař
- Člen | 1662
Ideální by bylo, kdyby se ti podařilo získat zdrojáky těch dvou e-mailů co prošly Exchangem. (rozbitý a ten co byl ok) Pošli mu ty 2 e-maily a potom mu řekni, ať ti je OBA naráz pošle. (připojí se jako příloha v originální podobě – alespoň doufám)
- ATom
- Člen | 16
No, je to opravdu tím dlouhým předmětem, on ani není tak dlouhý, ale po zakódování to vypadá takto:
Subject: =?UTF-8?Q?=C5=BD=C3=A1dost=20o=20informace=20o=20Fleet?=
=?UTF-8?Q?=20programu?=
Nette nad určitou délku řádku provede rozdělení na více řádků, a ještě na začátku toho druhého řádku udělá mezeru, což Exchange bere jako konec hlavičky a zbytek zobrazí už jako součást body.
A teď pozor. Gmail delá totéž, nicméně to přes Exchange projde!!! Z gmail to tedy vypadá nějak takto:
Subject: =?UTF-8?B?VGVzdG92YWPDrSBlbWFpbCAtIHBva3VzbsOhIHpwcsOhdmEgLSDFoWtvZGxpdsO9IG9kaw==?=
=?UTF-8?B?YXogLSDEm8WhxI3FmcW+w73DocOtw6k=?=
V tom, že používá base65 místo Quoted-Printable snad rozdíl
nebude.
Ale na tom druhém řádku udělá větší mezeru, že by to bylo tím?
Editoval ATom (18. 11. 2009 16:06)
- Patrik Votoček
- Člen | 2221
naposledy když jsem to zkoumal myslím že jsem došel ke stejnému závěru… ale kravčo asi bude vědět víc…
- piler
- Člen | 111
Zdravim,
mam podobny problem
Subject: Internal Order Confirmation - Service
=?UTF-8?Q?=20Address=20-=20Special=20Offer=20-=20=C2=A325!=20(Normal?=
=?UTF-8?Q?=20Price=20=C2=A340)=20for=20company=20"IXG=20LIMITED"?=
Vie niekto poradit, v com je problem? Da sa tomu nejak predist? dik
- Ondřej Mirtes
- Člen | 1536
Je to problém třídy Nette\Mail a maximální počet znaků závisí na tom, jestli je použita diakritika atd.
- ATom
- Člen | 16
Není to problém moc dlouhého emailu, i když je to částečné řešení, nebo spíše jen berlička. Když si z gmailu pošlete email s libovolně dlouhým předmětem plný diakritiky bude vše OK. Už jsem s tím laboroval.
Zkoušel jsem místo mezery použít tabelátor pro odsazení, jako dělá gmail a stejně je to pořád rozbité. Jediné, čím se ještě gmail liší, že místo quoted-printable používá base64.
Chtělo by to vyřešit přímo na úrovni Nette, protože Exchange je v podnikové sféře bohužel hodně rozšířený.
- David Grudl
- Nette Core | 8228
Otázka je, jestli je to skutečně v tom použití base65 místo Quoted-Printable (což se mi nezdá), nebo v délce řádku (ta by taky měla být v limitu).
- Patrik Votoček
- Člen | 2221
Problém bych řekl je úplně někde jinde.
\Nette\Mail\Mail
Subject: =?UTF-8?Q?Ahoj=20jak=20se=20m=C3=A1=C5=A1=20j=C3=A1=20se?=
=?UTF-8?Q?=20m=C3=A1m=20dob=C5=99e=20a=20co=20ty=20je=20to=20prost?=
=?UTF-8?Q?=C4=9B=20vool=20=C4=9B=C5=A1=C4=8D=20=C5=99=C4=8D=20?=
=?UTF-8?Q?=C3=AD=C4=8D=C5=99=C5=A1=C4=8D=20=C4=9B=C5=A1=C4=8D=20?=
=?UTF-8?Q?=C5=A1=C4=8D=20=C4=9B=C5=A1=C4=8D=20=C4=9B=C5=A1=C4=8D?=
=?UTF-8?Q?=C4=9B=C5=A1=C4=8D+=C5=A1=20+=C4=9B=C5=A1=C4=8D=20?=
Microsoft Exchange 2010 (Outlook 2010) – edit
Subject: =?utf-8?B?QWhvaiBqYWsgc2UgbcOhxaEgasOhIHNlIG3DoW0gZG9ixZllIGEgY28gdHkg?=
=?utf-8?B?amUgdG8gcHJvc3TEmyB2b29sIMSbxaHEjSDFmcSNIMOtxI3FmcWhxI0gxJs=?=
=?utf-8?B?xaHEjSDFocSNIMSbxaHEjSDEm8WhxI3Em8WhxI0rxaEgK8SbxaHEjSA=?=
problém bych viděl v tom že u \Nette\Mail\Mail začíná nový řádek tabulátorem kdežto u Outlooku je to mezera.
Edit: UTF-8 hlavička z Outlooku místo staré ISO
Editoval vrtak-cz (4. 12. 2009 21:43)
- ATom
- Člen | 16
Ne, tím to podle mě není, gmail taky používá tabelátor a na exchange to chodí v pořádku.
Nicméně Outlook, stejně jako jako gmail, evidentně používá base64!
Můj největší problém je, že exchange má pouze náš zákazník, ve firmě ho nemáme a tak to nemůžu moc testovat, protože to vypadá blbě, když zákazníkovy posíláme testovací emaily.
- Honza Kuchař
- Člen | 1662
A do Outlooku to chodí dobře? Nedal by se použít na testování místo Exchange? Popřípadě stáhnout a nainstalovat trial na nějaký virtuál…
- Panda
- Člen | 569
Neví někdo, u jaké verze Exchange se to projevuje? Dneska jsem se celé odpoledne mořil instalací virtuálního Exchange 2007 a zdá se, že ten je v pohodě (jako klient Outlook 2007). Když by mi zítra vyšel čas, tak bych zkusil ještě Exchange 2003.
Doufám, že jsem problémové chování správně pochopil a že předmět byl dost dlouhý.
- ATom
- Člen | 16
To bohužel nevím, zákazník to samozřejmě neví :-( A zjistit to je skoro nemožné. Vzhledem k tomu, že jde o velkou firmu bych ale typoval na starší verzi.
Předmět musí být tak dlouhý, aby se ve zdroji zprávy zalomil na druhý řádek.
Každopádně s gmailu to funguje a liší se to jen v tom, že používá base 64 místo Quoted Printable
- Panda
- Člen | 569
Zkuste se, prosím, někdo připojit k zákazníkovi, kterému to zlobí, na SMTP server (port 25) přes telnet. Hned první, co by Vám ten SMTP server měl poslat, je uvítání s názvem softwaru a v něm by se některé exchange servery měly přiznat ke své verzi. Když budeme vědět verzi, u které to blbne, bude se to lépe řešit.
- Honza Kuchař
- Člen | 1662
vvondra napsal(a):
Zkuste tohle:
otevřte MailMimePart.php a přepište:
const EOL = "\r\n";
na
const EOL = "\n";
To je dobrý nápad. :-)
- Honza Kuchař
- Člen | 1662
Nemám možnost to vyzkoušet na Exchange. Ale mě to funguje na všechny klienty co používám jak má.
- OndrejSlamecka
- Člen | 41
Potvrzeno – řešení se změnou konstanty EOL –
uvedené výše – je funkční.
Teď bohužel nemám bližší info o prostředí, kde to běží, ale
tam to problém s kódováním vyřešilo, jinde to nic
nezměnilo.
- Honza Kuchař
- Člen | 1662
tam to problém s kódováním vyřešilo, jinde to nic nezměnilo.
To jsem nepochopil. Funguje to nebo ne? :-)
- David Grudl
- Nette Core | 8228
Pokusil jsem se to opravit v poslední revizi 1.0, můžete to vyzkoušet?