Missing argument... Dennis Wronka's email Klasse

FBIagent

Erfahrenes Mitglied
Moin,

ich hab mir mal die email sachen von Dennis Wronka angeschaut und folegndes
zusammengefrimelt:

index.php
PHP:
<?php
 
include "./email.class.php";
include "./smtpconnection.class.php";
include "./emailtxt.class.php";
 
$account_name = "blabla";
$activation_key = "";
$account_mail = "blabla@blabla.bla";
 
$emtxt = new emailtxt;
$em = new email;
$smtp = new smtpconnection;
 
emtxt.init();
emtxt.addln("Sie haben einen spiel Account erstellt.");
emtxt.addln("Account Name: $account_name");
emtxt.addln("Aktivier. Code: $activation_key");
emtxt.addln();
emtxt.addln("Um Ihren Account zu aktivieren besuchen sie bitte folgende Seite.");
emtxt.addln("Dort -Account Namen- und oben angegeben -Aktivier. Code- eingeben.");
emtxt.addln("http://blabla.blabla.bla/bla_bla");
emtxt.addln();
emtxt.addln();
emtxt.addln("P.S.: Wenn Sie nichts von uns angefordert haben ignorieren sie");
emtxt.add("diese E-Mail ganz einfach.");
 
em.__construct("blabla@blalba.bla",$account_mail,"Aktivierung des spiel Accounts",emtxt.get());
smtp.__construct();
smtp.sendmail(em.composemail()))
 
die();

?>

emailtxt.class.php
PHP:
<?php

class emailtxt
{
  private $text;
 
  public function init()
  {
    $this->text="";
  }
 
  public function add($txtadd)
  {
    if($txtadd != "")
      $this->text.=$txtadd;
  }
 
  public function addln($txtadd = "\r\n")
  {
    if($txtadd != "")
    {
      if($txtadd == "\r\n")
        $this->text.="\r\n";
      else
        $this->text.=$txtadd."\r\n";
    }
  }
 
  public function get()
  {
    return $this->text;
  }
}

?>

Ich bekomme Missing argument 1 ... Missed argument 4 for email::__construct()
PHP:
em.__construct("blabla@blalba.bla",$account_mail,"Aktivierung des spiel Accounts",emtxt.get());

Soweit ich das sehe habe ich die argumente doch angegeben oder wie sehe ich das.
Oder ran könnte das noch liegen?

THX im Vorraus
MFG FBIagent
 
Ich kenn leider nur nen bisschen mit OOP aus. Kannst du mir sagen was das für ein Aufruf ist:

PHP:
emtxt.get()

Funktioniert das überhaupt ohne dem $-Zeichen? Ich dachte bisher immer das man das so aufruft:

PHP:
$emtxt = new emailtxt;
$emtxt->get();

Aber wie gesagt bin klein OOP-Pro!

Gruß BSA
 
Methoden in Objekten werden mit -> angesprochen und nicht mit .
Wenn das funktioniert okay, aber trotzdem waere es besser mit -> zu arbeiten weil es halt so gedacht ist.
Vielleicht ist das auch der Grund warum der 4. Parameter fehlt.
Weiterhin wird der Konstruktor __construct() nicht manuell ausgefuehrt sondern automatisch bei $my_object=new my_class();

Probier es einfach mal so:
PHP:
<?php
 
include "./email.class.php";
include "./smtpconnection.class.php";
include "./emailtxt.class.php";
 
$account_name = "blabla";
$activation_key = "";
$account_mail = "blabla@blabla.bla";
 
$emtxt = new emailtxt();
$smtp = new smtpconnection();
 
emtxt->init();
emtxt->addln("Sie haben einen spiel Account erstellt.");
emtxt->addln("Account Name: $account_name");
emtxt->addln("Aktivier. Code: $activation_key");
emtxt->addln();
emtxt->addln("Um Ihren Account zu aktivieren besuchen sie bitte folgende Seite.");
emtxt->addln("Dort -Account Namen- und oben angegeben -Aktivier. Code- eingeben.");
emtxt->addln("http://blabla.blabla.bla/bla_bla");
emtxt->addln();
emtxt->addln();
emtxt->addln("P.S.: Wenn Sie nichts von uns angefordert haben ignorieren sie");
emtxt->add("diese E-Mail ganz einfach.");
 
$em=new email("blabla@blalba.bla",$account_mail,"Aktivierung des spiel Accounts",emtxt->get());;
smtp->sendmail(em->composemail()))
?>

In Deiner Klasse kannst Du auch aus der Funktion init() die Konstruktor __construct() machen, so brauchst Du dann init() nicht per manuell ausfuehren.
 
Danke... habe bis gestern nicht wirklich was mit Klassen gemacht.
Ebend noch die php_imap.dll frei gesetzt.
Jetzt gibts mir der SMTP Server einen Fehler:
Code:
Error:  [10053]  Software caused connection abort
Aber ok das ist ja kein PHP Thema mehr.

Eine Frage habe ich aber noch: Wie kann ich aus einer Klasse oder Funktion heraus
auf eine globale Variable zugreifen?
 
In einer Funktion kannst Du das folgendermassen machen.
Nehmen wir an Du hast eine Variablen namens $bla.
Diese kannst Du dann mit global in die Funktion importieren.
PHP:
function blubb()
{
global $bla;
echo $bla;
}
Theoretisch koennte das auch in einer Klasse gehen, aber von sowas sollte abgesehen werden da es der Klasse einiges ihrer Flexibilitaet nimmt.
In Klassen sollte nur mit internen Variablen oder uebergebenen Werten gearbeitet werden.
 
Und wo ich grad dabei bin noch eine Frage. Wie sieht es aus mit Referenzierung?
Ich weis ned in C++ sah das immer so aus
Code:
int i;
int &j = i;
Aber wie sieht das in PHP aus?

Achja und nochmal auf Software caused connection abort im SMTP Server zurück zu kommen:
Die Software ist ja sozusagen das PHP Script.
Könnte da nicht irgendwo der Fehler liegen?
Mit der
PHP:
mail();
Funktion kann ich ja auch Mails vesenden.
Ich poste einfcah nochmal den Code vieleicht ist da ja irgend eine Angabe in falscher
Form angegeben:
PHP:
<?php
include "./email.class.php";
include "./smtpconnection.class.php";
include "./emailtxt.class.php";
 
$account_name = "xxx";
$activation_key = "xxx";
$account_mail = xxx@xxx.xx;
 
$emtxt = new emailtxt();
$smtp = new smtpconnection();
 
$emtxt->addln("Sie haben einen spiel Account bei L2Test erstellt.");
$emtxt->addln("Account Name: $account_name");
$emtxt->addln("Aktivier. Code: $activation_key");
$emtxt->addln();
$emtxt->addln("Um Ihren Account zu aktivieren besuchen sie bitte folgende Seite.");
$emtxt->addln("Dort -Account Namen- und oben angegeben -Aktivier. Code- eingeben.");
$emtxt->addln("http://moinsen.no-ip.info/acc_mail");
$emtxt->addln();
$emtxt->addln();
$emtxt->addln("P.S.: Wenn Sie nichts von uns angefordert haben ignorieren sie");
$emtxt->add("diese E-Mail ganz einfach.");
 
$em = new email("Register@L2Test.de",$account_mail,"Aktivierung des spiel Accounts bei L2Test",$emtxt->get());

if(!$smtp->sendmail($em->composemail()))
  echo "Fehler";
else
  echo "Erfolgreich"
 
?>
 
Zuletzt bearbeitet:
In PHP kannst Du auch mit Referenzen arbeiten. Ob im gleichen Umfang wie bei C weiss ich nicht, da ich es bisher nicht benoetigt habe. Aber ich weiss, dass es moeglich ist.

Wieder ein kleines Beispiel:
Eine Funktion soll eine Variable um eins erhoehen.
Ohne Referenzen wuerde das so laufen:
PHP:
function add_one($x)
{
 $x++;
 return $x;
}
$x=3;
$x=add_one($x);
echo $x;
Ausgabe: 4

Mit Referenz geht das auch etwas kuerzer.
PHP:
function add_one(&$x)
{
 $x++;
}
$x=3;
add_one($x);
echo $x;
Ausgabe: 4

Ich bin nicht ganz sicher ob der Code im 2. Beispiel 100% korrekt ist, wie gesagt, ich hab in PHP noch keine Referenzen benoetigt. Daher schlage ich vor einfach mal in die Dokumentation zu schauen.
Weiterhin macht das Beispiel auch nicht viel Sinn, eine Variable um 1 zu erhoehen bedarf schliesslich keiner Funktion, aber ich denke es reicht um zu verdeutlichen, dass Referenzen moeglich sind.
 
