[PHP] MIME attachment voor Hotmail *

Pagina: 1
Acties:
  • 250 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb hier een half werkend mime scriptje, probleem is is dat het in outlook goed aankomt maar bij bijv. hotmail of yahoo weer totaal niet .

wat ik stuur is een stuk html + willekeurig attachment.

het probleem ligt bij het attachment. in outlook gaat het attachment goed maar bij hotmail e.d. dus niet. hij geeft wel aan hoe groot het is en bestandsnaam enzo maar toch is het niet goed (bij een plaatje krijg ik dus een kruisje, zip is niet goed etc)

ik heb het geprobeerd van een linux server te sturen + windows computer met iis 6
ik heb hier gekeken naar voorbeelden van en ik heb gekeken naar rfc info en daarmee ook geexperimenteerd.

ik heb verschillende content-types met verschillende boundaries geprobeerd .. verschillende \n, \r of \r\n

ik kan er even geen wijs meer uit worden 8)7

script wordt aangesproken door een opgestuurd formulier .. $attach is file input van formulier :)

script:


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
35
36
37
38
39
40
41
42
43
44
45
    $subject = "test";
    
    $boundary = md5(uniqid(time()));

    $fd = fopen($attach,"rb");
    $data = fread($fd,$attach_size);
    fclose($fd);

    $data = chunk_split(base64_encode($data));
    

    $headers = "Mime-version: 1.0\r\n";
    $headers .= "From: blaat<blaat>\r\n";
    $headers .= "Content-type:multipart/mixed; boundary=$boundary\r\n";
    
    $body = "--$boundary\r\n";
    $body .= "Content-type:text/html; charset=iso-8859-1\r\n";
    $body .= "Content-Transfer-Encoding: 7bit\r\n";
    $body .= "<html><head><title></title></head><body>\r\n";
    $body .= "<table border=0>\r\n";
    
    foreach ($HTTP_POST_VARS as $key => $value) {
        
        $body .= "<tr>";
        $body .= "<td><b>$key</b></td>";
        $body .= "<td>$value</td>";
        $body .= "<tr>";

    }

    $body .= "</table>\r\n";
    $body .= "</html>\r\n";

    $body .= "--$boundary\r\n";

    $body .= "Content-type:" . $attach_type . "; name=$attach_name\r\n";
    $body .= "Content-Transfer-Encoding: base64\r\n";
    $body .= "Content-Disposition:attachment; filename=\"".  $attach_name . "\"\r\n";
    $body .= "filename=$attach_name\r\n";

    $body .= $data;

    $body .= "--" . $boundary . "--\r\n";

    mail($email,$subject,$body,$headers);

[ Voor 15% gewijzigd door Verwijderd op 29-01-2004 09:00 ]


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Ondersteund hotmail wel base64 encoded emails?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb vanuit zowel hotmail als outlook van/naar gestuurd en hotmail is vrij uitgebreid qua mail. Hun versturen ook base64 encoded attachments + html :)

Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Ik weet niet of het ook echt zo is, maar moet er achter:
PHP:
1
$body = "--$boundary\r\n";


niet nog een '--' na $boundary?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
alleen als je een bepaald gedeelte afsluit moet er nog een -- achter

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
je hebt 2 x filename = ... in je mime header staan.

Maar waar het volgens mij fout gaat is het ontbreken van een \r\n voor de boundary end.
Een boundary moet namelijk altijd op een nieuwe regel beginnen en dat is bij jou niet het geval.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
stekkel schreef op 29 januari 2004 @ 10:12:
je hebt 2 x filename = ... in je mime header staan.

Maar waar het volgens mij fout gaat is het ontbreken van een \r\n voor de boundary end.
Een boundary moet namelijk altijd op een nieuwe regel beginnen en dat is bij jou niet het geval.
daar heb je volgens mij gelijk in :) alleen helpt het niet ...
2de filename heb ik btw weggehaald

Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Nog een domme misschien: mag je wel twee keer hetzelfde 'boundarynummer' gebruiken voor 2 aparte boundaries?

niet dus....

[ Voor 15% gewijzigd door MisterData op 29-01-2004 10:44 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
daar heb ik ook het volgende mee gegeprobeerd:

na html gedeelte nieuwe header + boundary

bij attachment nieuwe header
base64 data
nieuwe header afsluiten

maar ook dat wou niet werken

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Oh, nog wat, wist je dat er na een mime header een witregel moet zijn?

M.a.w. de laatste mime header regel moet afgesloten worden met "\r\n\r\n".

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik wist dat er idd een \r\n moest staan maar moet dus dubbel :)
goed heb ik net even gedaan en krijg nu in hotmail de letterlijke content (bron) die ik stuur dus ook de base64 geencode data :)

maar ik ga er zo mee verder experimenteren thanx iig .. er is weer verandering en hoop :D

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
de grote barbapapatruuk was idd \r\n\r\n op het einde van de boundary EN een chunk_split over het html gedeelte :)
Pagina: 1