Funktion mail()

son gohan

Erfahrenes Mitglied
Hallo Forum,

ich versuche die ganze Zeit ein Formular mit der Funktion mail() zu versenden. Dabei habe ich zwei Probleme.

1. Wenn ich das FOrmular auf mein Webserver lade und versende kommt die Email, ich warte schon 3 Stunden nicht an.

2. Wenn ich das Formular über mein Lokalen Srever versenden will bekomme ich die Fehlermeldung:

PHP:
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\Dokumente und Einstellungen\Eigene Dateien\apachefriends\xampp\htdocs\xampp\homepage\anmeldeformular.html on line 81

Jetzt bin ich etwas verunsichert. um Punkt 1 kann es sein das der Webserver halt etwas länger brauch, oder?

Und zu Punkt 2 wird es wohl nicht funktionieren über den Lokalen Server, oder?
 
Zeig uns mal den Quellcode deines Skriptes, dann können wir mehr sagen.
Zu Punkt 2: Du müsstest dir schon einen SMTP Server auf deinem Rechner installieren, sonst kann die Mail nicht versendet werden.
 
Zu Punkt 2, ist das denn kompliziert so einen SMTP Server zu installieren ich nutze als Lokalen Server XAMPP

Hier noch mein mailscript:
PHP:
<?php
$datum_string = date("G:i d.m.Y");
$time_start    = microtime();

function mail_senden($FIRMA, $VOR_ZUNAME, $STRASSE, $PLZORT, $TELEFON, $TELEFAX, $email, $kontakt, $NACHRICHT) {
global $duration;
global $datum_string;
$empfaenger = "de@de";
$text .= "[Message generated automatically from Webserver on $datum_string in $duration seconds]"."\n";
$text .= ""."\n";
$text .= "Kontaktformular"."\n";
$text .= ""."\n";
$text .= "Firmenname: " . $FIRMA . "\n" ;
$text .= ""."\n";
$text .= "Vor- und Nachname: " . $VOR_ZUNAME . "\n" ;
$text .= ""."\n";
$text .= "Strasse: " . $STRASSE . "\n" ;
$text .= ""."\n";
$text .= "PLZ und Ort: " . $PLZORT . "\n" ;
$text .= ""."\n";
$text .= "Telefon: " . $TELEFON . "\n" ;
$text .= ""."\n";
$text .= "Telefax: " . $TELEFAX . "\n" ;
$text .= ""."\n";
$text .= "Email: " . $email . "\n" ;
$text .= ""."\n";
$text .= "Erw&uuml;nschte Kontaktaufnahme per: " . $kontakt . "\n" ;
$text .= ""."\n";
$text .= "Ihre Mitteilung an uns: " . $NACHRICHT . "\n" ;
$text .= ""."\n";
$header = "From: \"de@de\" <de@de.de>" ;
mail($empfaenger, "Betreff", $text, $header);
echo '
<h2>Das Formular wurde erfolgreich versendet.</h2><br />';
}

function fehler() {
echo '
<h2>Fehlende Eingabe !</h2><br />';
}

$time_end = microtime();
$temp         = explode(' ', $time_start.' '.$time_end);
$duration    = sprintf('%.8f',($temp[2]+$temp[3])-($temp[0]+$temp[1]));

if (
empty($VOR_ZUNAME) ||
empty($email)
) {
  fehler() ;
} else {
mail_senden($FIRMA, $VOR_ZUNAME, $STRASSE, $PLZORT, $TELEFON, $TELEFAX, $email, $kontakt, $NACHRICHT) ;
}

Mein richtige Emailadresse habe ich jetzt im Beispiel hier aber extra nicht angegeben.
 
mir ist jetzt etwas neues aufgefallen.

Wenn ich mein Formular über mein andere Webspace Anbieter evanzo.de versende klapt es, aber uber greatnet.de immer noch nicht. Also ein Fehler im Formular selber kann es ja dann nicht mehr sein?
 
Ich glaube auch langsam das es nur am Webserver liegen kann das die Email nicht versendet wird und warte mal ab was die mir am Montag dazu sagen können.

Da ich aber über evanzo.de Webspace das Formular senden kann habe ich mal weiter gearbeitet.

Mein Problem zur Zeit ist es ein Bild in einer HTML Mail zu verschicken. Die Mail kommt an aber das bild irgendwie nicht? Was muss ich alles beachten damit ein bild richtig mit versendet wird?
 
Zuletzt bearbeitet:
son gohan hat gesagt.:
Wie kann ich prüfen das die Email auch als HTML Email angekommen ist?

Da würde ich dir empfehlen, eine HTML-Email rauszusenden (also mit HTML-Tags im Text), und diese dann mit einem HTML fähigen Email Client anzusehen.

Du könntest desweiteren einfach die phpmailer-Klasse verwenden, die macht alles von selbst (Html+Text Version).
Aussehen könnte das dann so:

PHP:
require("class.phpmailer.php");

$mail = new PHPMailer();

$mail->From     = "list@mydomain.com";
$mail->FromName = "List manager";
$mail->Host     = "smtp1.site.com;smtp2.site.com";
$mail->Mailer   = "smtp";

@MYSQL_CONNECT("localhost","root","password");
@mysql_select_db("my_company");
$query  = "SELECT full_name, email, photo FROM employee WHERE id=$id";
$result = @MYSQL_QUERY($query);

while ($row = mysql_fetch_array ($result))
{
    // HTML body
    $body  = "Hello <font size=\"4\">" . $row["full_name"] . "</font>, <p>";
    $body .= "<i>Your</i> personal photograph to this message.<p>";
    $body .= "Sincerely, <br>";
    $body .= "PHPMailer List manager";

    // Plain text body (for mail clients that cannot read HTML)
    $text_body  = "Hello " . $row["full_name"] . ", \n\n";
    $text_body .= "Your personal photograph to this message.\n\n";
    $text_body .= "Sincerely, \n";
    $text_body .= "PHPMailer List manager";

    $mail->Body    = $body;
    $mail->AltBody = $text_body;
    $mail->AddAddress($row["email"], $row["full_name"]);
    $mail->AddStringAttachment($row["photo"], "YourPhoto.jpg");

    if(!$mail->Send())
        echo "There has been a mail error sending to " . $row["email"] . "<br>";

    // Clear all addresses and attachments for next loop
    $mail->ClearAddresses();
    $mail->ClearAttachments();
}
Am besten du siehst dir die Webseite von phpmailer mal an, wirklich eine mächtige Klasse!
 
Danke für deine Hilfe, aber die Klasse ist zu mächtig für mich. Ich bin nur Hoby Programierer, studiere nicht und habe echt nicht viel Ahnung.

Also, mein Problem ist immer noch das mein Bild nicht ankommt in der Mail.

Die Mail versende ich ja vom Webserver aus mit der Funkktion mail(). Der Inhalt der Mail ist HTML und das Bild wie üblich mit einem img Tag eingebunden.

Meine gesendeten header sehen so aus:
PHP:
$headers  = "From: \"dd@dd.de\" <dd@dd.de>\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

Was muss ich noch beachten?
 
Zurück