multipart e-mail met toevoegingen "3D"

Status
Niet open voor verdere reacties.

MartineT

Gebruiker
Lid geworden
14 jan 2009
Berichten
6
Ik heb een PHP-script gemaakt waarmee ik een e-mail verstuur. Dit wil ik mooi opgemaakt doen, met html. Om aan allerlei normen te voldoen, moet het een multipart mailtje worden, met boundary's. Dan heb je een kale tekstversie en een html-versie in één mailtje. Dat lukt inmiddels prima (na veel experimenteren), maar nu is er iets geks met tags in de code van het mailtje.

Als ik bijvoorbeeld een link wil maken:
Code:
<a href="http://www.google.nl/search?hl=nl&q=multipart">klik hier</a>

dan komt het mailtje verminkt aan. De link is z'n variabelen kwijt en bovendien de eerste h:
Code:
<a href="ttp://www.google.nl/search?hl=">klik hier</a>

Door de broncode van andere mailtjes te bestuderen, ontdekte ik dat vaak achter het =-teken de toevoeging 3D is gezet. Dus:
Code:
<a href=3D"http://www.google.nl/search?hl=3Dnl&q=3Dmultipart">klik hier</a>

Proefondervindelijk vastgesteld, dat met die toevoeging "3D" het mailtje op veel manieren keurig wordt ontvangen als multipart mailtje (text-versie in de spamkiller en html-versie in Outlook), maar een geadresseerde met een iPhone ziet helemaal niets en zegt dat die broncode met 3D niet deugt. En

Heeft iemand een idee wat er aan de hand is?
 
Het lijkt erop dat er ergens een escape functie gebruikt wordt, aangezien %3D het "geescapete" equivalent van = is.
 
Ja daar lijkt het op. Maar waarom moet dat?
Hoe kan het dat de links in het mailtje alleen maar werken met die 3D-toevoeging achter het =-teken?
 
Dat weet ik zo niet. Kun je eens de code posten waarmee je de mails verstuurd?

Daarnaast kan ik je aanraden, om een standaardclass te gebruiken (ik raad je Swiftmailer aan) om ze te verzenden. Die zorgt automatisch voor de juiste headers en je kunt er ook makkelijk multiparts mee verzenden.
 
Ik zal de details besparen, want die doen hier echt niet ter zake.
In een lang script worden headers en message samengesteld.

Hierin staat o.a.:

Code:
      $recipient = "pietje.puk@hotmail.com";
      $afz       = "De website <noreply@domeinnaam.nl>";
      $replyto   = "noreply@domeinnaam.nl";

      $boundary  = "----=_NextPart_123";


      $headers .= "Return-Path: $replyto\r\n";
      $headers  = "From: $afz\r\n";
      $headers .= "Reply-To: $replyto\r\n";
      $headers .= "Message-Id: <".md5(rand(1000,200000))."@domeinnaam.nl>\r\n";
      $headers .= "X-Mailer: PHP/" . phpversion() . "\r\n";
      $headers .= "MIME-Version: 1.0\r\n";
      $headers .= "Content-Type: multipart/alternative; ";
      $headers .= " boundary=\"$boundary\";\n";
      $headers .= "Status: O\n";

      $subject  = "De Website - tussenstand";

      // sectie met pure tekst
      $message  = "--$boundary\n";
      $message .= "Content-Type: text/plain; charset=iso-8859-1\n";
      $message .= "Content-Transfer-Encoding: quoted-printable\n\n";
      $message .= " Waarschijnlijk kan uw mailprogamma geen html weergeven. ";
      $message .= " Daarom ziet u dit bericht in de kale tekstversie. \n\n";
      $message .= " Er is iets nieuws te zien op De Website. \n";
      $message .= " http://www.domeinnaam.nl/index.php?pag=3D7\n";
      $message .= " \n";
      $message .= " ________________________________________\n";
      $message .= " Vriendelijke groet,\n";
      $message .= " De webmaster.\n";


      // sectie in html
      $message .= "--$boundary\n";
      $message .= "Content-Type: text/html; charset=iso-8859-1\n";
      $message .= "Content-Transfer-Encoding: quoted-printable\n\n";
      $message .= "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" ";
      $message .= "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
      $message .= "<HTML>\n";
      $message .= "<HEAD>\n";
      $message .= "<LINK HREF=3D\"http://www.domeinnaam.nl/style.css\" ";
      $message .= "REL=3D\"stylesheet\" ";
      $message .= "TYPE=3D\"text/css\">\n";
      $message .= "</HEAD>";

      $message .= "<BODY>\n";
      $message .= " <img src=3D'http://www.domeinnaam.nl/logo.png' ";
      $message .= "width=3D'641' height=3D'128' border=3D'0'>";
      $message .= " <BR>\n";
      $message .= " <BR>\n";
      $message .= " Beste $nm,<BR>\n";
      $message .= " <BR>\n";


      $message .= " Er is iets nieuws te zien op <B>De Website</B>. ";

      $message .= " <a href=3D'http://www.domeinnaam.nl/index.php?pag=3D7'>";
      $message .= " <B>Klik hier om het bericht te bekijken.</B></a><BR>\n";
      $message .= " <BR>\n";
      $message .= " Als bovenstaande link niet werkt, kopieer dan dit adres naar je webbrowser:<BR>\n";
      $message .= " http://www.domeinnaam.nl/index.php?pag=3D7<BR>\n";
      $message .= " <BR>\n";
      $message .= " <BR>\n";

      $message .= " <BR>\n";

      $message .= " Vriendelijke groet,<BR>\n";
      $message .= " De webmaster.<BR>\n";
      $message .= " <BR>\n";
      $message .= "</BODY></HTML>\n";
      $message .= "--$boundary--\n";


Daarna wordt het bericht verzonden met de PHP-opdracht:

Code:
      if (@mail($recipient, $subject, $message, $headers))
      {
        print "<br><br>Het bericht is verzonden<br><br>";
      }

Dit werkt. Maar als ik de toevoegingen "3D" verwijder (waarmee het weer echte html zou worden), valt het mailtje uit model: het stylesheet wordt niet meer gevonden, de linkjes missen hun kop en staart enzovoort.

Waarom moet ik die "3D" steeds toevoegen?
 
Het mysterie is nog niet opgelost

Ik maak alles zelf (via kladblok en PHP), dus zonder hulp van een bestaand pakket.

Ik schreef al dat het multipartmailtje met die vreemde "=3D" toevoegingen eigenlijk wel werkt, maar ben nog steeds benieuwd waarom deze toevoegingen nodig zijn. Ik heb namelijk nergens kunnen vinden dat het zo moet (behalve door de code van een bestaand mailtje te analyseren).

Als iemand het weet, mag hij het zeggen!
 
Bedankt, ik zal die wikipagina bij m'n favorieten zetten voor als ik nóg eens een mailscript moet maken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan