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-- 

Edit: EMAIL resultaten
Hoe zien de headers van de mail eruit in je mail-client?
Als ik via GMAIL in broncode kijk dan is niks zichtbaar, hun hebben heel onoverzichtelijk gemaakt vergeleken met HOTMAIL.

Als ik text selecteer en daarna naar kijk dan zie ik dit er staan.


Content-Type: multipart/mixed; boundary="PHP-mixed-<wbr>f691646bbd471378dd00874cfdcec7<wbr>d4"

--PHP-mixed-
Content-Type: multipart/alternative; boundary="PHP-alt-"

--PHP-alt-
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit



--PHP-alt---

--PHP-mixed-
Content-Type: application/zip; name="contactformulier.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment

/r/n--PHP-mixed---
</div>
Je ziet dus de verwerkte HTML? Of puur de HTML-codes?
De mail wordt als plain text verstuurd, zie ik.
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.
@Aar: Normaal heb ik in HTML.

@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.
--PHP-alt--- --PHP-mixed- Content-Type: application/zip; name="contactformulier.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment PT09PT0gQkVHSU4gWE1MIFZFUlNJRSA9PT09PQoKPD94bWwgdmVyc2lvbj0iMS4wIj8+CjxvcmRl cj4KPHJlc3RhdXJhbnQ+CjxyZXN0YXVyYW50aWQ+eycuJHJlc3RhdXJhbnRfbmFtZS4nfTwvcmVz dGF1cmFudGlkPgo8L3Jlc3RhdXJhbnQ+CjxjdXN0b21lcj4KPG5ld2N1c3RvbWVyPjwvbmV3Y3Vz dG9tZXI+CjxjdXN0b21lcmJ1c2luZXNzbmFtZT48IVtDREFUQVtPUkRFUklEIE1PRVQgTk9HIFZB TiBISUVSIFdFRyEnLiRmaW5hbG9yZGVyaWQuJ11dPjwvY3VzdG9tZXJidXNpbmVzc25hbWU+Cjxj dXN0b21lcm5hbWU+PCFbQ0RBVEFbJy4kcmVzX29yZGVyWycwJ11bJ2N1c3RvbWVybmFtZSddLiIg Ii4kcmVzX29yZGVyWycwJ11bJ2N1c3RvbWVybGFzdG5hbWUnXS4nXV0+PC9jdXN0b21lcm5hbWU+ CjxmaXJzdG5hbWU+PCFbQ0RBVEFbJy4kcmVzX29yZGVyWycwJ11bJ2N1c3RvbWVybmFtZSddLidd XT48L2ZpcnN0bmFtZT4KPGxhc3RuYW1lPjwhW0NEQVRBWycuJHJlc19vcmRlclsnMCddWydjdXN0 b21lcmxhc3RuYW1lJ10uJ11dPjwvbGFzdG5hbWU+CjxjdXN0b21lcnRlbGVwaG9uZT4nLiRyZXNf b3JkZXJbJzAnXVsnY3VzdG9tZXJjZWxscGhvbmUnXS4nPC9jdXN0b21lcnRlbGVwaG9uZT4KPC9j dXN0b21lcj4KPGRlbGl2ZXJ5YWRkcmVzcz4KPHN0cmVldD48IVtDREFUQVsnLiRyZXNfb3JkZXJb JzAnXVsnZGVsaXZlcnlzdHJlZXQnXS4nXV0+PC9zdHJlZXQ+Cjxob3VzZW51bWJlcj48IVtDREFU QVsnLiRyZXNfb3JkZXJbJzAnXVsnZGVsaXZlcnlkb29ybnVtYmVyJ10uJ11dPjwvaG91c2VudW1i ZXI+Cjxwb3N0Y29kZT4nLiRyZXNfb3JkZXJbJzAnXVsnZGVsaXZlcnl6aXAnXS4nPC9wb3N0Y29k ZT4KPGNpdHk+PCFbQ0RBVEFbJy4kcmVzX29yZGVyWycwJ11bJ2RlbGl2ZXJ5YXJlYSddLiIgIi4k cmVzX29yZGVyWycwJ11bJ2RlbGl2ZXJ5Y2l0eSddLiddXT48L2NpdHk+CjwvZGVsaXZlcnlhZGRy ZXNzPgo8b3JkZXJkYXRlPicuJHJlc19vcmRlclsnMCddWydvcmRlcmRhdGUnXS4nPC9vcmRlcmRh dGU+CjxkZWxpdmVyeT5UUlVFPC9kZWxpdmVyeT4KPGRlbGl2ZXJ5dGltZT4nLiRkZWxpdmVyeVRp bWUuJzwvZGVsaXZlcnl0aW1lPgo8cGF5ZGV0YWlscz4KPHBheXNleGFjdD5mYWxzZTwvcGF5c2V4 YWN0Pgo8YWx0ZXJuYXRpdmVhbW91bnQ+PC9hbHRlcm5hdGl2ZWFtb3VudD4KPGVsZWN0cm9uaWNh bGx5cGFpZD5mYWxzZTwvZWxlY3Ryb25pY2FsbHlwYWlkPgo8cGF5bWVudG1ldGhvZCBpZD0iJy4k dHJhc25zSWRfZGV0YWlscy4nIj48IVtDREFUQVsnLiRwYXltZW50X3R5cGUuJ11dPjwvcGF5bWVu dG1ldGhvZD4KPC9wYXlkZXRhaWxzPgo8Y3VzdG9tZXJyZW1hcmtzPjwhW0NEQVRBWycuJGluc3Ry dWN0aW9uLiddXT48L2N1c3RvbWVycmVtYXJrcz4KPHByb2R1Y3RzPgo8cHJvZHVjdD4KPHByb2R1 Y3RpZD48L3Byb2R1Y3RpZD4KPG51bWJlcj48L251bWJlcj4KPG5hbWU+PCFbQ0RBVEFbJy4kbWVu dWRldGFpbHMuJ11dPjwvbmFtZT4KPHByaWNlPjwvcHJpY2U+CjxzaWRlZGlzaGVzPgo8c2lkZWRp c2hpZD48L3NpZGVkaXNoaWQ+Cjwvc2lkZWRpc2hlcz4KPHNpZGVkaXNoZXNpbmZvPgo8c2lkZWRp c2g+CjxpZD48L2lkPgo8bmFtZT48L25hbWU+CjxwcmljZT48L3ByaWNlPgo8L3NpZGVkaXNoPgo8 L3NpZGVkaXNoZXNpbmZvPgo8L3Byb2R1Y3Q+CjwvcHJvZHVjdHM+CjxkaXNjb3VudHM+CjxkaXNj b3VudD4KPGRpc2NvdW50bmFtZT48L2Rpc2NvdW50bmFtZT4KPGRpc2NvdW50cHJpY2U+Jy4kb2Zm ZXJkZXRhaWxzLic8L2Rpc2NvdW50cHJpY2U+CjwvZGlzY291bnQ+CjwvZGlzY291bnRzPgo8YW1v dW50cz4KPHN1YnRvdGFsPicubnVtYmVyX2Zvcm1hdCgkb3JkZXJTdWJUb3RhbCwyKS4nPC9zdWJ0 b3RhbD4KPGRlbGl2ZXJ5Y29zdHM+Jy4kZGVsaXZlcnljaGFyZ2UuJzwvZGVsaXZlcnljb3N0cz4K PHRvdGFsPicubnVtYmVyX2Zvcm1hdCgkb3JkZXJHcmFuZFRvdGFsLDIpLic8L3RvdGFsPgo8L2Ft b3VudHM+CjxSZXR1cm5DYWxsPjwhW0NEQVRBW11dPjwvUmV0dXJuQ2FsbD4KPC9vcmRlcj4KCj09 PT09IEVJTkRFIFhNTCBWRVJTSUUgPT09PT0= /r/n--PHP-mixed--- 


Als ik onder header regels heb dan krijg ik netjes HTML code zonder base64 code.
--PHP-alt--- --PHP-mixed- Content-Type: application/zip; name="contactformulier.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment /r/n--PHP-mixed---


Dit is mij header

$random_hash = md5(date('r', time()));
From
X-Sender
Reply-To
Content-Type
Return-Path
Error-To
X-Mailer
MIME-Version
\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"


Als ik zo naar kijk lijkt dat alles goed werkt, alleen ik krijg geen bijlage in de mail zelf.
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?

//include attachment
$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--";


$message .= $attachment; is niet meer nodig want script maakt zelf bestand aan dat is stukje beter dan van host pakken.


//include attachment
$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 .= "/r/n--PHP-mixed-$random_hash--";


$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.


<?php
$to = "email"; //Recipient Email Address

$subject = "Test email with attachment"; //Email Subject

$headers = "From: [email protected]\r\nReply-To: [email protected]";

$random_hash = md5(date('r', time()));

$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";

//include attachment
$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 .= "dit is inhoud van txt";

//send the email
$mail = mail( $to, $subject , $message, $headers );

echo $mail ? "Mail sent" : "Mail failed";
?>

Reageren