Rodělení předmětu mailu v Nette\Web\Mail na dvě části
- stekycz
- Člen | 152
Odpověď na svou otázku jsem hledal v tématu Bug v Nette\Web\Mail , ale odpověď jsem úplně nenašel :( Mám verzi 0.9.2 b9fd602 released on 2009–11–12 (podle Profileru).
Problém je (respektive byl) v tom, že po nějaké délce předmětu byl
text rozdělen a kódování pro správné zobrazení bylo započato odznova,
tudíž se opravdu opět dostala část kódovaného předmětu do těla
e-mailu. Mezery místo znaku „\t“ jsem již ověřoval, ale vše je OK.
Změnil jsem si konstantu LINE_LENGTH
na hodnotu 200 (pro jistotu)
a už je vše OK, ale nejsem si jistý, z jakého důvodu byla nastavena
na 74.
Mířím tím k dotazu, zda-li je to správně. Pochopil bych délku 74 v případě, že by se délka textu porovnávala před přídáním znaků specifikujících kódování. Ale vzhledem k tomu, že znaky s diakritikou jsou nahrazeny více znaky, dochází k výraznému prodloužení.
Změnil jsem si to já z nějakého důvodu špatně? Popřípadě má někdo nějaký návrh, jak to opravit lépe? Díky
- vkuzel
- Člen | 15
Ahoj,
aniž bych zkoumal kód Web/Mail tak usuzuji, že délka řádku 74 znaků je nastavena kvůli splnění rfc2045 kapitola 6.7, bod (5) http://tools.ietf.org/html/rfc2045 .
To rfc říká něco ve smyslu, že délka kódovaného řetězce v mailu nesmí přesáhnout 76 znaků a pokud jej přesáhne, musí být rozdělen na bloky maximální délky 76 znaků pomocí oddělovačů nových řádků. Plus je tam samozřejmě dalších milion omezení, ale tede se evidentně týká toto.
Skoro žádný mailový server tyhle limity rfc nedodržuje, takže s největší pravděpodobností nebudeš mít problém s tím, že by ti některý z nich tvé 200 znakové řádky nepřijal, ale samozřejmě to nelze vyloučit.
Na tvém řešení je ale slabší fakt, že jsi nevyřešil problém, ale pouze ho obešel. Může se snadno stát, že zakódovaný předmět zprávy bude mít více než 200 znaků a jsi tam, kde jsi byl před změnou limitu. To, že se subjekt objevuje v těle zprávy je problém a určitě by stálo za to, prozkoumat, jestli se tak děje, když mail posíláš na různé mailové servery (zkus si například zaregistrovat pár freemailových účtů na různých službách), zda-li není něco v nepořádku s tvým odesílacím démonem (tím co stojí za příkazem sendmail), či zda-li není něco v nepořádku s mailovací knihovnou Nette.
Editoval vkuzel (15. 3. 2010 11:21)
- lutor
- Člen | 27
Zdravím, narazil jsem na podobný problém: Mailer hází InvalidStateException: Newlines aren't allowed in the Subject header.
Dumpnul jsem si obsah parametrů, které se posílají ve finále při odesíláni do funkce mail :
string(82) "=?UTF-8?B?WmtvdcWha2EgcMWZZWRtxJt0dSBvZGVzw61sw6Fuw60gZS0=?=
=?UTF-8?B?bWFpbMWv?="
- tohle je právě onen předmět (měla by to být zakódovaná věta „Zkouška předmětu odesílání e-mailů“). Když z předmětu smažu třeba slovo „předmětu“ (čímž se nejspíš jeho délka zkrátí pod oněch 74 znaků) tak vše funguje a e-mail se v pohodě odešle.
Změnil jsem konstantu LINE_LENGTH
na 1000 (obecně jakékoliv
vysoké číslo), ale i přesto to pořád hází stejnou chybu. Nevíte, kde
by mohla být chyba?
Použivám Nette 1.0-dev rev. 913fbaf released on 2010–06–08, odesílání testuji na webdum.com
Díky.