E-Mails versenden per PHP
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
bekommen
code
destination
display
file
funktion
funktionieren
header
http
message
mime
not
problem
schau
server
set
test
text
url
versenden
-
Ich hatte mich vor ein paar Monaten schonmal damit beschäfitgt, leider ohne Erfolg und dachte ich nehme das Problem nochmal in Angriff. Hatte damals einige Tuts durchgearbeitet, habs auch mit APIs versucht und mir sogar nen eigenen Mailserver eingerichtet, aber nichts funktionierte wirklich so, wie es sollte. Deshalb frage ich nun euch, wie ich das am besten bewerkstellige. Für mich ist es vollkommen ausreichend, wenn 3 Dinge funktionieren:
- Die Mail kommt beim Empfänger an
- Ich stehe als Absender drin
- Und ich kann nen <a href>-Link drin einbauen, der dann auch richtig funktioniert.
Alles andere brauche ich nicht. Am liebsten wäre mir, ihr postet hier die Codes, die bei euch selbst auch funktionieren. Bei Google hab ich genug Schrott gefunden.
Liebe Grüße
- VampireSilence -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo vampiresilence,
also das E-Mail versenden ist eigentlich nicht so schwierig.
Also Schau dir die beispiele auf php.net an. Die Dort geposteten funktionieren.
http://de.php.net/manual/de/function.mail.php
(evtl auch die bei den Kommentaren weiter unten)
EDIT:
Es wäre auch noch interessant zu wissen was nicht / schon funktioniert hat.
Beitrag zuletzt geändert: 11.1.2009 22:18:39 von dussel -
Falls du HTML und Text-Mails als Kombi versenden willst empfiehlt sich mit unter ein Framework zu benutzen.
Ich benutze dafür meist http://www.xpertmailer.com/
Die Klassen bauen den String zusammen, der dann in die PHP Mail Funktion aufgerufen wird. Alternativ kannst du auch Mails über andere Server direkt versenden lassen. Schau´s dir halt mal an wenn du magst.
Das wäre dann folgender Code...
<?php define('DISPLAY_XPM4_ERRORS', true); // display XPM4 errors require_once '/path-to/MIME.php'; // path to 'MIME.php' file from XPM4 package // set text/plain version of message $text = MIME::message('Text version of message.', 'text/plain'); // set text/html version of message $html = MIME::message('<b>HTML</b> version of <u>message</u>.', 'text/html'); // compose message in MIME format $mess = MIME::compose($text, $html); // send mail $send = mail('client@destination.net', 'Hello World!', $mess['content'], 'From: me@myaddress.net'."\n".$mess['header']); // print result echo $send ? 'Sent !' : 'Error !'; ?>
Grüßle
Beitrag zuletzt geändert: 12.1.2009 12:39:03 von scout -
Wenn du das mit Xampp machen willst, steht hier wie das geht:
http://betamode.de/2006/08/25/xampp-mercury-553-we-do-not-relay-non-local-mail-sorry/
Configuration -> Connection Control -> Haken bei “Do not permit SMTP relaying of non-local mail” wegmachen.
Benutze diese Funktion jedoch mit bedacht, und sei dir sicher, was du tust.
Gruß, Prog -
So, hab mir mal euren ganzen Links durchgelesen und bin letztendlich bei Scout's Variante hängen geblieben, weil dort endlich alles lief. Bin nun auch einigermaßen auf den Trichter gekommen, warum es einfach nicht funktionieren konnte. Und zwar hatte ich damals einen eigenen (privaten) Apache (ja - auch noch unter Windows) und der war nichtmal ansatzweise dazu konfiguriert, Mails zu verschicken. Mit dem Framework funzt aber alles einwandfrei. Muss nur noch dieses komische "Integriert Anhang folgt" weg bekommen, dann ist es perfekt. Danke euch allen !!!
Liebe Grüße
- VampireSilence -
vampiresilence schrieb:
Muss nur noch dieses komische "Integriert Anhang folgt" weg bekommen, dann ist es perfekt.
Bist du sicher, dass das Framework das in die Mail setzt? Sowas hab ich bei mir no9ch nie gesehen. Evtl. macht das ja dein eMail Client.
Welchen eMail Client nutzt du?
Welche xpertMailer Variante nutzt du? (MIME.php / SMTP.php / MAIL.php )
Grüßle -
Ich benutze die neuste, die es gab Version 4 (0.5). Habe einfach alle Dateien des PHP5 Ordners hochgeladen, was davon nun tatsächlich genutzt wird, weiss ich nicht. Habe aber das Script nach deiner Vorlage eingebunden (xmp4/MIME.PHP), daher würde ich am ehesten auf MIME tippen. Nehme aber auch an, dass dieser Satz von Yahoo generiert wird, da ich ihn nirgendwo im Script entdeckt habe (geschweige denn überhaupt irgendeinen deutschen Satz).
EDIT:
Nun hat sich gerade ein neues Problem aufgetan. Kleines Beispiel:
Das hier funktionert, die E-Mail wird versandt:
$html = MIME::message('<b>E-Mail</b>-Test erfolgreich ! bla blubb', 'text/html');
Dies hier wird aber nicht versandt:
$MSG = '<b>E-Mail</b>-Test erfolgreich ! bla blubb'; $html = MIME::message($MSG, 'text/html');
Heisst das etwa, dass ich dort keine Variablen verwenden kann ? Wäre nicht so prickelnd...
Liebe Grüße
- VampireSilence
Beitrag zuletzt geändert: 14.1.2009 17:24:10 von vampiresilence -
vampiresilence schrieb:
Das hier funktionert, die E-Mail wird versandt:
$html = MIME::message('<b>E-Mail</b>-Test erfolgreich ! bla blubb', 'text/html');
Dies hier wird aber nicht versandt:
$MSG = '<b>E-Mail</b>-Test erfolgreich ! bla blubb'; $html = MIME::message($MSG, 'text/html');
Heisst das etwa, dass ich dort keine Variablen verwenden kann ? Wäre nicht so prickelnd...
Also da mußte dich irgendwie vertan haben, finde aber jetzt auch keinen Fehler in deinem Script.
Ich habs mal kurzu so getestet und es hat funktioniert:
<?php define('DISPLAY_XPM4_ERRORS', true); // display XPM4 errors require_once './mail405/MIME.php'; // path to 'MIME.php' file from XPM4 package $text = MIME::message('Text version of message.', 'text/plain'); $MSG = '<b>HTML</b> version of <u>message</u>.'; $html = MIME::message($MSG, 'text/html'); $mess = MIME::compose($text, $html); $send = mail('xxx@gmx.de', 'Hello World!', $mess['content'], 'From: me@myaddress.net'."\n".$mess['header']); echo $send ? 'Sent !' : 'Error !'; ?>
Grüßle
Beitrag zuletzt geändert: 14.1.2009 20:30:41 von scout -
Also den Code habe ich genau wie du, nur hab ich die Originalkommentare drin gelassen, was ya mit Sicherheit keinen Einfluss auf den Code haben wird. Habe gerade mal nen "Langzeittest" gemacht, d.h. mit dem Script 2 E-Mails zeitgleich versenden lassen (eine mit rawtext, eine mit variable) und siehe da, beide kamen an. Um 2,5 h versetzt.
Hatte das 5 mal gemacht und 3 Doppelmails kamen an (die 5 ohne Variable yedoch komplett). Also ich weiss noch nicht so recht, was ich davon halten soll. Könnte mir höchstens vorstellen, dass Lima die Mails erst einer Prüfung unterzieht, wenn sie unter Verwendung von Variablen erstellt werden und sie dann erst ausstellt, sobald eine Gefahr für den Empfänger ausgeschlossen werden kann. Ansonsten bin ich ratlos...
EDIT: Das mit den Links funktioniert übrigens auch noch nicht, wie es soll. Yede erdenkliche Zieladresse wird umgewandelt in:
<a rel='nofollow'>...</a>
Liebe Grüße
- VampireSilence
Beitrag zuletzt geändert: 14.1.2009 20:44:39 von vampiresilence -
Hmm, also wenn du magst kannst du auch mal den Lima-Server außen vor lassen, dann wird die Mail direkt von PHP zu dem Ziel-Mailserver versucht zuzustellen. Wenn dann natürlich das PHP versagt, wird die Mail nie zugestellt und keiner bekommt es mit.
Code wäre dann folgender zu verwenden:
<?php define('DISPLAY_XPM4_ERRORS', true); // display XPM4 errors require_once '/path-to/SMTP.php'; // path to 'SMTP.php' file from XPM4 package $f = 'me@mydomain.net'; // from mail address $t = 'client@destination.net'; // to mail address // standard mail message RFC2822 $m = 'From: '.$f."\r\n". 'To: '.$t."\r\n". 'Subject: test'."\r\n". 'Content-Type: text/plain'."\r\n\r\n". 'Text message.'; $h = explode('@', $t); // get client hostname $c = SMTP::MXconnect($h[1]); // connect to SMTP server (direct) from MX hosts list $s = SMTP::Send($c, array($t), $m, $f); // send mail // print result if ($s) echo 'Sent !'; else print_r($_RESULT); SMTP::Disconnect($c); // disconnect ?>
Also das mit deinen Links scheint wieder dein Mail-Client zu machen. Ich nehme mal an du benutzt ein Webmail Client. ;o)
Grüßle
Beitrag zuletzt geändert: 15.1.2009 15:22:34 von scout -
Ich nutze wie gesagt Yahoo und bekomme da genug Links, die ich auch alle einwandfrei anklicken kann. Vermutlich hat der "Integrierte Anhang" und die nofollow-Links einen gemeinsamen Ursprungsfehler, den ich mir allerdings nicht erklären kann. Ich werde das ganze mal bei einem anderen Service testen und sehen wie es läuft. Melde mich dann per Edit zurück.
Liebe Grüße
- VampireSilence -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage