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??
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.
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);
}
?>
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 ?>
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.
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.
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
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.
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.
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;
}
}
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