[PHP] Mailen met attachment

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Shift
  • Registratie: Augustus 2000
  • Laatst online: 16-06 11:48

Shift

[] Dual crazy []

Topicstarter
Hi,

Ik ben bezig met een mail script die ook een attachment lust :)
Ik ben 2 dagen bezig maar ik kom er niet uit. De script mailt de email met attachment alleen de inhoud van de attachment bevat de tekst die ik er bij gemaild hebt :? hoe het kan is mij een raadsel. Ik heb zend.com doorgespit voor meer info over multipart email, volgens mij klopt de structuur wel, alleen het werkt niet echt lekker. De code ziet als volgt uit.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$alici = "iemand@ergens.nl";
$mesaj = "Dit is de mail tekst";
$konu = "Test bestand";
$cvfile_name = $_FILES["file"]["name"];
$data = fread(fopen($_FILES["file"]["tmp_name"], "r"), filesize($_FILES["file"]["tmp_name"]));
$type = $_FILES["file"]["type"];

# Attachmenti base64 ile kodlanmali 
$attachment = chunk_split(base64_encode($data));
$boundry = "-----=".md5(uniqid (rand()));

$header  = "From: Sollicitatie formulier <kebap@kebap.com.tr>\r\n";    
$header .= "To: $alici\r\n";    
$header .= "Subject: $konu\r\n";
$header .= "Date: Wed, 23 Jul 2003 19:52:35 +0200\r\n";
$header .= "Message-ID: <000001c35143$36542a10$0c2dfea9@oguzpc>\r\n";
$header .= "MIME-Version: 1.0\r\n";    
$header .= "Content-Type: multipart/mixed; \n\tboundary=\"$boundry\"\r\n";
$header .= "X-Priority: 3\r\n";
$header .= "X-Envelope-To: <$alici>\r\n";
$header .= "X-Envelope-From: <test@netfront.nl>\r\n";
$header .= "X-Mailer: Netfront mailserver\r\n";

$body  = "This is a multi-part mesaj in MIME format.\n\n";
$body .= "--$boundry\n";    
$body .= "Content-Type: text/plain; \n\tcharset=\"us-ascii\"\n";    
$body .= "Content-Transfer-Encoding: 7bit\n\n";     
$body .= "$mesaj\n\n";    
$body .= "--$boundry\n";
$body .= "Content-Type: $type;\tname=\"$cvfile_name\"\n";
$body .= "Content-Transfer-Encoding: base64\n";     
$body .= "Content-Disposition: attachment; filename=\"$cvfile_name\"\n\n";
$body .= $attachment;
$body .= "--$boundry--\n";

[ Voor 196% gewijzigd door Shift op 23-07-2003 23:42 ]


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Je boundaries zijn verkeerd. In je rfc822 header geef je op:
boundary=jouwboundary

in de body beginnen boundaries met --, dus:

--jouwboundary

en je sluit de mail af met:

--jouwboundary--

Acties:
  • 0 Henk 'm!

  • Shift
  • Registratie: Augustus 2000
  • Laatst online: 16-06 11:48

Shift

[] Dual crazy []

Topicstarter
Ook al is de boundrys aangepast klopt het niet helaas :(

Acties:
  • 0 Henk 'm!

Verwijderd

Waarom zet je alles in de header ??
Kun je ook ff de plain text versie van de ontvangen mail posten, dan is het altijd makkelijker te zien waar het fout gaat :)

