Ik ben benieuwd of iemand mij in Jip en Janneke taal kan uitleggen wat "Content-Transfer-Encoding" inhoudt. Ik ben ermee aan het experimenteren, maar ik begrijp niet goed waar het voor dient. Van de uitleg op internet word ik helaas ook niet veel wijzer, want die is me veel te technisch en snap ik niet.
Als ik vanaf mijn server een mail verstuur dan kan ik "Content-Transfer-Encoding" toevoegen als header, maar ik weet niet of dat überhaupt nodig is. Als ik 'm niet toevoeg gaat het namelijk gewoon goed.
Echter, ik zie in veel mails die ikzelf ontvang Content-Transfer-Encoding op 'base64' ingesteld staan. Ik heb dat bij mijn eigen mail ook eens geprobeerd, maar dan wordt de mail totaal onleesbaar met allerlei rare vierkantjes. Als ik Content-Transfer-Encoding instel op x-token dan gaat het goed, maar als ik Content-Transfer-Encoding instel op quoted-printable dan werkt de link in de mail ineens niet meer.
Mijn vraag is ... waar dient Content-Transfer-Encoding voor? Moet ik het wel of niet instellen, en zo ja op welke waarde?
Oh ja ... Content-Type heb ik ingesteld op 'text/html; charset=utf-8'.
De content kan een andere encoding hebben dan de transfer waarin de content is verpakt. In jouw voorbeeld is dat een e-mail gecodeerd in UTF-8 die is opgenomen in een SMTP-bericht gecodeerd in Base64.
>> In jouw voorbeeld is dat een e-mail gecodeerd in UTF-8 die is opgenomen in een SMTP-bericht gecodeerd in Base64.
Probleem is dat dat dus niet werkt. Als ik Content-Transfer-Encoding instel op base 64, dan wordt de mail onleesbaar. Ik krijg dan alleen een hoop vierkantjes te zien.
Ik mis nog het antwoord óf en waarom ik Content-Transfer-Encoding zou moeten gebruiken. Als ik het niet gebruik, dan gaat het gewoon goed. Als ik het instel op x-token dan gaat het ook goed. Maar ik weet nu dus niet wat ik moet doen. Moet ik het überhaupt instellen, en zo ja ... op welke waarde?
De hoofdreden is dat Base64 gewoon in ASCII gecodeerd is en je daarmee problemen met karaktersets voorkomt. Vroegâh kon je voor de zekerheid zo zelfs cookies beter in ASCII coderen. Maar of dat nog steeds opgaat?
De encoding wordt gebruikt om mails te encoden, bijvoorbeeld met quoted-printable of de eerder genoemde base64. De header zelf geeft aan in welke encoding je je data gezet hebt, een plaatje zal bijvoorbeeld base64 zijn, tekst meestal quoted-printable. Sterker nog: wanneer je je tekst elementen met base64 encoding doet wordt deze eerder opgepikt door spamfilters als ongeldig.
Lang verhaal kort: als je niet weet waar het voor dient, gewoon niet gebruiken.
>> Lang verhaal kort: als je niet weet waar het voor dient, gewoon niet gebruiken.
Oké ... dus ik hoef én mijn bericht niet te encoden én dus ook geen Content-Transfer-Encoding in te stellen? Correct?
>> tekst meestal quoted-printable
Als ik dit gebruik bij html tekst, dan is m'n links niet meer aanklikbaar. De html-tags worden blijkbaar dus gestript. Kan dat kloppen? Is dit dan wel geschikt (en nodig?) voor plain tekst? Of ook niet?
Het zou bij normale HTML gewoon moeten werken, maar je moet ook coderen *als* quoted-printable. Je kunt niet gewoon een Content-Transfer-Encoding header toevoegen, je moet de encoding ook uitvoeren. De header is niet meer dan informatie voor de client, die de content moet decoden.
>> Het zou bij normale HTML gewoon moeten werken, maar je moet ook coderen *als* quoted-printable.
Ah oke ... ik heb dus mijn html ... die moet ik dus coderen als quoted-printable, en vervolgens kan ik dan die Content-Transfer-Encoding toepassen. Tot zover volg ik het.
Maar er schieten me dan 2 vragen binnen ...
1) Waarom moet ik mijn html coderen als quoted-printable (wat is het voordeel t.o.v. als ik het niet doe.
2) Dat encoden gaat dan gewoon als volgt $message = quoted_printable_encode() neem ik aan? En hoef ik dan geen wordwrap meer toe te passen?
Het encoden is nodig om te voorkomen dat je client verward raakt over je mime boundaries, non printable characters etc. Hier zijn hele standaarden over geschreven. Zie RFC 2045 en RFC 2046.
En ja, als het goed is is quoted_printable_encode() hier prima voor geschikt.
Oké ... maar wat is dan de beste aanpak. Wat zijn de te nemen stappen? Ik heb eens quoted_printable_encode toegepast op plain tekst, en nu hakt ie m'n tekst in stukken op plekken waar het niet moet. Dat lijkt me niet kloppen.
Laat ik mijn vraag heel simpel stellen. Ik wil een mail versturen met html en plain test gescheiden door een boundary. Dat gaat allemaal goed. Is het verstandig om de html en de plain tekst te coderen, of is dat niet nodig? En als het wel nodig is, welke encoding gebruik ik dan het beste voor html en welke voor plain tekst?