PHP Funktion mail() mit MAMP

K

koli.bri

Hallo.

Ich hab zwei Fragen zu der Mailfunktion von PHP.
1.) Wann gehen die Mails raus? Ich hab in einem Testscript eine Mail versand, und kurz danach die Mails abgerufen. Nichts kam an. Es könnte theorethisch an einen Tippfehler liegen.

2.) Ich hab die Mail wie ein HTML-Dokument aufgebaut, also mit allem drum und dran:
HTML:
<html><head><title>Titel, aber nicht der Mailheader</title></head>
  <body>
    <h1>Ueberschrift</h1>
    <p>Und das hier ist eine Mail</p>
  </body>
</html>

An meine Firmenadresse wurde die Mail geschickt, jedoch kam sie als HTML-Quelltext an. also statt den HTML Kram zu formatieren, hat der alle HTML-Elemente angezeigt, als würde ich mir den Quelltext angucken...

Kann das an Lotus Notes liegen? Oder hab ich da einen Fehler gemacht?

Bitte um Aufklärung, und evenutell mehr Informationen zum aufbau einer Mail...

danke und gruß
Lukas
 
Also wird es wohl daran liegen, dass den Header nicht gesetzt habe, und der die Mail als plain/text gesendet hat?
Naja, Mails sind mir noch ein Rätsel, mal gucken, was es noch alles dazu zu wossen gibt..

danke für den Hinweis

gruß
Lukas
 
koli.bri schrieb:
Also wird es wohl daran liegen, dass den Header nicht gesetzt habe, und der die Mail als plain/text gesendet hat?
Klingt plausibel :) Aber gut, dass du mit dem Problem aufgetaucht bist, haette mich die Tage auch drum kuemmern muessen – so kann ich schon mal 5 Minuten Arbeit sparen ;)
 
Galanos schrieb:
Klingt plausibel :) Aber gut, dass du mit dem Problem aufgetaucht bist, haette mich die Tage auch drum kuemmern muessen – so kann ich schon mal 5 Minuten Arbeit sparen ;)

5 Minuten... Die stell ich in Rechnung!!!:cool:
Ich denke, 5 Euro sollten drin sein :D
:music: :drum:
 
Hallo,

bei einer einfachen Mail wird Text einfachso "plain" gesandt. Um Mails mit HTML-Inhalt und/oder Dateianhängen zu versenden, muß man sich mit MIME (spezielles Mail-Format) beschäftigen.
Ich hab das mal ein bißchen gemacht und dabei ist folgende kleine Klasse herausgekommen:
Code:
<?php

class multipartmail {
     var $Header;
     var $absender;
     var $subject;
     var $Trenner;
     
     function multipartmail($absender,$subject) {
       $this->absender = $absender;
       $this->subject = $subject;
       $this->Trenner = md5(uniqid(time()));
       $this->Header = "MIME-Version: 1.0\n".
           "Content-Type: multipart/mixed; boundary=$this->Trenner\n\n".
           "This is a multi-part message in MIME format\n";
     }
     
     function addpart($contenttype, $encoding, $content, $name="") {
       $this->Header .= "--$this->Trenner\n".
                  "Content-Type: $contenttype";
       if ($name != "") $this->Header .= "; name=$name";
       $this->Header .= "\n";
       $this->Header .= "Content-Transfer-Encoding: $encoding\n";
       if ($name != "") $this->Header .= "Content-Disposition: attachment; filename=$name\n";
       $this->Header .= "\n";
       switch ($encoding) {
       case "8bit":     $this->Header .= $content; break;
       case "base64":   $this->Header .= chunk_split(base64_encode($content)); break;
       default: die("Fehler in multipartmail: Angabe der Kodierung fehlt.");
       }
       $this->Header .= "\n";
     }
     
     function sendto($empfaenger) {
       $newheader = "From: $this->absender\n".
                    $this->Header.
                    "--$this->Trenner--";
       mail($empfaenger, $this->subject, "", $newheader);
     }
}




$Dateiname = "irgendeineDatei";
$Dateiinhalt = fread(fopen($Dateiname, "r"), filesize($Dateiname));
$themail = new multipartmail("absender@mailserver.de", "Eine Mail der Klasse");
$themail->addpart("text/plain", "8bit", "Dies ist eine Anhangsmail mit MEINER Funktion");
$themail->addpart("text/plain", "base64", $Dateiinhalt, "irgendeinedatei");
$themail->addpart("text/html", "base64", "ob auch <b>HTML</b> geht?");
$themail->sendto("adressat@mailserver.de");
?>

Ich hab die vor ein paar Monaten das letzte Mal benutzt und heute nicht nochmal getestet. Probier' mal, ob dir der Code helfen kann. Ich hoffe, das meiste ist selbsterklärend. Ansonsten halt nochmal fragen. Es gibt garantiert schon fertige Bibliotheken, die funktionsumfangreicher sind, aber ich hab mich halt selbst damit mal beschäftigen wollen.
So könnte man eben auch alternative Inhalte anbieten (Text sowohl in HTML- als auch plain-Format) - das muß ich erst noch realisieren.

