PHP und die verdammten Attachments

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • PHP und die verdammten Attachments

    Hi Leuts,

    folgendes Problem:

    Alle Klassen die auf S.Schumanns Mailklasse aufbauen
    http://www.phpwizard.net/resources/p...etty/mail.php3
    bereiten mir Kopfzerbrechen:
    Der Mime Body einer Mail mit Attachments wird immer zuerst komplett
    zusammengebaut und dann als Variable der mail() funktion übergeben.

    mail($this->to, $this->subject, "", $mime);

    Dies führt bei meinen Servern zu Problemen, eine Mail mit
    einem Attachments in der Grösse von z.B. 800 K führt zu einer PHP Fehlermeldung das das Memory Limit überschritten wird.
    (steht auf Default: 8 M ). Somit kann diese Klasse (und alle die von Ihr abstammen ) nur eingeschrämkt funktionieren. Setze ich das Memory Limit hoch , funzt es zwar allerdings wird das ganze monster langsam.

    Ich habe mittlerweile eine weitere Klasse geschrieben die den Mail
    versand über Sockets abwickelt. Allerdings kann ich mich nicht darauf verlassen das der Socket Support auf jedem Server aktiviert ist.

    Jemand eine Idee, wie man das Attachment Problem bei verwendung von "mail()" umgehen kann ????

    Oder wie versendet Ihr Mails mit Attachments ?

    thx
    Stefan S.

  • #2
    Mail problem

    Hi,
    habe hier mal ein kleines Snippet von php.net gecuttet.
    Vielleicht hilft Dir das weiter.
    Gruß
    deep

    $to = 'someone@somewhere.com';
    $from = 'my@myself.com';
    $subject = 'Image attached';
    $boundary = "====" . time() . "====";

    $headers = "From: $from\r\n";
    $headers .= "Content-type: multipart/mixed;
    boundary=\"$boundary\"\r\n";


    $file = 'some.jpg';
    if (file_exists($file))
    {
    if (!($fp = fopen($file, "rb")))
    {
    print "bummer";
    exit;
    }
    $contents = fread($fp, filesize($file));
    $image = base64_encode($contents);
    fclose($fp);
    }
    else
    print "Can't find: $file";

    $boundary = "--" . $boundary;
    $message = $boundary . "\n";
    $message .= "Content-Type: text/plain;
    charset=\"iso-8859-1\"\n\n\n";
    $message .= "Attached find an image\n";
    $message .= $boundary . "\n";
    $message .= "Content-Type: image/jpeg;
    name=\"some.jpg\"\n";
    $message .= "Content-Transfer-Encoding: base64\n";
    $message .= "Content-Disposition: attachment;
    filename=\"some.jpg\"\n\n\n";
    $message .= $image . "\n$boundary--";

    mail($to, $subject, $message, $headers);
    http://www.x-tremedev.de

    Comment


    • #3
      leider nicht...

      Danke für deine Mühe deepthought,

      allerdings funktioniert dein Scriplet nach dem gleichen Muster.
      Das Problem ist die vorletzte Zeile:

      $message .= $image . "\n$boundary--";

      nachdem das image durch fread() gegangen ist wird auch hier der komplette Mime Body der Variable $message übergeben. Wenn du dir $image ausgeben lassen würdest, hättest du ein paar seiten b64 Kauderwelch.
      Demnach belegt auch $message jede Menge Speicher.


      Trotzdem vielen Dank.

      Stefan S. <cosmox>
      -geht nicht gibts nicht-

      Comment

      Working...
      X