Mail mit Attachment als Text und HTML

Alles, was PHP betrifft, kann hier besprochen werden.

Mail mit Attachment als Text und HTML

Postby Enzian » 25. April 2004 17:20

Hi

Generire HTML-Mail udn Textmail, das geht einwandfrei.

Nun möchte ich noch Attachment (PDF) dazugeben. Und es geht irgenswie nicht.

Ich mache es mit Boundary und trenne die beiden Mails (HTML und Text) Versuchte das Attachment auch in den Header zu packen aber es geht nicht!




Die Fehlermeldung:

Warning: Unable to access ..pdf/ersch.pdf on line 43

Warning: fopen("..pdf/ersch.pdf", "r") - No such file or directory in on line 43

Warning: stat failed for ..pdf/ersch.pdf (errno=2 - No such file or directory) in on line 43

Warning: fread(): supplied argument is not a valid File-Handle resource in on line 43


Code: Select all
$dateinamen="..pdf/$dateiname";
$datei_content = chunk_split(base64_encode(fread(fopen($dateinamen,"r"),filesize($dateinamen))));
$grenze = strtoupper(md5(uniqid(time())));;
$headers ="MIME-Version: 1.0\n";
$headers.="From: \n";
$headers.="Content-Type: multipart/mixed;\n\tboundary=\"$grenze\"\n";


# HTML-Mail generieren
 
$mail .= "\n--$grenze\n";
 
$mail .= "Content-Type: text/html; charset=ISO-8859-15\n\n";

$mail .= "
<html>
<head>
</head>
</body>
</html>";

# oder hier ein HTML-Template includen
 
# Mail-Anhang als TXT-Dokument generieren
$mail .= "\n--$grenze\n"; 

$mail .= "Content-Disposition: attachment; filename=text_document.txt\n\n";
$mail .= "Content-Transfer-Encoding: 8bit\n";

$mail .= "$anrede\n
$text1\n";

$mail .= "\n--$grenze";

$headers.= "\n--$grenze\n";
$headers.= "\nContent-Type: application/pdf; name=\"$dateinamen\"";
$headers.= "\nContent-Transfer-Encoding: base64";
$headers.= "\nContent-Disposition: attachment; filename=\"$dateinamen\"";
$headers.= "\n\n$file_content";
$headers.= "\n--$grenze\n";

$send_mail = @mail($testmail,$betreff,"$mail",$headers);



Das File exisiert, aber nicht im selben Ordner, sondern "höher" ../pdf/

Danke für die Hilfe, ich bin wirklich am verzweifeln
Enzian
 
Posts: 26
Joined: 10. March 2004 23:45

Postby Wiedmann » 25. April 2004 17:51

Das File exisiert, aber nicht im selben Ordner, sondern "höher" ../pdf/

Code:
$dateinamen="..pdf/$dateiname";

Und sich dann noch die Fehlermeldung angeschaut.... Dann müßte diese Zeile wohl so lauten:

Code:
$dateinamen="../pdf/$dateiname";
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Fast perfekt, aber nicht ganz fertig

Postby Enzian » 25. April 2004 18:45

Es geht jetzt, aber nebst dem richtigen PDF und text-File für die Mail ohne HTML gehen noch zwei weitere Files mit ein Part 1.2 und ein Part 1.4.

Wie werden diese beiden Files generiert und wie kann ich es machen, dass diese nicht geschickt werden?

Ist es nötig ein Text-File mitzuschicken? Kann ich es nicht auch ohne machen und die Mails-Account erkennen es doch richtig?

Danke


Code: Select all
# Headerzeilen
$dateinamen="../pdf/$dateiname";
$datei_content = chunk_split(base64_encode(fread(fopen($dateinamen,"r"),filesize($dateinamen))));
$grenze = strtoupper(md5(uniqid(time())));;
$headers ="MIME-Version: 1.0\n";
$headers.="From: xxx.de\n";
$headers.="Reply-To: xxx.de\n";
$headers.="Content-Type: multipart/mixed;\n\tboundary=\"$grenze\"\n";
$headers.= "\n--$grenze";
$headers.= "\nContent-Type: application/pdf; name=\"$dateinamen\"";
$headers.= "\nContent-Transfer-Encoding: base64";
$headers.= "\nContent-Disposition: attachment; filename=\"$dateiname\"";
$headers.= "\n\n$datei_content";
//$headers.= "\n--$grenze\n";


# HTML-Mail generieren
$mail .= "\n--$grenze\n";
$mail .= "Content-Type: text/html; charset=ISO-8859-15\n\n";
$mail .= "
<html>
.....<td>";   


if ($text1 >0)
{}
else if ($text1fett == fett)
   { $mail .= "<tr><td><p><b>$text1</b></p><tr><td>";}
else{ $mail .="<tr><td><p>$text1</td></tr>"; }



if ($text2 >0)
{}
if ($text2fett == fett)
   { $mail .= "<tr><td><p><b>$text2</b></p></td></tr>";}
else{ $mail .="<tr><td><p>$text2</td></tr>"; }


$mail .= "
 <tr> <td><p>$gruss<br>..................</html>";
 
