phpMailer, Klasse wird nicht gefunden

Amschti

Erfahrenes Mitglied
Ich weiss jetzt nicht wohin mit dieser Frage, deshalb komme ich in mein vertrautes Forum, in dem ich schon lange nicht mehr war :)

Ich habe mir gerade den phpMailer eingerichtet... eigentlich alles gut nur... kommt nun die fehlermeldung
Code:
Fatal error: Class 'SMTP' not found in D:\www\www1019\data-glas\pdf\phpmailer\class.phpmailer.php on line 1195

Ist mir ein rätsel, ich habe aber auch wirklich rein gar nichts an diesem Code gebastelt, also muss es entweder an meinem Server liegen oder... ich habe das ganze falsch requeiered....

Der Code sieht so aus.... ( ich lasse mal alle Kommentare drin ) Ich schätze es liegt irgendwie am Pfad
ich habe das ini_get deaktiviert (erhlich gesagt, das hab ich noch nie gebraucht. Was ist das?)

PHP:
<?php
// Sind die kopierten Dateien nicht im selben Verzeichnis, dann
// den include-Pfad dorthin erweitern. In diesem Beispiel gehe
// ich davon aus, daß es ein Verzeichnis phpmailer gibt
// Aktueller Pfad


function mailer($id_handler,$empfaenger_mails,$empfaenger_names,$betreff,$txt,$pdf){

include("../mysql.php");
//Händler
$q = mysql_query("SELECT * FROM gd_handler_mail WHERE id = '$id_handler' && aktiv = '1'");
if(!mysql_num_rows($q)>0){
$q = mysql_query("SELECT * FROM gd_handler_mail WHERE id = '0'");
}else{
$q = mysql_query("SELECT * FROM gd_handler_mail WHERE id = '$id_handler'"); }
$handler = mysql_fetch_assoc($q);




//$pfad = ini_get("include_path");
// Pfad erweitern
$pfad .= "phpmailer/";
// Pfad setzen
echo '<br />Pfad='.$pfad.'<br />';
ini_set("include_path", $pfad);
// Die Klasse einbinden
require("class.phpmailer.php");
//require 'PHPMailerAutoload.php';
// Das Objekt erzeugen
$mail = new PHPMailer();
// Wenn mit der Language-Datei gearbeitet werden soll,
  // dann setzten wir hier die Sprache und Pfad
  $mail->SetLanguage ("de", "phpmailer/language");
  // In den meisten Fällen benutzen wir einen SMTP-Server
  $mail->IsSMTP();
  // Der SMTP-Server ist der gleiche Server, wie er im Mail-Client
  // (Outlook, Pegasus, etc) eingetragen ist

  $mail->Host     = $handler['host'];
  // Meistens wird eine Authentifizierung gebraucht
  ($handler['SMTPAuth'] == 1)? $mail->SMTPAuth = true : $mail->SMTPAuth = false ;
  // Der Benutzername, wie er im Mail-Client eingetragen ist
  // Nicht zu verwechseln mit der Mail-Adresse, bei manchen
  // Servern ist aber der Benutzername gleich der Adressse
  (!empty($handler['Username']))? $mail->Username = $handler['Username']: '';
  // Und nun das Passwort, wie es auch im Mail-Client benutzt wird.

   (!empty($handler['Password']))?$mail->Password = $handler['Password']:'';
  // Die Absenderadresse
  (!empty($handler['From']))?$mail->From   = $handler['From']:'';
  // Der Absendername, nicht zwingend erforderlich
  (!empty($handler['FromName']))?$mail->FromName = $handler['FromName']:'';
  // Die Empfängeradresse eintragen, der zweite Parameter ist optional


   // empfänger
$maillist = explode("|",$empfaenger_mails);
$namelsit = explode("|",$empfaenger_names);
for($i=0;$i<count($maillist);$i++){
echo 'for schleife first attatch = ='.$maillist[$i].'<br />';
if(!empty($empfaenger_names)){
  $names =   $empfaenger_names;
}

        $mail->AddAddress($maillist[$i],$names);

    }









  // Hier könnte man noch mehr Adressen eintragen
  // Falls CC dann (der zweite Parameter ist optional)
  //$mail->AddCC("donald@duck.de","Donald Duck");
  // Hier könnte man noch mehr CC's eintragen
  // Das geht natürlich auch mit BCC,
  // auch hier ist der zweite Parameter optional
  //$mail->AddBCC("dagobert@duck.de","Dagobert Duck");
  // Hier könnte man noch mehr BCC's eintragen
  // Ein Attachmennt ist auch kein Problem
  if(isset($pdf)){
   $mail->AddAttachment($pdf);
  }

  // Ein zweites Attachmennt ist auch kein Problem
  //$mail->AddAttachment("./zip/eine_zip_datei.zip");
  // Der Betreff
  $mail->Subject  =  $betreff;
  // Wenn man eine HTML-Mail verschicken möchte
  //$mail->IsHTML(true);
  // Der Body
  $mail->Body  =  $txt;
  // Bei einer HTML-Mail sollte man hier einen
  // Text angeben, falls der Empfänger keine HTML-Mails
  // lesen kann, und nicht dumm aus der Wäsche guckt.
//$mail->AltBody  =  "Ohh, keine HTML-Mail";
  // Das sollte es für die meistem Fälle gewesen sein
  // Also schicken wir die Mail ab
  if( ! $mail->Send())   {      echo "Mist, da hat was nicht funktioniert! <p>";      echo "Mailer Error: " . $mail->ErrorInfo;   }   else    echo "Hurra, die Mail ist raus.";

  }
  ?>
 
