Formmailer mailt nicht -> Fehlermeldung: Permission denie

Postfix, QMail, Sendmail, Dovecot, Cyrus, Courier, Anti-Spam
neo2001
Posts: 40
Joined: 2002-09-12 19:04
Location: Bad Herrenalb

Formmailer mailt nicht -> Fehlermeldung: Permission denie

Post by neo2001 » 2004-07-23 11:45

Hallo!

Hab meinen Server reinitialisieren lassen (SuSe 9.1 / Confixx 3.0.x). Im Grunde funktioniert soweit alles, auch der Mailer bzw. das Versenden von Mails aus einer Forensoftware wie z.B. phpBB oder vBulletin...

Nun hab ich aber auch ein web auf dem Server laufen, dass mit phpCMS und einem dort als Plugin eingebundenen Formmailer läuft. Bisher (SuSe 7.x) hat das auch wunderbar funktioniert. Aber jetzt erhalte ich im error_log des Apachen beim Versuch eine Mail über das Script zu senden folgende Meldung:

Code: Select all

sh: line 1: /home/htdocs/empty//sendmail: Permission denied
Kann es sein, dass das was mit dem Safe Mode zutun hat? Also das Script "selbst Schuld" ist? Oder kann jemand allein aus der Fehlermeldung eine Fehlerquelle ableiten?

Wäre echt Klasse wenn ihr ein paar Tipps für mich hättet! :)

neo2001
Posts: 40
Joined: 2002-09-12 19:04
Location: Bad Herrenalb

Re: Formmailer mailt nicht -> Fehlermeldung: Permission denie

Post by neo2001 » 2004-07-23 12:00

Das hier ist das Script, dass die Mail versendet:

Code: Select all

<?php
###############################################################
# PlugIn, um Formulardaten in phpCMS der Nachwelt zur erhalten!
# Dieses Script benötigt das phpCMS-System von Michael Brauchl
# neueste Version auf http://www.phpcms.de!
#
# basiert auf dem PlugIn "SimpleForm" von Michael Brauchl
# erweitert um Mailfunktion....
# Feedback, Anmerkungen, etc. an dirk@tus97.de
#
# Erweiterungen in 1.1: Fehlermeldung bei Fehlen eines oder mehrerer Felder beseitigt (Vielen Dank
# an Jörg Dennis Krüger für die Anregung und Umsetzung (jdk@jdk.de)!
#
# -> no condition is permanent!
###############################################################

# Zielverzeichnis für Datei einstellen! Dieses Verzeichnis muß eingerichtet sein.
$target_dir = $PHP->GetDocRoot().$CHECK_PAGE->path.'/forms/';

# Variable $wastun einstellen. Bestimmt, was mit den Formulardaten passiert:
# "1": Datei an angegebene Stelle schreiben,
# "2": Mail an Empfänger schicken
# "3": beides!!
$wastun = "2";

# Name der Zieldatei festlegen (für "1" und "3" erforderlich!!)
$target_name = $REMOTE_ADDR.'_'.time ();

# Mailempfänger festlegen (für "2" und "3" erforderlich!!)
$empfaenger = "info@xxxxxxx.com";

# Betreff der Mail festlegen
$betreff = "Nachricht von der xxxxxxxx Homepage";

# Absender festlegen
$absender = "formmailer@xxxxxx.com";

# Zählt die Tags, die in Verwendung sind
$current = count($Tags);

# Wenn Get-Variablen vorhanden sind:
if (isset($HTTP_GET_VARS))
        {
        $i=0;
        while (list($k,$v) = each($HTTP_GET_VARS))
                {

                if ($v == ""){
                $v = "nicht angegeben";
                }

                $Tags[($current+$i)][0] = '<#'.$k.'#>';
                $Tags[($current+$i)][1] = $v;
                $form[$i][0] = $k;
                $form[$i][1] = $v;
                $i++;
                }
        }


# Zählt die Tags, die in Verwendung sind
$current = count($Tags);
$i = 0;

# Wenn Post-Variablen vorhanden sind:
if (isset($HTTP_POST_VARS))
        {
        $i=0;
        while (list($k,$v) = each($HTTP_POST_VARS))
                {
                 if ($v == ""){
                $v = "nicht angegeben";
                }
                $Tags[($current+$i)][0] = '<#'.$k.'#>';
                $Tags[($current+$i)][1] = $v;
                $form[$i][0] = $k;
                $form[$i][1] = $v;
                $i++;
                }
        }


# Zählt die Tags, die in Verwendung sind
$current = count($Tags);
$Tags[$current][0] = '<#time#>';
$Tags[$current][1] = date ( "H:i" , time () );
$Tags[$current+1][0] = '<#IP#>';
$Tags[$current+1][1] = $REMOTE_ADDR;

# Ein paar Infos sammeln!
$uhrzeit= date ( "H:i" , time () );