[ Voor 65% gewijzigd door Verwijderd op 23-07-2003 21:40 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Regel 17:
$header .= "Content-Type: multipart/mixed;\tboundary=\"XX-1234DED00099A\"\n";

regel 18 verwijderen.
Zou het moeten zijn volgens mij.

Acties:
  • 0 Henk 'm!

  • Shift
  • Registratie: Augustus 2000
  • Laatst online: 16-06 11:48

Shift

[] Dual crazy []

Topicstarter
Code is aangepast, maar toch blijft dezelfde probleem.

Acties:
  • 0 Henk 'm!

Verwijderd

De Content informatie bij je attachment zou volgens mij ook het volgende moeten zijn:

$header .= "Content-Type: $type;\tname=\"$cvfile_name\"\n";
$header .= "Content-Transfer-Encoding: base64\n";
$header .= "Content-Disposition: attachment; filename=\"$cvfile_name\"\n\n";

Acties:
  • 0 Henk 'm!

  • Shift
  • Registratie: Augustus 2000
  • Laatst online: 16-06 11:48

Shift

[] Dual crazy []

Topicstarter
Dat veranderd ook niets helas, ik krijg nog steeds de "Dit is de mail tekst" in de attachment. echt maf is dit

Acties:
  • 0 Henk 'm!

Verwijderd

Heb je je attachment wel als MIME base64 gecodeerd?

Acties:
  • 0 Henk 'm!

  • Shift
  • Registratie: Augustus 2000
  • Laatst online: 16-06 11:48

Shift

[] Dual crazy []

Topicstarter
Verwijderd schreef op 23 July 2003 @ 22:10:
Heb je je attachment wel als MIME base64 gecodeerd?
:) Dat is toch boven te zien
PHP:
1
$attachment = chunk_split(base64_encode($data));


ik heb ook de originele ontvangen email met de indeling dus

http://www.whatsup.nl/mail.txt

[ Voor 17% gewijzigd door Shift op 23-07-2003 22:16 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ok sorry mijn fout. Overheen gelezen.

Acties:
  • 0 Henk 'm!

Verwijderd

Tussen regel 29 en 30 nog een \n meegeven??

Euh regel 29 en 31

[ Voor 21% gewijzigd door Verwijderd op 23-07-2003 22:17 ]


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
je moet je text/plain gedeelte wel eindigen met \n anders begint je boundary niet aan het begin van de lijn.

edit:

hehe net te laat.

[ Voor 15% gewijzigd door stekkel op 23-07-2003 22:18 ]


Acties:
  • 0 Henk 'm!

  • Shift
  • Registratie: Augustus 2000
  • Laatst online: 16-06 11:48

Shift

[] Dual crazy []

Topicstarter
Verwijderd schreef op 23 juli 2003 @ 22:16:
Tussen regel 29 en 30 nog een \n meegeven??

Euh regel 29 en 31
Ik heb het gedaan zoals
PHP:
1
$header .= "--$boundry\n\n";

of
PHP:
1
2
$header .= "--$boundry\n";
$header .= "\n";

Dus 2 keer \n en als iemand zegt dat ik \r\n moet gebruiken, heb ik ook toegepast voor de hele header, dat werkt ook niet.

[ Voor 10% gewijzigd door Shift op 23-07-2003 22:22 ]


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
dat is fout.
Na $mesag moet je \n mee geven, dus voor dat je --$boundary print.

PHP:
1
2
3
4
5
6
7
8
9
$body .= "$mesaj\n";    
$body .= "--$boundry\n";
$body .= "Content-Type: $type;\n";
$body .= "\tname=\"$cvfile_name\"\n";
$body .= "Content-Transfer-Encoding: base64\n";     
$body .= "Content-Disposition: attachment\n";
$body .= "\tfilename=\"$cvfile_name\"\n\n";
$body .= $attachment;
$body .= "--$boundry--\n";


En merk net op dat je je attachement met je header mee stuurd wat natuurlijk helemaal fout is.
Header is de rfc822 header en body is alles na deze header. Wijzig dat dus ook maar.

vanaf regel 23 bigint dus wat jij $mesag noemt. Ik noem dat $body.

[ Voor 144% gewijzigd door stekkel op 23-07-2003 22:28 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Shift schreef op 23 July 2003 @ 22:13:
[...]

ik heb ook de originele ontvangen email met de indeling dus

http://www.whatsup.nl/mail.txt
In de mail.txt staat alles zonder lege regels ertussen.
Er zijn een hoop mailservers die hiermee geen genoegen nemen.

Acties:
  • 0 Henk 'm!

  • Shift
  • Registratie: Augustus 2000
  • Laatst online: 16-06 11:48

Shift

[] Dual crazy []

Topicstarter
Hmm, voor de duidelijkheid ik heb ook de $body .= "$mesaj\n";
ik krijg de mail met de attachment alleen de tekst van de email die staat in de attachment

Acties:
  • 0 Henk 'm!

  • Kwai_gon_jinn
  • Registratie: Januari 2001
  • Niet online

Kwai_gon_jinn

[-geen icon-]

op regel 12 zit nog een foutje

er staat $header .= maar moet $header = zijn..
omdat het begin van de var $header is.. en de rest eraan word "geplakt"

Confucius said: "In ancient time, learning was for self. Nowadays learning is for others."


Acties:
  • 0 Henk 'm!

  • Shift
  • Registratie: Augustus 2000
  • Laatst online: 16-06 11:48

Shift

[] Dual crazy []

Topicstarter
Kwai_gon_jinn schreef op 23 July 2003 @ 22:35:
op regel 12 zit nog een foutje

er staat $header .= maar moet $header = zijn..
omdat het begin van de var $header is.. en de rest eraan word "geplakt"
Dat veranderd niets.

[ Voor 6% gewijzigd door Shift op 23-07-2003 22:59 ]


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Doe dit nu eens:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$body = "This is a multi-part mesaj in MIME format.\n\n";     
$body .= "--$boundry\n";
$body .= "Content-Type: text/plain;\n";
$body .= "\tcharset=\"us-ascii\"\n";    
$body .= "Content-Transfer-Encoding: 7bit\n\n";     
$body .= "$mesaj\n";
$body .= "--$boundry\n";
$body .= "Content-Type: $type;\n";
$body .= "\tname=\"$cvfile_name\"\n";
$body .= "Content-Transfer-Encoding: base64\n";     
$body .= "Content-Disposition: attachment\n";
$body .= "\tfilename=\"$cvfile_name\"\n\n";
$body .= $attachment;
$body .= "\n--$boundry--\n";       

mail($alici, $konu, $body, $header);


Zoek de verschillen :)

verander trouwens ook \n in \r\n in de $header (in body is dat niet nodig)

[ Voor 29% gewijzigd door stekkel op 23-07-2003 23:13 ]


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Shift schreef op 23 juli 2003 @ 22:32:
Hmm, voor de duidelijkheid ik heb ook de $body .= "$mesaj\n";
ik krijg de mail met de attachment alleen de tekst van de email die staat in de attachment
Zie mijn vorige post. Het is nogal logisch dat het niet werkt zoals jij de code hebt.

Acties:
  • 0 Henk 'm!

  • Shift
  • Registratie: Augustus 2000
  • Laatst online: 16-06 11:48

Shift

[] Dual crazy []

Topicstarter
stekkel schreef op 23 July 2003 @ 23:15:
[...]


Zie mijn vorige post. Het is nogal logisch dat het niet werkt zoals jij de code hebt.
Beste vriend, ik heb de code aangepast zoals je zei check boven, nu bevat de attachment een zooi aan karakters onleesbaar dus, ik had een text file attached.

UPDATE: Code geupdate, arrgghhh ik word gek, de headers werken niet goed meer en ik krijg nog steeds de email tekst in de attachment.

[ Voor 17% gewijzigd door Shift op 23-07-2003 23:32 ]


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Gefeliciteerd, je ziet base64 encoded text en dat betekend dat het nu werkt.

hint:
$attachment = chunk_split(base64_encode($data));

Ik raad je aan om rfc2045-2049 eens te lezen. Daar staat precies hoe mime mail werkt.

[ Voor 76% gewijzigd door stekkel op 23-07-2003 23:33 ]


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
regel 30, die \n moet weg.

Acties:
  • 0 Henk 'm!

  • Shift
  • Registratie: Augustus 2000
  • Laatst online: 16-06 11:48

Shift

[] Dual crazy []

Topicstarter
stekkel schreef op 23 July 2003 @ 23:37:
regel 30, die \n moet weg.
Veranderd echt helemaal niets, ik probeer ook vanalles hierow de code heb ik weer bijgewerkt, maar de probleem is het zelfde.

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Ik kan je niet helemaal volgen, Je melde dat je de zogenaamde zooi als karakters zag, wat dus base64 encoded text is. Toen je dat had, had je ook een werkend script.

suc6

Acties:
  • 0 Henk 'm!

  • Shift
  • Registratie: Augustus 2000
  • Laatst online: 16-06 11:48

Shift

[] Dual crazy []

Topicstarter
Ik krijg pas maffe karakters als ik dit doe. De probleem is dat mijn bericht dus $mesaj in de attachment komt dat ik de probleem. De attcchment word overschreven door mijn $mesaj, ik stuur voor de gein een text file, als ik die open krijg ik de inhoud van $mesaj te zien, dat is de probleem hier.

Ik heb de RFC doorgenomen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$header  = "From: Via website <kebap@kebap.com.tr>\r\n";    
$header .= "To: $alici\r\n";    
$header .= "Subject: $konu\r\n";
$header .= "Date: Wed, 23 Jul 2003 19:52:35 +0200\r\n";
$header .= "Message-ID: <000001c35143$36542a10$0c2dfea9@oguzpc>\r\n";
$header .= "MIME-Version: 1.0\r\n";    
$header .= "Content-Type: multipart/mixed; \n\tboundary=\"$boundry\"\r\n";
$header .= "X-Priority: 3\r\n";
$header .= "X-Envelope-To: <$alici>\r\n";
$header .= "X-Envelope-From: <test@netfront.nl>\r\n";
$header .= "X-Mailer: een server mailserver\r\n";
$header .= "This is a multi-part mesaj in MIME format.\r\n";
$header .= "--$boundry\r\n";    
$header .= "Content-Type: text/plain;\n";
$header .= "\tcharset=\"us-ascii\"\n";    
$body .= "Content-Transfer-Encoding: 7bit\n\n";     

$body .= "$mesaj\n";    
$body .= "--$boundry\n";
$body .= "Content-Type: $type;\n";
$body .= "\tname=\"$cvfile_name\"\n";
$body .= "Content-Transfer-Encoding: base64\n";     
$body .= "Content-Disposition: attachment\n";
$body .= "\tfilename=\"$cvfile_name\"\n\n";
$body .= $attachment;
$body .= "\n--$boundry--\n";       
# Maili gonder
mail($alici, $konu, $mesaj, $body, $header);

[ Voor 37% gewijzigd door Shift op 24-07-2003 00:04 ]


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Na regel 11 begint de body. replace $header door $body

edit:

De code doe je net post komt niet overeen zoals ik eerder aangaf.

[ Voor 46% gewijzigd door stekkel op 24-07-2003 00:07 ]


Acties:
  • 0 Henk 'm!

  • Shift
  • Registratie: Augustus 2000
  • Laatst online: 16-06 11:48

Shift

[] Dual crazy []

Topicstarter
stekkel schreef op 24 July 2003 @ 00:05:
Na regel 12 begint de body. replace $header door $body
Hellp, ik weet het, dat had je eerst gezegd, had ik gedaan. dan is de probleem hetzelfde, nu krijg ik maffe base64 code in de attachment. als ik de aanpassing maak dan zie ik de $mesah inhoud als ascii gewoon, dus probleem blijft zelfde.

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
base64 code is niet maf.

gebruik base64_decode om de oorspronkelijk text weer te zien.

Acties:
  • 0 Henk 'm!

  • Shift
  • Registratie: Augustus 2000
  • Laatst online: 16-06 11:48

Shift

[] Dual crazy []

Topicstarter
stekkel schreef op 24 July 2003 @ 00:08:
base64 code is niet maf.

gebruik base64_decode om de oorspronkelijk text weer te zien.
Stekkel, ik ben heel erg dankbaar dat je me wilt helpen, maar als ik een email verstuur, en ik lees het met outlook hoef ik de attachement niet handmatig te decoden, dat doet outlook natuurlijk. Ik weet niet of jullie de probleem begrijpen ?

Yessssss,, het is me gelukt
heel stom na het aanpassen van headers en body werkte het nogsteeds niet en waarom niet ? Met mijn stomme kop

mail($alici, $konu, $mesaj, $body, $header);

darrom niet, het moest zijn

mail($alici, $konu, $body, $header);

Hoe slim kan je zijn he ! :D bedankt voor alles iedereen :)

[ Voor 28% gewijzigd door Shift op 24-07-2003 00:33 ]


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Dit doorlezende heb ik een beetje het gevoel dat je eigenlijk net niet helemaal weet wat je aan het doen bent en hoe zo'n mail in elkaar steekt.
Lees dit eens door:
http://www.devshed.com/Server_Side/PHP/PHPMail
Wordt stap voor stap uitgelegd hoe je een email client maakt. Het is een beetje verouderd, maar alle voorbeelden werken wel, dus dan zie je precies hoe het moet
Pagina: 1