„ich habe aber auch wirklich rein gar nichts an diesem Code gebastelt“ und „ich habe das ini_get deaktiviert“.

Wirklich rein gar nichts gebastelt.

Ja, du hast ein Pfadproblem. Es ist aber kaum sinnvoll möglich, das per Ferndiagnose zu finden, wenn unbekannt ist, welchen Code du da wie genau angeordnet hast (und wie der aufgerufen wird).

Die aktuelle Version von class.phpmailer.php inkludiert die SMTP-Klasse zum Beispiel gar nicht mehr selbst:

- https://github.com/PHPMailer/PHPMailer/blob/master/class.phpmailer.php

Das heißt, du hast irgendeine Version. Das kommt erschwerend hinzu.

Du musst irgendwas auf den korrekten Wert (Pfad) setzen.

Eine Config-Einstellung? – Keine Ahnung.

Den globalen Include-Pfad? – Keine Ahnung.

Welcher Wert in deinem Setup korrekt ist? – Keine Ahnung.

Das lässt sich ohne Gesamtüberblick nicht sagen. Den müsstest du uns verschaffen. Das Problem dabei ist jetzt nur, dass du für eine entsprechende Erklärung wahrscheinlich das Verständnis bräuchtest, mit dem du dein Problem auch ohne fremde Hilfe lösen könntest. :)

Pack notfalls alles in ein Zip und lad das irgendwo hoch, damit sich das jemand ansehen kann. Vielleicht würde das reichen.

Allgemein würde ich bei Includes nach Möglichkeit nur mit absoluten Pfaden (zum Beispiel per __DIR__) arbeiten. Sonst entsteht gerne mal genau so ein Include-Pfad-Kuddelmuddel wie hier. Hintergründe: http://www.ermshaus.org/2012/09/php-includes-niemals-ohne-dir

PS: Die mysql_*-Erweiterung ist veraltet. Nutze mysqli oder PDO.

PPS:
(erhlich gesagt, das hab ich noch nie gebraucht. Was ist das?)
Ach bitte…

- http://de1.php.net/manual/en/function.ini-get.php
- http://php.net/manual/en/ini.core.php#ini.include-path

Es ist zudem (finde ich jedenfalls) immer leicht :rolleyes:, in einem Forum mit irgendeinem Code anzukommen, der nicht geht, und dann das Forum zu fragen, warum im Code irgendwas auf eine bestimmte Weise umgesetzt ist. Aus „unserer“ Sicht ist das dein Code und wenn jemand dazu solche Fragen stellen sollte, wären wir das. ;)
 
Zuletzt bearbeitet:
So, erstmal, danke für die Mühe! bin endlich aufgestanden, und habe noch ein bisschen gebastelt, und es auf die "hoffentlich aktuelle Version gesetzt".... so wie es aussieht funktioniert das ganze nun, immerhin hatte ich drei verschieden fehlermeldungen die ich beheben konnte, nun aber das grosse... ABER WAS JETZT?

Ich konnte den pfad setzten, das aber ohne die ini_get("include_path") .
Ich glaube da liegt der Hund begraben, muss ich diese class dateien irgendwo anders als in einem stink normalen Ordner meines Webservers platzieren? als irgendwo im Administrationsbereich meines Hosting anbieters, hab das noch nie gemacht?

Diese fehlermeldung kommt jetzt

Code:
2014-10-25 12:07:35    CLIENT -> SERVER: EHLO www.meineadresse.com 2014-10-25 12:07:35    CLIENT -> SERVER: AUTH LOGIN 2014-10-25 12:07:35    SMTP ERROR: AUTH command failed: 530 5.7.0 Must issue a STARTTLS command first 2014-10-25 12:07:35    CLIENT -> SERVER: QUIT 2014-10-25 12:07:35    SMTP connect() failed

Eigentlich wollte ich das ganze so einrichten, das der gesamte Kram von der datenbank abgerufen wird. aus folgendem Grund:

Die Mail wird versendet über ein App, das per http request auf diese php zugreifft, der nutzer kann seinen eigenen E-mail Port auf dem server einrichten. ist das überhaupt möglich mit phpmailer?, oder kann der phpMailer nur den smtp server meines webanbieters nutzen??... wenn ja... was ist das für eine fehlermeldung. mein english ist grottenschlecht, ich habe drei mailadressen versucht, eine von Hotmail, und zwei meines eigenen Servers.... , der fehler ist aber immer der selbe Auch das .... "CLIENT -> SERVER: EHLO www.meineadresse.com 2014-10-25 12:07:35 " :(
 
Sorry!!!! hat sich erledigt! ich habe folgenden fehler gemacht:

Code:
// Aktueller Pfad
$pfad = ini_get("include_path");

// Pfad erweitern
$pfad .= ";./phpmailer";

// Pfad setzen
ini_set("include_path", $pfad);

ich habe aus versehen das semilikon vor dem / phpmailer gelöscht, daher dachte ich, ich müsse auf diesen anderen quatsch zugreifen! erste mail ist raus :D
 

Neue Beiträge

Zurück