[PHP] email attachment

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hi, ik wil graag via een formulier een email versturen met een attachment, die ik wil aangeven in een variable, (dus $attachment = "temp.xml"). Nu weet ik niet hoe ik dit zou moeten doen. Op het internet heb ik al wel het een en ander weten te oplossen, maar op dit moment werkt het alleen als je het bestand opzoekt.

Mijn php code is:
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
if ($action == "send") 
{ 
  $header = "From: " . $from . "\n"; 
  if ($attachement != "none") 
  { 
// Haal het attachement type op 
    $type = $HTTP_POST_FILES[attachement][type]; 
    if (($type == "text/plain") || ($type == "text/html")) 
      $encoding = "8bit"; 
    else 
      $encoding = "base64"; 

// Haal het attachement content op
    $fp = @fopen($HTTP_POST_FILES[attachement][tmp_name],"r"); 
    if (!$fp) { 
      print "Could not open attachment for reading...<br>\n"; 
      print "Exiting script!<br><br>"; 
      print "No mail has been sent!"; 
      exit; 
    } 
    $file_content = fread($fp,filesize($HTTP_POST_FILES[attachement][tmp_name])); 

// Als codering is base64 ... codeer het 
    if ($encoding == "base64") 
    $file_content = chunk_split(base64_encode($file_content)); 

// Het maken van een unieke boundary 
    $boundary = strtoupper(md5(uniqid(time()))); 

// Maken van message header... 
    $header .= "MIME-version: 1.0\n"; 
    $header .= "Content-Type: multipart/mixed;\n"; 
    $header .= "\tboundary= " . $boundary . "\n\n"; 

    $header .= "This is a multi-part message in MIME format.\n\n"; 

// Het maken van de message body in de header 
    $header .= "--" . $boundary . "\n"; 
    $header .= "Content-Type: " . $ct . ";\n"; 
    $header .= "\tcharset=\"iso-8859-1\"\n"; 
    $header .= "Content-Transfer-Encoding: quoted-printable\n\n"; 

// Het werkelijke bericht
    $header .=  $body . "\n\n"; 

// Het maken van de attachement in de header 
    $header .= "--" . $boundary . "\n"; 
    $header .= "Content-Type: " . $type . "\n"; 
    $header .= "Content-Transfer-Encoding: " . $encoding . "\n"; 
    $header .= "Content-Disposition: attachment; filename=\"" . $HTTP_POST_FILES[attachement][name] . "\"\n\n"; 

// Werkelijke attachement 
    $header .= $file_content . "\n\n"; 
    $header .= "--" . $boundary . "--"; 
  } 
// Als er geen attachement is... 
  else 
  { 
    $header .= "Content-Type: " . $ct . ";\n"; 
    $header .= "\tcharset=\"iso-8859-1\"\n"; 
    $header .= "Content-Transfer-Encoding: quoted-printable\n\n"; 

// Het werkelijke bericht. 
    $header .=  $body . "\n\n"; 
  } 

if (@mail($to,$subject,"",$header)) 
    {
    print $attachement . "<br>\n";
    print "Mail sent!"; 
    }
  else 
    print "Error sending email!"; 

} 
else 
{


De attachment wordt via een formulier opgezocht:

[html]
<tr>
<td width="150" align="left" valign="center">
<font face="Verdana,Tahoma,Arial,Helvetica" size="2" color="#000000">
Attachement:
</font>
</td>
<td width="350" align="left" valign="center">
<input type="file" name="attachement">
</td>
</tr>
[/html]

Dit gaat gewoon perfect, het mailtje met de opgezochte attachment wordt verzonden. Maar ik wil dus dat het niet opgezocht moet worden, maar dat ik zelf aangeef hoe de file heet. Wanneer ik $attachement = "temp.xml" doe, dan werkt dit niet. Ik denk dat het iets te maken heeft met regel 14, bij "tmp_name".

Ik zou echt niet weten wat ik moet veranderen. Zou iemand mij kunnen vertellen of ik deze informatie ook ergens op het internet kan vinden? Of kan iemand mij vertellen wat ik verkeerd doe?

[ Voor 16% gewijzigd door Verwijderd op 18-12-2002 21:49 ]


Acties:
  • 0 Henk 'm!

  • supakeen
  • Registratie: December 2000
  • Laatst online: 09-09 14:42
attachment
Je verhaal was niet af ;)

Iets met de fopen() misschien?

Ehm.... heb je wel het absolute pad opgegeven? Geef eens dat stukje source als je temp.xml wilt openen :)

[ Voor 46% gewijzigd door supakeen op 18-12-2002 21:51 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ja, ik drukte per ongeluk op verstuur bericht :)

Maar ja, daar dacht ik ook aan. Maar ik weet dus niet wat er fout aan is

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
als ik temp.xml wil openen dan zeg ik gewoon

$attachement = "temp.xml"
en
$fp = fopen($attachement,"r");

En dat is niet goed, dat weet ik. maar ik zou niet weten hoe het wel zou moeten

O ja, en als ik het doe zoals mijn code hierboven en ik voeg "echo $attachment" toe dan geeft ie niet de waarde van het opgezochte bestand, maar d:\windows\temp\php123.tmp

[ Voor 36% gewijzigd door Verwijderd op 18-12-2002 21:57 ]


Acties:
  • 0 Henk 'm!

  • pjonk
  • Registratie: November 2000
  • Laatst online: 22:04
Ik zie in ieder geval wel dat je nog met unquoted indices werkt.
Maak bijv. van
PHP:
1
$HTTP_POST_FILES[attachement][type];


liever
PHP:
1
$HTTP_POST_FILES['attachement']['type'];

Waarschijnlijk is dit niet het hoofdzakelijke probleem, maar het is wel een stuk netter. Sterker nog in nieuwe PHP versies zou het niet quoten van indices wel eens problemen kunnen geven.

[ Voor 4% gewijzigd door pjonk op 18-12-2002 22:39 . Reden: typo ]

It’s nice to be important but it’s more important to be nice


Acties:
  • 0 Henk 'm!

Verwijderd

Waarom gebruik je niet gewoon de HTML MIME MAIL class van www.phpguru.org?!
Deze is supergemakkelijk in gebruik en wordt steeds verder ontwikkeld.

Hij is ook redelijk gemakkelijk zelf uit te breiden.

Ik gebruik hem altijd en hij werkt perfect.

Ik begrijp dat het leuker en interessanter is om zelf een MAIL class te maken.
Maar aan de andere kant: waarom iets opnieuw uitvinden? :)

In ieder geval succes ermee!
Pagina: 1