@P_F
Es heißt Eben (ohne d) ... Soviel Kleinkariertheit muss sein!
Den Kommentar finde ich total überflüßig...

@Dennis Wronka
So ich brauchte jetzt eine schnelle Lösung und habe es ohne deine Klasse
gemacht da es irgendwie ned funtzen wollte. Keine ahnung was ich falsch gemacht
habe. Habe jetzt folgendes:

index.php
PHP:
<?php
 
include "email.class.php";
include "emailtxt.class.php";
 
$em = new email;
$emtxt = new emailtxt();
 
$em->set_receiver("xxx@xxx.xx");
$em->set_subject("Lineage II spiel Account Aktivierung");
$em->set_sender("Register@L2Test.de");
 
$account_name = "xxx";
$activation_key = "xxx";
 
$emtxt->addln("Sie haben einen spiel Account bei L2Test erstellt.");
$emtxt->addln("Account Name: $account_name");
$emtxt->addln("Aktivier. Code: $activation_key");
$emtxt->addln();
$emtxt->addln("Um Ihren Account zu aktivieren besuchen sie bitte folgende Seite.");
$emtxt->addln("Dort -Account Namen- und oben angegeben -Aktivier. Code- eingeben.");
$emtxt->addln("http://moinsen.no-ip.info/acc_mail");
$emtxt->addln();
$emtxt->addln();
$emtxt->addln("P.S.: Wenn Sie nichts von uns angefordert haben ignorieren sie");
$emtxt->add("diese E-Mail ganz einfach.");
 
$em->set_massage($emtxt->get());
 
$em->build_header();
mail($em->get_receiver(),$em->get_subject(),$em->get_massage(),$em->get_header());
 
?>

email.class.php
PHP:
<?php
 
class email
{
  private $massage;
  private $receiver;
  private $subject;
  private $sender;
  private $header;
 
  public function set_receiver($receiver)
  {
    $this->receiver=$receiver;
  }
 
  public function set_sender($sender)
  {
    $this->sender=$sender;
  }
 
  public function set_subject($subject)
  {
    $this->subject=$subject;
  }
 
  public function set_massage($massage)
  {
    $this->massage=$massage;
  }
 
  public function get_receiver()
  {
    return $this->receiver;
  }
 
  public function get_sender()
  {
    return $this->sender;
  }
 
  public function get_subject()
  {
    return $this->subject;
  }
 
  public function get_massage()
  {
    return $this->massage;
  }
 
  public function get_header()
  {
    return $this->header;
  }
 
  public function build_header()
  {
    $this->header="";
    $this->header.="To: ".$this->get_receiver()."\r\n";
    $this->header.="Subject: ".$this->get_subject()."\r\n";
    $this->header.="Content-class: urn:content-classes: message\r\n";
    $this->header.="User-Agent: PHP/".phpversion()."\r\n";
    $this->header.="MIME-Version: 1.0\r\n";
    $this->header.="From: ".$this->get_sender()."\r\n";
    $this->header.="X-Priority: 3 (Normal)\r\n";
    $this->header.="Importance: Normal\r\n";
    $this->header.="Content-Type: text/plain;\r\n\tcharset=\"iso-8859-1\"\r\n";
    $this->header.="Content-Transfer-Encoding: quoted-printable\r\n";
    $this->header.="Content-Disposition: inline\r\n\r\n";
  }
}
 
?>

emailtxt.class.php
PHP:
<?php
class emailtxt
{
  private $text;
 
  public function __construct()
  {
    $this->text="";
  }
 
  public function add($txtadd)
  {
    if($txtadd != "")
      $this->text.=$txtadd;
  }
 
  public function addln($txtadd = "\r\n")
  {
    if($txtadd != "")
    {
      if($txtadd == "\r\n")
        $this->text.="\r\n";
      else
        $this->text.=$txtadd."\r\n";
    }
  }
 
  public function get()
  {
    return $this->text;
  }
}

?>

Wird alles so gesendet wie es soll... nur kommt die Mail dann immer im spam Ordner
an. Was kann ich dagegen tun? Die Mail sollte schon im Posteingang eingehen.

THX im Vorraus
MFG FBIagent
 
Zurück