# Abfrage, was getan werden soll! Einstellungen s.o.!
switch ($wastun) {
    case "1": {
         # nur die Datei erzeugen
         $fp = fopen($target_dir.$target_name, "w+");
           for ($i=0; $i<count($form); $i++)
             {
             $entry = $form[$i][0].' = '.$form[$i][1]."n";
             $len = strlen($entry);
             fputs ($fp, $entry, $len);
             }
          fclose ($fp);
             }
    break;

    case "2": {
         # nur die Mail senden
         $fd = popen("/usr/sbin/sendmail -t ","w");
            fputs($fd, "To: $empfaengern");
            fputs($fd, "From: $absendern");
            fputs($fd, "Subject: $betreffn");
            fputs($fd, "Ein Formular wurde ausgefuellt!nFolgende Daten wurden uebermittelt:nn");
            for ($i=0; $i<count($form); $i++)
              {
               $entry = $form[$i][0].' = '.$form[$i][1]."n";
               $len = strlen($entry);
               fputs ($fd, $entry, $len);
              }
            fputs($fd, "nIP-Adresse des Absenders: $REMOTE_ADDR");
            fputs($fd, "nSendeuhrzeit: $uhrzeit");
         pclose($fd);
    }
    break;

    case "3": {
         # Werte in Ausgabe Schreiben und ...
         $fp = fopen($target_dir.$target_name, "w+");
         for ($i=0; $i<count($form); $i++)
            {
             $entry = $form[$i][0].' = '.$form[$i][1]."n";
             $len = strlen($entry);
             fputs ($fp, $entry, $len);
            }
         fclose ($fp);
         # ... Mail senden
         $fd = popen("/usr/sbin/sendmail -t ","w");
          fputs($fd, "To: $empfaengern");
          fputs($fd, "From: $absendern");
          fputs($fd, "Subject: $betreffnn");
          for ($i=0; $i<count($form); $i++)
             {
               $entry = $form[$i][0].' = '.$form[$i][1]."n";
               $len = strlen($entry);
               fputs ($fd, $entry, $len);
             }
          pclose($fd);
    }
    break;
  }
?>

mc5000
Posts: 308
Joined: 2004-06-17 11:56
Location: Köln

???

Post by mc5000 » 2004-07-23 13:05

jetzt so direkt nicht .. aber wieso mit popen und nicht einfach per mail()??

die Fehlermeldung sagt ja, dass sendmail nicht aufgerufen werden darf und dass er in
/home/htdocs/empty//sendmail
danach sucht, das kann nicht richtig sein, oder?

ich würde auch tippen, das keine berechtigung besteht unterhalb von /home/htdocs/empty/ dateien zu ändern .....

neo2001
Posts: 40
Joined: 2002-09-12 19:04
Location: Bad Herrenalb

Re: Formmailer mailt nicht -> Fehlermeldung: Permission denie

Post by neo2001 » 2004-07-23 13:10

Hallo!

Ich kenne mich mit PHP (noch) nicht so aus, bin gerade erst dabei mir die Basics draufzuschaffen. Wäre es möglich das vorhandenen Script mit der von Dir genannten Funktion relativ einfach "umzubauen" oder sind da wesentliche Strukturänderungen nötig?

mc5000
Posts: 308
Joined: 2004-06-17 11:56
Location: Köln

Re: Formmailer mailt nicht -> Fehlermeldung: Permission denie

Post by mc5000 » 2004-07-23 13:20

anstatt:

Code: Select all

# nur die Mail senden 
$fd = popen("/usr/sbin/sendmail -t ","w"); 
fputs($fd, "To: $empfaengern"); 
fputs($fd, "From: $absendern"); 
fputs($fd, "Subject: $betreffn"); 
fputs($fd, "Ein Formular wurde ausgefuellt!nFolgende Daten wurden uebermittelt:nn"); 
            for ($i=0; $i<count($form); $i++) 
              { 
               $entry = $form[$i][0].' = '.$form[$i][1]."n"; 
               $len = strlen($entry); 
               fputs ($fd, $entry, $len); 
              } 
            fputs($fd, "nIP-Adresse des Absenders: $REMOTE_ADDR"); 
            fputs($fd, "nSendeuhrzeit: $uhrzeit"); 
         pclose($fd);
hätte ich folgende geschrieben:

Code: Select all

$message = "Ein Formular wurde ausgefuellt!nFolgende Daten wurden uebermittelt:nn"; 
for ($i=0; $i<count($form); $i++) 
{ 
          $entry = $form[$i][0].' = '.$form[$i][1]."n"; 
          $message .= $entry; 
} 
mail($empfaenger, $betreff, $message, $absender);
oder so ähnlich - nur aus'm kopf herraus ...
da fehlen noch ein paar header, erklärt hier:
http://de2.php.net/manual/de/ref.mail.php

mit Beispiel:

Code: Select all

<?php
mail("nobody@example.com", "Betreff", $message,
     "From: webmaster@{$_SERVER['SERVER_NAME']}rn"
    ."Reply-To: webmaster@{$_SERVER['SERVER_NAME']}rn"
    ."X-Mailer: PHP/" . phpversion());
?>
aber wo dein fehler liegt weiss ich nicht wirklich :wink: