Na lang zoeken heb ik niks gevonden om de waarde in TXT of XML te krijgen, wat je tegen komt is bestanden uploaden.
Waar ik opzoek naar ben is dat je ingevulde waar in TXT of XML krijgt, het formulier maakt zelf bestand aan en dat wordt als een bijlagen mee verstuurt.
Moeilijk is precies wat ik wilde hebben. Ik heb zelf getest en doet precies wat die hoort te doen.
Hij stuurt eerst een bestand van host, als dat bestand niet bestaat dan komt text als inhoud in de bestand.
Wat raar aan is als ik stukje van dat script bij mij zelf plaats dan komen die texten als HTML aan.
<?php
//maak een hash met datum en tijd
$random_hash = md5(date('r', time()));
$headers .= "\r\nContent-Type: multipart/mixed;
boundary=\"PHP-mixed-".$random_hash."\"";
//bestand van hosting pakken
$attachment = chunk_split(base64_encode(file_get_contents('contactformulier.txt')));
$message = "--PHP-mixed-$random_hash\r\n"."Content-Type: multipart/alternative;
boundary=\"PHP-alt-$random_hash\"\r\n\r\n";
$message .= "--PHP-alt-$random_hash\r\n"."Content-Type: text/plain;
charset=\"iso-8859-1\"\r\n"."Content-Transfer-Encoding: 7bit\r\n\r\n";
//begin html
HTML
//einde html
$message .="\r\n\r\n--PHP-alt-$random_hash--\r\n\r\n";
//bijlage
$message .= "--PHP-mixed-$random_hash\r\n"."Content-Type: application/zip;
name=\"contactformulier.txt\"\r\n"."Content-Transfer-Encoding:
base64\r\n"."Content-Disposition: attachment\r\n\r\n";
$message .= $attachment;
$message .= "/r/n--PHP-mixed-$random_hash--";
?>
Edit: PHP tags bijgedaan..
Content-Type: multipart/mixed; boundary="PHP-mixed-b4227bf81f6c40b31bca5dd2d4681318" --PHP-mixed-b4227bf81f6c40b31bca5dd2d4681318 Content-Type: multipart/alternative; boundary="PHP-alt-b4227bf81f6c40b31bca5dd2d4681318" --PHP-alt-b4227bf81f6c40b31bca5dd2d4681318 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit
HTML van bericht komt hier tussen!!
--PHP-alt-b4227bf81f6c40b31bca5dd2d4681318-- --PHP-mixed-b4227bf81f6c40b31bca5dd2d4681318 Content-Type: application/zip; name="contactformulier.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment /r/n--PHP-mixed-b4227bf81f6c40b31bca5dd2d4681318--
Ugh... Als je je PHP kennis wilt opschroeven is het handmatig opbouwen van MIME mails wellicht niet het beste startpunt.
Daarnaast, het kan aan mij liggen, maar je bent ontiegelijk vaag in je bewoordingen. Ook is niet duidelijk waar je op dit moment vastloopt?
Je tekst komt als plaintext aan? Zo verstuur je het ook (text/plain), zoals Aar aangeeft.
Je toont je (rauwe) mail source: daarin staan de slashes verkeerd: /r/n.
Daarnaast is je attachment leeg? Dat zou goed kunnen want:
- je geeft geen pad aan bij file_get_contents(); het lijkt mij ook zeer onwensenlijk dat je bestanden kunt uploaden op dezelfde plaats als waar dat script staat, als dat aan de orde is
- grote kans dat file_get_contents() false teruggeeft, maar dan chunk_split() - daar is het de vraag of je "\r\n" als end-parameter (3e parameter wilt gebruiken)
Heb je al eens geprobeerd om $attachment, of $message for that matter, te dumpen voordat je deze verstuurt? Dat lijkt mij fijner debuggen dan aan de ontvangstkant kijken wat er misgaat... Mogelijk heb je witregels in je base64-encoded attachment?
- je boundaries zijn niet bepaald leesbaar, wat het niet makkelijker maakt om eea te debuggen, stop deze in een array die je als "stack" gebruikt (de nesting van je boundaries moet kloppen)
Het bovenstaande snippet is ook niet het hele script van start opbouw t/m verzenden dus... geen idee wat er misgaat. Je geeft ons de halve puzzel zonder duidelijke vragen, sja... Wat verwacht je precies?
Dus maak het je zelf (en ons) makkelijk en schoon je script eens wat op, en kom met een duidelijk verhaal en duidelijke vragen.
@Thomas:
"\r\n\r\n" stond er al en het werkte bij die script vandaar dat ik niks aan heb veranderd.
Inmiddels ben ik verder gekomen. Als ik "$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";" boven aan header plaats dan is hele email in plaint-text en bijlage krijgt base64 code.
Kijk nog eens goed, er staat /r/n (fout) niet \r\n (goed/beter).
Verder is een correcte opbouw bijvoorbeeld:
In je headers:
multipart/mixed, boundary X declaratie
In je body:
--boundary X
multipart/alternative, boundary Y declaratie
--boundary Y
text/plain declaratie
<hier je PLAINTEXT body>
--boundary Y
multipart/related, boundary Z declaratie
--boundary Z
text/html declaratie
--boundary Z
hier eventueel nog inline images enzo
--boundary Z--
--boundary Y--
--boundary X
attachment declaratie
... je attachment(s) ...
--boundary X--
Hierbij is het vooral belangrijk dat als je klaar bent met je declaraties dat je een regel wit hebt. Daarnaast moeten boundaries echt unieke namen hebben. In plaats van multipart/related zou je ook gewoon text/html kunnen doen.
Je zou bijvoorbeeld voor een boundary een functie kunnen gebruiken:
<?php
function generate_boundary() {
return uniqid(php_uname('n'));
}
?>
Je zegt dat je geen attachments hebt, heb je al gecontroleerd of $attachment inhoud heeft?
$message .= "/r/n--PHP-mixed-$random_hash--"; geeft netjes inhoud maar dan komt dat in bericht zelf in plaats van bestand, ik krijg geen bijlage d`r bij terwijl dat hoort te doen.