funktion send_html_and_text_mail

Alles, was PHP betrifft, kann hier besprochen werden.

funktion send_html_and_text_mail

Postby TTP » 03. January 2004 22:43

Wer kann mir dieses Script zum laufen bringen?

Code: Select all
<?

$subject="testmail";
$mail_content="<html><head><title>ok</title></head><body>test</body></html>";

funktion send_html_and_text_mail($mail_content,$an,$von,$subject)
{

$mail_header = "From: $von";

/* Generiere einen Boundary */
$boundary = strtoupper(md5(uniqid(time())));


/* (siehe http://www.php3-forum.de/mime_mail.htm) */
$mail_header .= "\nMIME-Version: 1.0";
$mail_header .= "\nContent-Type: multipart/alternative; boundary=$boundary";
$mail_header .= "\n\nThis is a multi-part message in MIME format -- Dies ist eine mehrteilige Nachricht im MIME-Format";

$mail_header .= "\n--$boundary";

//html code entfernen
$mail_content_without_html = strip_tags($mail_content);
$mail_content_without_html = trim($mail_content_without_html);


$mail_header .= "\nContent-Type: text/plain";
$mail_header .= "\nContent-Transfer-Encoding: 8bit";
$mail_header .= "\n\n$mail_content_without_html";

/* Hier faengt der normale html-Mail-Text an */
$mail_header .= "\n--$boundary";
$mail_header .= "\nContent-Type: text/html";
$mail_header .= "\nContent-Transfer-Encoding: 8bit";
$mail_header .= "\n\n$mail_content";
$mail_header .= "\n--$boundary--";


/* Sende eMail und gebe Fehler bzw. Bestaetigung aus */
if(@mail($an,$subject,"",$mail_header))
{ //okay
$return = "1";
}
else
{ // fehler
$return = "0";
}

return $return;

}$an="emailadresse1";
$von="emailadresse1";


?>
also $an="emailadresse1";
$von="emailadresse1"; werden durch die richtigen ausgetauscht, das weiß ich, aber wie bekomme ich die funktion zum laufen? *newbee*
User avatar
TTP
 
Posts: 310
Joined: 30. August 2003 19:38
Location: Wolfsburg

Postby Straffi » 05. January 2004 10:28

Moin TTP,

da ich nicht weiß, wie weit du in PHP bist, fange ich mal vorne an ;-)

Code: Select all
funktion send_html_and_text_mail($mail_content,$an,$von,$subject)

Das Schlüsselwort heißt function und nicht funktion

$an="emailadresse1";
$von="emailadresse1"; werden durch die richtigen ausgetauscht, das weiß ich


Wie soll das denn funktionieren, du rufst die funktion gar nicht auf:
Code: Select all
$An = "empfaenger@irgendwo.de";
$Von = "ich@sonstwo.de";
$Inhalt = "Dies ist eine Testmail.";
$Betreff = "Erste Testmail";

send_html_and_text_mail($Inhalt, $An, $Von, $Betreff);


Das funktioniert aber auch nur, wenn der richtige Mailserver in der php.ini angegeben wurde. Zum testen würde ich in der Zeile:
Code: Select all
/* Sende eMail und gebe Fehler bzw. Bestaetigung aus */
if(@mail($an,$subject,"",$mail_header))

das "@" entfernen, sonst bekommst du die Fehlermeldung der mail()-Funktion nicht mit.

Unter http://www.dclp-faq.de/q/q-mail-windows.html findest du einige häufige Probleme (Missverständnisse) im Umgang mit EMails.


mfg straffi
User avatar
Straffi
 
Posts: 120
Joined: 07. October 2003 17:48

Postby TTP » 05. January 2004 19:54

wie rufe ich denn die Funktion auf?

Das war nen Teil einens Fertigscriptes was ich auf irgendeiner Seite gefunden hab, das soll mir als Basis dienen HTML + Text email in einer email zu verschicken...
User avatar
TTP
 
Posts: 310
Joined: 30. August 2003 19:38
Location: Wolfsburg

Postby Straffi » 05. January 2004 20:12

Moin TTP,

da habe ich mich wohl etwas unverständlich ausgedrückt, das Beispiel für den Aufruf war schon dabei:

Code: Select all
$An = "empfaenger@irgendwo.de";
$Von = "ich@sonstwo.de";
$Inhalt = "Dies ist eine Testmail.";
$Betreff = "Erste Testmail";

// Jetzt der Funktionsaufruf:
send_html_and_text_mail($Inhalt, $An, $Von, $Betreff);


Hier noch ein paar Adressen:
Unter http://www.php-resource.de/scripte/browsesub/PHP/Mail/1/ findest du einen Riesenhaufen fertige MailScripte, unter http://www.phpclasses.net/ einen Stapel von fertigen Klassen zum selberbasteln und unter http://www.usegroup.de/software/phptutorial/ein_form-mailer.html ein Tutorial zum Thema Mail und PHP.