Zur Versanddauer. Das dürfte nichts PHP zu tun haben. Bei meinen Mailexperimenten, die ich mit verschiedenen Skriptsprachen gemacht habe, war da jedenfalls kein Zusammenhang zu erkennen. Das ist wie beim Versenden mit dem normalen Emailprogramm. Mal dauert's länger, mal ist die Mail gleich da. Je nach Größe der Mail und Verkehrslage auf der Datenautobahn....

Viel Spaß!
Rajmund
 
Danke für die Mühe die alten Sachen noch mal rauszukramen.
Ich denke, ich werde damit klarkommen, auch wenn sich beim ersten durchlesen ein par Fragen aufkommen. Aber bevor ich die stelle, beschäftige ich mich mal damit.

Zudem, endlich mal ein Beispiel für OOP, das mir auch den Sinn von OOP zeigt. Bisher hab ich mich immer gefragt, wozu das gut ist. Vielen lieben Dank, ich denke, die Fünf Euro, die ich vorhin in Rechnung gestellt habe, kann ich direkt dir geben ^^ ;)

gruß
Luas
 
Prima! Mit den fünf Euro in Flüssigkeit umgewandelt können wir dann auf mein MacBook anstoßen, welches heut oder morgen bei mir ankommt. Ist langsam nicht mehr auszuhalten mit dieser Kiste hier....
 
Bei dem zeitlichen Versatz vom Senden von Mails über php und MAMP habe ich auch keine Regelmäßigkeit feststellen können. Manchmal gehen sie gleich weg, manchmal erst später. Warum auch immer. Auf nem richtigen Webserver gehen sie jedenfalls immer gleich raus!
 
Ich hatte schon das Problem, dass gewisse Mailserver eine Mail aus der PHP Funktion mail() geblockt haben, wenn sie nicht alle geforderten Standards enthalten haben.
Ich würde es mal mit der Klasse von Rajmund versuchen...

Viel glück :)
 
Es besteht freilich die Möglichkeit, die PHP-mail-Funktion gar nicht zu benutzen, sondern sich mit einer eigenen Funktion an einem SMTP-Server anzumelden. Dann dürfte es keine Probleme geben. Ich guck' bei Gelegenheit mal, ob und wo ich dazu noch ein Skript habe.
 
Stif-Meister schrieb:
Ich hatte schon das Problem, dass gewisse Mailserver eine Mail aus der PHP Funktion mail() geblockt haben, wenn sie nicht alle geforderten Standards enthalten haben.
Ich würde es mal mit der Klasse von Rajmund versuchen...

Viel glück :)
In meinem Fall geht es ja nur um Mails, die an mich selbst sind, um mir zu sagen, das sich jemand auf meiner Homepage verewigt hat.

Aber klar, wenns um "externe" Mails geht, werde ich nicht drum herum kommen auf bewährte Mittel zurückzukommen.

Übrigens, eine sehr netter, entspannter Thread, gefällt mir :)
 
Es gibt noch eine weitere Möglichkeit mit Hilfe der Mail-Klasse von PEAR:
PHP:
require 'Mail.php';

$to = 'target@example.com';

$headers = array(
'From' => 'source@example.com',
'Subject' => 'Testmail...');

$body = 'Hier kommt der Inhalt....';

$message =& Mail::factory('mail');
$message->send($to,$headers,$body);

Per Default wird die Mailfunktion von php verwendet. Jetzt kann man ihm noch sagen, wenn er einen anderen Modus verwenden soll (hier SMTP)
PHP:
$params = array(
'host' => 'smtp.example.com',
'port' => 25,
'auth' => true,
'username' => 'smpt-username',
'password' => 'smpt-pwd');
$message =& Mail::factory('smtp',$params);

Oder man bestimmt, dass er sendmail direkt verwenden soll
PHP:
$params = array(
'sendmail_path' => '/usr/sbin/sendmail',
'sendmail_args' => '-oi -t');
$message =& Mail::factory('sendmail',$params);

Mehr dazu unter http://pear.php.net/manual/de/package.mail.php
 
Zuletzt bearbeitet von einem Moderator:
Vielen Dank, aber das geht ja schon weit über meinen Nutzen hinaus. Das wäre mit Kanonen auf Spatzen geschossen. :)

Möge die Nachwelt diesen Thread bei Fragen zu Mails via PHP finden!

gruß
Lukas
 
Manjo schrieb:
Es gibt noch eine weitere Möglichkeit mit Hilfe der Mail-Klasse von PEAR:
PHP:
require 'Mail.php';

PEAR habe ich installiert - aber mit "require" oder "include" findet er die dazugehörigen Pakete bzw. Dateien nicht. Ich denke, da muß man irgendwas im Terminal fummeln... Nur was?

Danke
Badener
 
Nur weil du PEAR installiert hast, heißt das nicht, dass alle PEAR-Packages auch installiert sind! Schau mal, ob PEAR::Mail installiert ist, ansonsten dürfte ein

pear install Mail


auf der Konsole genügen...
 
Das ist installiert und die Installation funktionierte auch über die Konsole.

Allerdings findet er im php-Quelltext das Package bzw. die Datei Mail.php nicht....
 
nur mal so ein hinweis: ich hatte auch so ein problem mit dem mail() befehl. es hat ich aber herausgestellt (nach langer fehlersuche), dass das mail einfach im spamfilter des empfängers hängen geblieben ist *grrr* irgendwie beleiben diese mail gerne irgendwo hängen. :(
 
Zurück
Oben Unten