# Mail-Anhang als TXT-Dokument generieren
$mail .= "\n--$grenze\n"; 
$mail .= "Content-Disposition: attachment; filename=text_document.txt\n\n";
$mail .= "Content-Transfer-Encoding: 8bit\n";
$mail .= "$anrede\n
$text1\n
$text2\n
$text3\n
$text4\n
$text5\n
$gruss
$absendername
$funktion";
$mail .= "\n--$grenze";

$send_mail = @mail($testmail,$betreff,"$mail",$headers);
Last edited by Enzian on 25. April 2004 21:49, edited 1 time in total.
Enzian
 
Posts: 26
Joined: 10. March 2004 23:45

Postby Stefan » 26. April 2004 09:19

Müsste schon gehen, das man nur einen Anhang ohne Mailtext verschicken kann.
Warum Dein Script nicht richtig funktioniert, kann ich jetzt nicht beurteilen, aber ich kann Dir die Mail Klasse "HTML Mime mail" empfehlen.

* http://www.phpguru.org/static/mime.mail.html

Für Dein Beispiel würde das mailverschicken dann so aussehen:
Code: Select all
<?php
error_reporting(E_ALL);
include('htmlMimeMail.php');

/* Initialisieren einer Instanz  */
$mail = new htmlMimeMail();


// Bestimmen des Textteils.
// Wenn Dein Text aus einer Textdatei(tpl/Schablone) kommen soll
// Dann mit " $text = $mail->getFile('MeineTextvorlage.txt'); "
// herholen.
$text =
<<<TEXT
Thema 1
  Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy
  nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
  Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper
  suscipit lobortis nisl ut aliquip ex ea commodo consequat.
Link zum Thema 1 -> http://domäne.tld
TEXT;

/******* TEXT ENDE ******************************/

// Bestimmen des Html Inhaltes
// Wenn der Quelltext aus einer Datei kommen soll
// Dann mit " $html = $mail->getFile('MeinHTMLQuelltext.html'); "
// herholen.
$html =
<<<HTML
<html><head><title>Lecker Wurst</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style> body,td,a{ background-color:#ffffcc;   color:#3399cc;  font-family: Arial, Helvetica, sans-serif; font-size: 12px;}
</style></head><body><table border="1" cellpadding="5" cellspacing="0"><tr><td style="width:120px;vertical-align:top;"><strong>Thema 1</strong><br><br><a href="http://schwaademaache.de">LinkzumThema 1</a><br><br><img src="http://schwaademaache.de/wirschd/schwaademaache.jpg" alt="Lecker" width="100"><br>Bild zum Thema</td><td style="width:350px;vertical-align:top;">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</td>
</tr></table></body></html>
HTML;


  // $mail->setText($text);               // Nur Text verschicken
      $mail->setHtml($html, $text);        // Html und Text verschicken
  // $mail->setHtml($html, $text, './');  // Der dritte Parameter ist der Pfad für eingebettete Grafiken
   // $mail->setHtml($html);               // setzt nur den HTML Text. Textclients müssen den Text extrahieren

  /**
   * Anhänge einlesen.
   */
   $attachment = $mail->getFile("../pdf/".$dateiname);
   
  /**
   * Anhänge der Mail anfügen.
   * zweiter Parameter ist der Name des Anhangs in der der email.
   * dritter Parameter ist nicht so wichtig, kann also auch fehlen.
   */
   $mail->addAttachment($attachment, 'test.pdf', 'application/pfd');


  /**
   * Setzen von Subjekt und antwortadresse
   */
  $mail->setFrom('Enzian <enzian@gmx.de>');
   $mail->setSubject('Das ist meine Testmail');

  /**
   * Weitere Headeangaben
   */
  $mail->setHeader('X-Mailer', 'HTML Mime mail class (http://www.phpguru.org)');
  $mail->setHeader('X-Info', 'Der Berg ruft');
 
  // Du kannst Auch den ReturnPath angeben,
  // klappt allerdings nur, wenn Du als zweiten Parameter bei
  // der "send()" Methode ",'smtp'" angibst.
  // Das wiederum geht nur, wenn "safe_mode OFF" für den Host eingesellt
  // ist über den Du verschicken willst.
  // Hast Du darauf keinen Einfluss, musst Du darauf verzicheten.
  $mail->setReturnPath('enzian@gmx.de');

  //$result = $mail->send(array('stefan@admin.klp'));
  $result = $mail->send(array('stefan@admin.klp'),'smtp');

  // Ausgabe ob erfolgreich oder nicht.
   echo $result ? 'Mail sent!' : 'Failed to send mail';
?>


Sieht brutal aus, gelle :-)
Aber glaub mir, wenn Du das übers Herz brings, wirst Du nie wieder anderst mails verschicken wollen.
In dem Download sind noch ein paar Beispiele drin, wie Du mit der Klasse arbeiten kannst.

Versuchs einfach mal, wenn Probleme auftauchen helf ich Dir gerne weiter.
Viel Erfolg!
Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Danke

Postby Enzian » 02. May 2004 09:23

Danke für die ausführliche Antwort

Da ich in letzter Zeit etwas "ausgefallen" war konnte ich es noch nicht probieren, aber ich bleibe dran und gebe ein Feedback sobald es läuft
Enzian
 
Posts: 26
Joined: 10. March 2004 23:45


Return to PHP

Who is online

Users browsing this forum: No registered users and 15 guests