mfg straffi
User avatar
Straffi
 
Posts: 120
Joined: 07. October 2003 17:48

Postby TTP » 05. January 2004 20:16

achso, na dann Probier ich das eben mal =))
User avatar
TTP
 
Posts: 310
Joined: 30. August 2003 19:38
Location: Wolfsburg

Postby TTP » 05. January 2004 20:21

wow klappt sogar *freuZz* :shock:


DANKE =))


Jetzt muss ich nur mal gucken wie das mit dem HTML mail erstellen geht ^^ is das wie mit ner Webseite? also das ich da anfange mit

<html><head> (...) </head><body>(...)</body></html> ?

*mal ausprobier*
User avatar
TTP
 
Posts: 310
Joined: 30. August 2003 19:38
Location: Wolfsburg

Postby TTP » 05. January 2004 20:42

Aber was ist jetzt mit:
Code: Select all
$mail_header .= "\nMIME-Version: 1.0";
$mail_header .= "\nContent-Type: multipart/alternative; boundary=$boundary";
$mail_header .= "\n\nThis is a multi-part message in MIME format -- Dies ist eine mehrteilige Nachricht im MIME-Format";

$mail_header .= "\n--$boundary";

//html code entfernen
$mail_content_without_html = strip_tags($mail_content);
$mail_content_without_html = trim($mail_content_without_html);


$mail_header .= "\nContent-Type: text/plain";
$mail_header .= "\nContent-Transfer-Encoding: 8bit";
$mail_header .= "\n\n$mail_content_without_html";

/* Hier faengt der normale html-Mail-Text an */
$mail_header .= "\n--$boundary";
$mail_header .= "\nContent-Type: text/html";
$mail_header .= "\nContent-Transfer-Encoding: 8bit";
$mail_header .= "\n\n$mail_content";
$mail_header .= "\n--$boundary--";
brauch ich das nicht? weil das ist ja jetzt außer Kraft gesetzt, ich hab ja jetzt nur noch ne datei mit folgendem code:

Code: Select all
$An = "@ng-connect.zzn.com";
$Von = "ich@sonstwo.de";
$Inhalt = "<html><body><b>Dies ist eine Testmail.</b><br><br>TEST</body></html>";
$Betreff = "Erste Testmail";

send_html_and_text_mail($Inhalt, $An, $Von, $Betreff);


hmm oder wie muss meine ganze datei aussehen? Wie mach ich das denn, wenn ich das an mehrere personen gleichzeitig versenden will?

Ich find auf meine Fragen voll keine Antworten bei deinen Links @ Straffi

oder muss ich die alle mit dem CC: verschicken?
User avatar
TTP
 
Posts: 310
Joined: 30. August 2003 19:38
Location: Wolfsburg

Postby Straffi » 05. January 2004 21:48

Moin TTP,

Ich versuch mal ein wenig step-by-step:

1) Erstmal brauchst du einen Mailserver, an den die Mails versendet werden können. Für Windows den beigelegten Mercury oder den Hamster benutzen. (Konfigurationshilfe im Forum suchen ;-)

2) Zum versenden der Mail am besten die PHP-Funktion mail() ( http://de3.php.net/manual/de/ref.mail.php) benutzen.

Code: Select all
//Beispiel (ungetestet):
$Von = "ich@hier.de";
$An = "du@da.de";
$Betreff = "Testmail";
$Text = "Ein kurzer Beispieltext";

// Kopfdaten erstellen
$Header = "From: $Von";

// Jetzt die mail-funktion
mail($An, $Betreff, $Text, $Header);


3) Um diese Mail an mehrere Empfänger zu senden, wird einfach der Header mit CC oder BCC erweitert:

Code: Select all
//Beispiel (ungetestet):
$Von = "ich@hier.de";
$An = "du@da.de";

$CC = "ein@anderer.de";
$BCC = "noch@jemand.de";

$Betreff = "Testmail";
$Text = "Ein kurzer Beispieltext";

// Kopfdaten erstellen
$Header  = "From: $Von \n";
$Header .= "Cc: $CC \n";
$Header .= "Bcc: $BCC \n";
 

// Jetzt die mail-funktion
mail($An, $Betreff, $Text, $Header);



4) Bei den von dir gewünschten HTML-Mails wird noch ein weiterer Header mit angegeben, allerdings wird dann bei Empfängern mit Nur-Text-Readern (z.B. ich) der HTML-Quelltext angezeigt - egal, so gehts:

Code: Select all
//Beispiel (ungetestet):
$Von = "ich@hier.de";
$An = "du@da.de";
$CC = "ein@anderer.de";
$BCC = "noch@jemand.de";
$Betreff = "Testmail";

