PHP Aus Formular per SMTP mailen

PEASANT KING

Commander
Registriert
Okt. 2008
Beiträge
2.412
Hallo Leute,

ich habe ein Formular erstellt und dieses Formular sollte nun per SMTP in PHP versendet werden.
Nun bekomme ich aber leider folgende Meldung zurück beim verschicken des Formulars:

Failed to set sender: D [SMTP: Invalid response code received from server (code: 501, response: : sender address must contain a domain)]
Meine mail.php sieht so aus:

PHP:
<?php
$session_start();

require_once "Mail.php";


$from = $_POST['email'];
$to = "<xxx@test.de>";
$message = $_POST['message'];

$host = "www.xxx.de";
$username = "xxxx";
$password = "xxxx";

$headers = array ('From' => $from,
  'To' => $to);
$smtp = Mail::factory('smtp',
  array ('host' => $host,
    'auth' => true,
    'username' => $username,
    'password' => $password));

$mail = $smtp->send($from, $message);

if (PEAR::isError($mail)) {
  echo("<p>" . $mail->getMessage() . "</p>");
 } else {
  echo("<p>Die Nachricht wurde erfolgreich gesendet!</p>");
 }
?>
Woran kann das liegen ?

Update: habe mal <> rausgenommen bei $to jetzt ist der Fehler weg, allerdings bekomm dennoch keine Emails aus dem Formular.
 
Zuletzt bearbeitet:
Du willst spam-Mails an xxx@test.de verschicken?

...sender address...: dein _POST ist das Problem.
 
Lol Scherzbold

Aber warum ist $_POST['email'] das Problem.
Im Formular das Feld email beinhaltet ja eine Email Adresse.
 
Lass Dir das $from mal ausgeben und schau nach, ob es wirklich eine Domain beinhaltet.
 
Die Daten werden alle übergeben mittels POST meine Abfrage wird jetzt mit Request gestartet.
Ich weiß auch warum er das Script nicht ausführt, allerdings weiß ich nicht wie ich das beheben soll.
Bekomme den Fehler 500 Internal Server Error im Firebug angezeigt.
Hat vielleicht Jemand eine Lösung ?
 
Zuletzt bearbeitet:
Hat vielleicht Jemand mehr Informationen? :D
 
Ja ich ^^.
Das Script läuft jetzt, lag an den Einstellungen bei meinem Hoster bzw. meinen nicht eingestellten Einstellungen beim Hoster.
Nur leider wird keine Email versendet.
Der Fehler lautet:
No From: address has been provided
Hat Jemand eine Ahnung wieso ?
Denn eine Email Adresse wird übermittelt -.-

UPDATE:

Gut ein Fehler meinerseits -.-, habe die Absendeadresse mit der Empfängeradresse vertauscht bei
PHP:
$mail = $smtp->send($from, $message);
Allerdings erhalte ich jetzt die Meldung:
Failed to set sender: @localhost [SMTP: Invalid response code received from server (code: 501, response: <@localhost>: no local part)]
Ich werd noch verrückt!
 
Zuletzt bearbeitet:
Irgendwie werde ich aus Deinem Code nicht schlau, kannst Du den aktuellen Code mal bitte posten?

Irgendwie vermisse ich da alle Bestandteile einer Mail:

- Absender (from)
- Empfänger (to)
- Thema (subject)
-----------------------
= Kopf (header)

- Nachricht (message)

Schau mal hier und vergleiche, ob Du wirklich alles angegeben hast:
http://email.about.com/od/emailprogrammingtips/qt/PHP_Email_SMTP_Authentication.htm
 
Zuletzt bearbeitet:
Sorry Leute,

stand die letzten Tage was unter Stress und hab daher sehr flüchtig an dem Script gewerkelt.
So hier mal der aktuelle Code, das Verschicken funktioniert nun auch (eigene Doofheit).
Allerdings kann ich mit der Email nicht alles verschicken was ausgefüllt wurde.
Da ich mich mit Email Versand in PHP noch nicht so wirklich auskenne, weiß ich nicht so recht woran es liegt.

