webForumDet fria alternativet

Problem med mailformulär

32 svar · 796 visningar · startad av addeweb

addewebMedlem sedan jan. 2004216 inlägg
#1

Jag har fått ett problem med ett mailformulär.
Felmeddelandet som jag har fått efter att ha
tryckt på submitknappen i formuläret på sidan
kontakt.php:
Fatal error: Call to undefined function:
send() in C:\Ex-jobb\teqla\kontakt\send_mail.php on line 71

Det gäller sista raden i koden nedan. Jag har
Mail-classen includerad också. Funktionen send()
finns med i den filen. Vad är det som jag har missat??

<?php

 include("Mail.php");
 
$toMail = $_POST['toMail'];
$fromMail = $_POST['fromMail'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$fil = $_POST['fil'];

$recipients = $toMail;

$headers["From"]    = $fromMail;

$headers["To"]      = $toMail;

$headers["Subject"] = $subject;

$headers["fil"] = $fil;

$body = $message;

$mail_params = array(
         "host"      => "din.smtp-server.nu",
         "port"      => 25,
          "auth"      => true,
         "username"  => "user",
         "password"  => "losen"
      );

$mail =& Mail::factory("smtp", $mail_params);
$mail->send($recipients, $headers, $body);

?>
addewebMedlem sedan jan. 2004216 inlägg
#2

Om det inte skulle gå att använda mail-classen i koden, vad gör jag då istället? I vilket fall som helst måste jag använda användarnamn och lösenord i koden för att få tillgång till en smtp-server.

lunne82Medlem sedan dec. 2003153 inlägg
#3

Är funktionen send() definierad i klassen?

addewebMedlem sedan jan. 2004216 inlägg
#4

Jag har sett att funktionen finns med i klassen.
Här är send-funktionen:

 <?php
  function send($recipients, $headers, $body)
    {
        // if we're passed an array of recipients, implode it.
        if (is_array($recipients)) {
            $recipients = implode(', ', $recipients);
        }

        // get the Subject out of the headers array so that we can
        // pass it as a seperate argument to mail().
        $subject = '';
        if (isset($headers['Subject'])) {
            $subject = $headers['Subject'];
            unset($headers['Subject']);
        }

        // flatten the headers out.
        list(,$text_headers) = Mail::prepareHeaders($headers);

        return mail($recipients, $subject, $body, $text_headers);

    }
?>
kjellMedlem sedan dec. 1999757 inlägg
#5

Kan du byta ut

include("Mail.php");

mot

require 'Mail.php';

så man säkert vet att funktionen finns tillgänglig.

silfverMedlem sedan apr. 200312 679 inlägg
#6
Mail.php

Tänk på det där med liten och stor bokstav också. Det måste på de flesta servrar stämma överens.

addewebMedlem sedan jan. 2004216 inlägg
#7

Jag har bytt till require('Mail.php'); men fortfarande funkar det inte.

kjellMedlem sedan dec. 1999757 inlägg
#8

Ok, antar att det är samma felmeddelande och då hittar vi uppenbarligen Mail.php

Funktionen hittas dock inte och det måste ju bero på något. Kan det vara så att du använder PHP5 och classen inte är definerad och därav inte får tag i funktionen?
Vad händer om du infogar funktionen direkt i skriptet, exempelvis på raden före avslutande ?>

addewebMedlem sedan jan. 2004216 inlägg
#9

Har tidigare kollat vilken version som gällde med hjälp av phpinfo.php. Det var inte PHP5 men jag ska lägga in funktionen direkt i skriptet och se om det funkar under helgen. Återkommer om det skulle bli något nytt problem.

addewebMedlem sedan jan. 2004216 inlägg
#10

Har provat med att lägga in funktionen i själva skriptet men ändå funkar det inte med samma resultat. Har även kollat postvariablerna som är ok. Jag vet fortfarande inte vad som är fel.

lunne82Medlem sedan dec. 2003153 inlägg
#11

Är nog enklare att säga vad som är fel om man får se koden i Mail.php

tronezMedlem sedan juli 2001728 inlägg
#12

Det är nog inte fel på den koden, Mail.php, jag förmodar att det är PEAR mailclass som används? Om inga ändringar gjorts där så ska det ju inte vara nåt fel på den

addewebMedlem sedan jan. 2004216 inlägg
#13

I filen Mail.php finns raden require_once 'PEAR.php'; vilket innebär att denna fil ska finnas i samma katalog som Mail.php. Det finns en annan sak som finns med i Mail-filen: include_once 'Mail/RFC822.php';. Tydligen ska jag också ha med Mail-katalogen som innehåller RFC822-filen plus andra filer. Jag får pröva om det funkar.

addewebMedlem sedan jan. 2004216 inlägg
#14

När jag nu har lagt in Mail-katalogen, fick jag istället ett annat felmeddelande med andra problem:
**Warning: send(Net/SMTP.php): failed to open stream: No such file or directory in C:\kontakt\Mail\smtp.php on line 148

Warning: send(): Failed opening 'Net/SMTP.php' for inclusion (include_path='.;c:\php4\pear') in C:\kontakt\Mail\smtp.php on line 148

Fatal error: Cannot instantiate non-existent class: net_smtp in C:\kontakt\Mail\smtp.php on line 150**

Jag har kollat i smtp-filen och konstaterat att man ska fylla i vilken smtp-server, användarnamn och lösenord där det krävs. Men den kod som jag har lagt in i första inlägget och som också innehåller smtp-server, användarnamn och lösenord? Nu vet jag varken ut eller in vad jag ska göra.

addewebMedlem sedan jan. 2004216 inlägg
#15

Finns det någon som kan hjälpa mig??

lunne82Medlem sedan dec. 2003153 inlägg
#16

Tja, det står ju där att sökvägen inte är korrekt. Kolla på rad 148 i smtp.php och jämför det med den riktiga sökvägen till filen.

addewebMedlem sedan jan. 2004216 inlägg
#17

Rad 148 gäller include_once 'Net/SMTP.php';
Ska man också ha den filen med? Jag har inte kunnat hitta en sådan fil på samma ställe som de andra klasserna.

smtp.php:

function send($recipients, $headers, $body)
    {
        include_once 'Net/SMTP.php';

        if (!($smtp = &new Net_SMTP($this->host, $this->port, $this->localhost))) {
            return PEAR::raiseError('unable to instantiate Net_SMTP object');
        }

        if ($this->debug) {
            $smtp->setDebug(true);
        }

        if (PEAR::isError($smtp->connect())) {
            return PEAR::raiseError('unable to connect to smtp server ' .
                                    $this->host . ':' . $this->port);
        }

        if ($this->auth) {
            $method = is_string($this->auth) ? $this->auth : '';

            if (PEAR::isError($smtp->auth($this->username, $this->password,
                              $method))) {
                return PEAR::raiseError('unable to authenticate to smtp server');
            }
        }

        $headerElements = $this->prepareHeaders($headers);
        if (PEAR::isError($headerElements)) {
            return $headerElements;
        }
        list($from, $text_headers) = $headerElements;

        /* Since few MTAs are going to allow this header to be forged
         * unless it's in the MAIL FROM: exchange, we'll use
         * Return-Path instead of From: if it's set. */
        if (!empty($headers['Return-Path'])) {
            $from = $headers['Return-Path'];
        }

        if (!isset($from)) {
            return PEAR::raiseError('No from address given');
        }

        $args['verp'] = $this->verp;
        if (PEAR::isError($smtp->mailFrom($from, $args))) {
            return PEAR::raiseError('unable to set sender to [' . $from . ']');
        }

        $recipients = $this->parseRecipients($recipients);
        if (PEAR::isError($recipients)) {
            return $recipients;
        }

        foreach ($recipients as $recipient) {
            if (PEAR::isError($res = $smtp->rcptTo($recipient))) {
                return PEAR::raiseError('unable to add recipient [' .
                                        $recipient . ']: ' . $res->getMessage());
            }
        }

        if (PEAR::isError($smtp->data($text_headers . "\r\n" . $body))) {
            return PEAR::raiseError('unable to send data');
        }

        $smtp->disconnect();
        return true;
    }

}
lunne82Medlem sedan dec. 2003153 inlägg
#18

Trial and error...

addewebMedlem sedan jan. 2004216 inlägg
#19

Jag begriper inte vad han menar...

PeddaMedlem sedan juni 20006 032 inlägg
#20

addeweb skrev:

Rad 148 gäller include_once 'Net/SMTP.php';

Det innebär ju att du ska ha en mapp som heter Net med en fil i som heter SMTP.php
Har du inte det? Om du inte har det så verkar det ju inte vara ett komplett skript som du har fått tag i.

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)