// HTML-Inhalt
$Text = "<html><head><title>Testmail</title></head><body>Ein kurzer Beispieltext</body></html>";

// Kopfdaten erstellen
$Header  = "From: $Von \n";
$Header .= "Cc: $CC \n";
$Header .= "Bcc: $BCC \n";
 
// Als HTML Kennzeichnen
$Header .= "Content-type: text/html \n";

// Jetzt die mail-funktion
mail($An, $Betreff, $Text, $Header);


5) Um es richtig zu machen, sollte die Mail dem MIME-Standard etsprechen. Hier wird die Nachricht in verschiedene Teile aufgeteilt, die dan vom Empfänger gelesen werden können. Diese Teile kann der eigentliche Text mit einem Anhang sein (multipart/mixed) oder zwei Versionen des selben Textes, einmal mit und einmal ohne HTML (multipart/alternaive).
Eigentlich alles, was der Empfänger auf seinem System wiedergeben kann.

Diese Mails erstellt deine Funktion send_html_and_text_mail().

Der Hauptteil bastelt den richtigen Header für die mail()- Funktion zusammen.

Code: Select all

//html code entfernen für den Nur-Text-Teil
$mail_content_without_html = strip_tags($mail_content);
$mail_content_without_html = trim($mail_content_without_html);


// der Boundary trennt die einzelnen Teile einer mehrteiligen Nachricht
$boundary = strtoupper(md5(uniqid(time())));

// siehe oben
$mail_header = "From: $von";

// Version und Inhalt festlegen:
$mail_header .= "\nMIME-Version: 1.0";

// Dem Empfänger sagen, das eine mehrteilige Nachricht folgt, und wie diese getrennt ist:
$mail_header .= "\nContent-Type: multipart/alternative; boundary=$boundary";

// Nicht unbeding nötig
$mail_header .= "\n\nThis is a multi-part message in MIME format -- Dies ist eine mehrteilige Nachricht im MIME-Format";

// Beginn des ersten Teiles
$mail_header .= "\n--$boundary";

// Der erste Teil besteht aus reinem Text:
$mail_header .= "\nContent-Type: text/plain";
$mail_header .= "\nContent-Transfer-Encoding: 8bit";

// Jetzt kommt der Text:
$mail_header .= "\n\n$mail_content_without_html"


// Beginn des zweiten Teils:
$mail_header .= "\n--$boundary";

// Dieser Teil besteht aus HTML-Code
$mail_header .= "\nContent-Type: text/html";
$mail_header .= "\nContent-Transfer-Encoding: 8bit";

// HTML-Inhalt:
$mail_header .= "\n\n$mail_content";

// ende des zweiten Teils und Ende der Nachricht:
$mail_header .= "\n--$boundary--";


Keine Panik wenn dir der tiefere Sinn dieser Bastelei nicht ganz klar wird - selbst Microsoft hat da noch nicht ganz durchgeblickt :wink:

Ich hoffe, der kleine Ausflug in das Reich der EMails hat dir wenigstens ein kleines bisschen geholfen. Als dein Anwalt rate ich dir: Besorg dir ein Glas Wein und mindestens zwei Stunden Zeit und google dich etwas durchs die Materie.


mfg straffi
User avatar
Straffi
 
Posts: 120
Joined: 07. October 2003 17:48

Postby TTP » 06. January 2004 14:40

Irgendwie peil ich das immer noch nicht, ich will eigentlich doch nur das script zum laufen bringen, das ich html und textmails gleichzeitig in einer mail versende, damit gerade die nur Text-Empfänger kein HTML Quelltext sehen... wie bekomm ich den nun die function zum laufen? die ist doch eigentlich fertig und steht doch nur still, weil sie darauf wartet gestartet zu werden, das ist es ja was ich nicht hin bekomme. Und mailprogramm brauch ich nicht ;) da bei meinem Webspacepacket n Mailserver dabei ist (www.ng-connect.com) und die funktion send_html_and_text oder wie die jetzt war funktioniert ja wunderbar, ich bekomm es nur nicht hin, das script so zum laufen zu bekommen das die function geht -.-

kannst du mir das Script nicht so editieren, dass es eine ganze datei ist, also mit <? beginnend und mit ?> aufhörend, dass ich nur die passenden emailadressen angeben muss und den HTML-Text? Wäre dir sehr dankbar ;) kannst auch ne Werbefläche auf meiner Seite bekommen, wenn die mal fertig wird ^^
User avatar
TTP
 
Posts: 310
Joined: 30. August 2003 19:38
Location: Wolfsburg

Postby Straffi » 06. January 2004 15:21

Moin TTP,

kannst du mir das Script nicht so editieren, dass es eine ganze datei ist, also mit <? beginnend und mit ?> aufhörend, dass ich nur die passenden emailadressen angeben muss und den HTML-Text?