Also hier mal der aktuelle Code:
PHP:
<?php
session_start();

require_once "Mail.php";

$from = $_REQUEST['mail'];
$to = "xxx@xxx.de";
$vorname =$_REQUEST['vorname'];
$nachname =$_REQUEST['nachname'];
$message = $_REQUEST['message'];
$subject = "Kontakt von der Hundeernährungsberatung";

$host = "localhost";
$username = "xxxx";
$password = "xxxx";

$headers = array ('From' => $from,
  'To' => $to,
  'Subject' => $subject,
  'Vorname' => $vorname,
  'nachname' => $nachname);

$smtp = Mail::factory('smtp',
  array ('host' => $host,
    'auth' => true,
    'username' => $username,
    'password' => $password));

$mail = $smtp->send($to, $headers, $message);

if (PEAR::isError($mail)) {
  echo("<p>" . $mail->getMessage() . "</p>");
 } else {
  echo("<p>Die Nachricht wurde erfolgreich gesendet!</p>");
 }

?>
Mir wird allerdings wenn ich im Blog $mail() noch die Variablen Vorname und Nachname angebe nur der Vorname übergeben, die Message weg gelassen und der Nachname auch weggelassen.
Woran liegt da ?
 
Zur unvollständigen Message: kann sein, dass das Mailprogramm auf dem Server nicht alles verarbeiten mag. Dann musst Du es entsprechend codieren (Stichwörter Content-type, charset).

Siehe http://php.net/manual/en/function.mail.php

Code:
$headers = array ('From' => $from,
  'To' => $to,
  'Subject' => $subject,
  'Vorname' => $vorname,
  'nachname' => $nachname);

Das verstehe ich nicht. Ist zwar schon lange her, daß ich mit PHP zu tun hatte, aber die Variablen $vorname und $nachname sollen von $smtp->send automatisch ausgelesen werden? Kann ich mir nicht vorstellen, daß das funktioniert.

Ich würde stattdessen folgendes machen:

$fromHeader = $vorname . ' ' . $nachname ' ' . $fromHeader;
$headers = array ('From' => $fromHeader,
'To' => $to,
'Subject' => $subject);
 
Ja danke sorry das war noch ein Fehler meinerseits.
Vorname und Nachname sollte natürlich mit der Mail versendet werden, allerdings nicht in smtp -> send mitgeschickt werden sondern so:
PHP:
$mail = $smtp->send($to, $headers, $vorname, $nachname, $message);
Allerdings sendet er mir dann nur den Vornamen und der Rest bleibt aus.
Vielleicht bin ich zu blöd, aber kann das sein das $smtp -> send nur die 3 Variablen $to $headers und $message akzeptiert ?
 
Geht so nicht, schau noch mal die API an:

http://www.php.net/manual/de/function.mail.php

bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

--> Du kannst zwar zusätzliche Kopfinformationen mitgeben, aber das ist dann für z.B. cc oder bcc (Kopie bzw. Blindkopie).

Deine Vor- und Nachnamen musst Du so wie ich es beschrieben habe vor dem Aufruf von send in den $from-String verpacken.

Ich glaube Dein Grundverständnisproblem liegt darin, dass Du meinst, weil die Variable $vorname so heisst wie die Information, die Du darin transportieren willst, erscheint dies automatisch wie gewünscht.

Entscheidend ist die Position im Aufruf.
Code:
bool mail  ( string $to  , string $subject  , string $message  [, string $additional_headers  [, string $additional_parameters  ]] )

1. Parameter (egal wie er heisst, der könnte statt $to auch $zweipfundbutter heissen) = Empfänger der Mail
2. Parameter = Thema / subject
3. Parameter = Nachricht / message
usw.

In den Beschreibungen werden nur möglichst sinnvolle Namen verwendet, damit man möglichst gleich erkennt, wofür der Parameter ist. Der Name ist hiebei beliebig!
 

Ähnliche Themen

N
Antworten
8
Aufrufe
2.808
N
N
Antworten
9
Aufrufe
1.756
Zurück
Oben