webForumDet fria alternativet
Logga in / Bli medlem

Problem med mailformulär

PHP

32 svar · 796 visningar · startad av addeweb

Medlem sedan jan. 2004216 inlägg
Trådstart#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);

?>
Medlem 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.

Medlem sedan dec. 2003153 inlägg
#3

Är funktionen send() definierad i klassen?

Medlem 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);

    }
?>
Medlem 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.

Medlem 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.

Medlem sedan jan. 2004216 inlägg
#7

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

Medlem 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 ?>

Medlem 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.

Medlem 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.

Medlem 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

Medlem 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

Medlem 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.

Medlem 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.

Medlem sedan jan. 2004216 inlägg
#15

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

Medlem 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.

Medlem 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;
    }

}
Medlem sedan dec. 2003153 inlägg
#18

Trial and error...

Medlem sedan jan. 2004216 inlägg
#19

Jag begriper inte vad han menar...

Medlem sedan juni 20006 031 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.

275 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
117 ms — ändringar (db)