Ja wenn das so einfach ist...

Man nehme das Script aus Posting 1, entferne die Fehler (Posting 2) und rufe die Funktion mit den richtigen Parametern auf.

Code: Select all
send_html_and_text_mail($mail_content,$an,$von,$subject)
{
  // Hier der Inhalt der Funktion
}

// Parameter setzen:
//Inhalt der Mail
$Inhalt = "<html><body>Dieser Text steht nachher im Body der Mail und kann auch <b>formatiert</b> werden.</body></html>";

// Empfänger
$An = "adresse@andiediemail.geht";

// Absender
$Von = "absender@adres.se";

//Betreff
$Betreff = "Dieser Text steht in der Betreffzeile";
 
// Jetzt der Aufruf der Funktion:
send_html_and_text_mail($Inhalt, $An, $Von, $Betreff);


Leider kann ich dir nicht so einfach eine Datei liefern, da ich überhaupt keine Ahnung habe woher die Daten (Empfänger, Betreff, Inhalt) kommen und wie sie übergeben werden. Dafür müsste ich das "Umfeld" kennen in dem das Script eingesetzt werden soll. Wenn weiterhin Interesse besteht, kannst du mir ja mal über PN genaueres schreiben.


mfg straffi
User avatar
Straffi
 
Posts: 120
Joined: 07. October 2003 17:48

Postby TTP » 12. January 2004 16:29

was ist denn immernoch falsch in meinem Script, ich blick da voll nicht durch... +dumm bin+

Code: Select all
<?

// Parameter setzen:
//Inhalt der Mail
$Inhalt = "<html><body>Dieser Text steht nachher im Body der Mail und kann auch <b>formatiert</b> werden.</body></html>";

// Empfänger
$An = "chicos@ng-connect.zzn.com";

// Absender
$Von = "absender@adres.se";

//Betreff
$Betreff = "Dieser Text steht in der Betreffzeile";


function send_html_and_text_mail($Inhalt, $An, $Von, $Betreff)
{
  // Hier der Inhalt der Funktion
$header .= "\nMIME-Version: 1.0";
$header .= "\nContent-Type: multipart/alternative; boundary=$boundary";
$header .= "\n\nThis is a multi-part message in MIME format -- Dies ist eine mehrteilige Nachricht im MIME-Format";

$header .= "\n--$boundary";

//html code entfernen
$mail_content_without_html = strip_tags($mail_content);
$mail_content_without_html = trim($mail_content_without_html);


$header .= "\nContent-Type: text/plain";
$header .= "\nContent-Transfer-Encoding: 8bit";
$header .= "\n\n$mail_content_without_html";

/* Hier faengt der normale html-Mail-Text an */
$header .= "\n--$boundary";
$header .= "\nContent-Type: text/html";
$header .= "\nContent-Transfer-Encoding: 8bit";
$header .= "\n\n$mail_content";
$header .= "\n--$boundary--";

}


 
// Jetzt der Aufruf der Funktion:
send_html_and_text_mail($mail_content,$Inhalt, $An, $Von, $Betreff);

?>
User avatar
TTP
 
Posts: 310
Joined: 30. August 2003 19:38
Location: Wolfsburg

Postby TTP » 12. January 2004 16:30

ich meine eine Fehlermeldung bekomme ich nicht, aber ankommen tut diese email trotzdem nicht... but why?
User avatar
TTP
 
Posts: 310
Joined: 30. August 2003 19:38
Location: Wolfsburg

Postby Kristian Marcroft » 12. January 2004 16:36

Hi,

ich kann dir leider nicht helfen....
aber ich bitte dich keine Doppel threads zu öffnen!
Den in XAMPP für windows habe ich gelöscht.

So long
KriS
User avatar
Kristian Marcroft
AF Moderator
 
Posts: 2962
Joined: 03. January 2003 12:08
Location: Diedorf

Postby TTP » 12. January 2004 16:38

ich werds mir merken Kris ;)
User avatar
TTP
 
Posts: 310
Joined: 30. August 2003 19:38
Location: Wolfsburg

Postby DJ DHG » 13. January 2004 22:21

Moin Moin

habe gerade selbst ein bischen mit der mail(); funktion rumgespiel.

ist nur so eine idee, aber du schreibst

Code: Select all
send_html_and_text_mail($mail_content,$Inhalt, $An, $Von, $Betreff);


sollte nicht zuerst der empfänger kommen? also

Code: Select all
mail($an, $betreff, $text, $from);


ich werde mal bei gelegenheit, dein code ausprobieren.

mfg DJ DHG
User avatar
DJ DHG
AF Moderator
 
Posts: 2455
Joined: 27. December 2002 13:50
Location: Kiel

Next

Return to PHP

Who is online

Users browsing this forum: No registered users and 2 guests