Avatar billede ztyxx Nybegynder
02. maj 2002 - 00:39 Der er 62 kommentarer og
1 løsning

mailliste ved hjælp af fsockopen

jeg har ladet mig fortælle at større maillister ikke er så smart at lave med mail(), men skal bruge fsockopen istedet, nu har jeg så kigget på php.net samt her på eksperten, men kan ikke rigtigt forstå hvordan det egentlig virker, så fulgte jeg dette link http://www.zend.com/codex.php?id=347&single=1 og forvirringen er fuldkommen!!
er der en der kan skære ud i pap for mig hvordan man lige får det til at hænge sammen med en mailliste der er lagret i en mysql database :-)
Avatar billede tipsen Nybegynder
02. maj 2002 - 01:09 #1
Det er nemlig smart - du gør følgende:

Jvf. dokumentationen:

$from = "dinmail@server.dk";
$header = "Content-type: text/plain; charset=ISO-8859-1";
$subject = "dit emne";
$body = "din besked";
$smtp=smtp_client();
//koble op til db
//knalde forespørgsel afsted: select modtagermail, modtagernavn from table;
//loope over resultatsæt
//list($to_email, $to_name) = mysql_fetch_row(resultatsæt) {
  $smtp->email($from, $to_email, $to_name, $header, $subject, $body);
}
$smtp->send();
Avatar billede ztyxx Nybegynder
02. maj 2002 - 01:12 #2
$smtp=smtp_client();
skal jeg indsætte smtp her?? eller finder den selv den??
Avatar billede ztyxx Nybegynder
02. maj 2002 - 01:38 #3
hmm, det vil sq ikke lige helt som jeg vil, dette er min "sovs"

<?php
$from = "ztyxx@server.dk";
$header = "Content-type: text/plain; charset=ISO-8859-1";
$subject = "Test af fsockopen()";
$body = "Dette er en test";
$smtp = smtp_client();

mysql_connect("localhost", "ztyxx" ,"******") or die (mysql_error());
mysql_select_db("ztyxx") or die (mysql_error());
$res = mysql_query("select * from mailliste order by id asc") or die (mysql_error());
    while ("list = mysql_fetch_row($res)") {
  $smtp->email("$from", "$email", "$header", "$subject", "$body");
}
$smtp->send();
   
mysql_close();
?>

det giver:

Fatal error: Call to undefined function: smtp_client() in c:\programmer\apache group\apache\htdocs\phptest\ml.php on line 6
både med og uden smtp angivet
Avatar billede ztyxx Nybegynder
02. maj 2002 - 02:12 #4
hvordan angiver man funktionen for smtp_client()
er det der fsockopen() skal bruges, i så fald, hvad skal der stå i den, smtp server eller server og port??
Avatar billede ztyxx Nybegynder
02. maj 2002 - 02:43 #5
hmm har både prøvet function () m.m. for at angive smtp_client() men kan ikke få det til at spille, og det er sikkert meget enkelt, kan bare ikke se skoven for bar træer
Avatar billede ztyxx Nybegynder
02. maj 2002 - 03:14 #6
har nu prøvet at sætte det sådan op:

<?php

$from = "ztyxx@server.dk";
$header = "Content-type: text/plain; charset=ISO-8859-1";
$subject = "Test af fsockopen()";
$body = "Dette er en test";
$smtp = "smtp_client('localhost', 80)";

mysql_connect("localhost", "ztyxx" ,"******") or die (mysql_error());
mysql_select_db("ztyxx") or die (mysql_error());
list($email) = mysql_fetch_row(mysql_query("select email from mailliste"));
  $smtp->email("$from", "$email", "$header", "$subject", "$body");

$smtp->send();
   
mysql_close();
?>

så siger den pludselig:

Fatal error: Call to a member function on a non-object in c:\programmer\apache group\apache\htdocs\phptest\ml.php on line 12
og hvad betyder det så??
Avatar billede dava Nybegynder
02. maj 2002 - 07:34 #7
smtp_client() kaldes fra class'en som er vist på linket til zend -så du skal huske at include den før at det vil køre... :)
Avatar billede erikjacobsen Ekspert
02. maj 2002 - 08:05 #8
Det skal nu også være

  $smtp = smtp_client('localhost', 80);

og mon det virker på andet end en Linux/Unis?
Avatar billede ztyxx Nybegynder
02. maj 2002 - 09:59 #9
dava> du siger include class´en
på zend ser den sådan ud
class smtp_client {
    var $connection;
    var $server;
    var $elog_fp;
    var $log_file='./smtp_client.log';
    var $do_log=true;

det er så der jeg kommer i tvivl, jeg kan ikke rigtigt gennemskue den, skal den så sættes sådan:

$connection = fsockopen('localhost', 80);
$server = "localhost";
$elog_fp = $errno;


damn, jeg plejer normalt at kunne gennemskue det når jeg har en kodestump som dem i manualen, eller bedre, den på zend...
Avatar billede tipsen Nybegynder
02. maj 2002 - 10:24 #10
smtp_client() (dvs. uden argumenter) kalder localhost på port 25

Hvis man vil have en anden server, kan man skrive smtp_client('servernavn'), men så vidt jeg kan se er der da ikke plads til portnummer.

Du skal ikke ændre de variable som står øverst i klassen!
    var $connection;  <-- styrer den selv
    var $server;      <-- angives via inputargument til smtp-client()
    var $elog_fp;    <-- styrer den selv (filpointer)
    var $log_file='./smtp_client.log'; <-- navn på logfil - kan ændres
    var $do_log=true; <-- ja eller nej til logning - kan ændres
Avatar billede tipsen Nybegynder
02. maj 2002 - 10:25 #11
-Jeg ved ikke om port 25 er korrekt til en smtp-server, men vil da tro det...
Avatar billede ztyxx Nybegynder
02. maj 2002 - 10:30 #12
jeg har nu minutiøst efterfulgt eksemplet på zend, i en helt ny fil, men får følgende

Fatal error: Call to a member function on a non-object in .....

og det er den linie der hedder

$smtp->email("$from_mail", "$to_mail", "$to_name", "$header", "$subject", "$body");
Avatar billede tipsen Nybegynder
02. maj 2002 - 10:40 #13
Det kunne tyde på at $smtp ikke blevet initialiseret ordentligt når den skriver det med non-object... - prøv at paste hele din kode!
Avatar billede ztyxx Nybegynder
02. maj 2002 - 10:42 #14
oki, here comes:

<?php
mysql_connect("localhost", "ztyxx" ,"******") or die (mysql_error());
mysql_select_db("ztyxx") or die (mysql_error());

class smtp_client {
    var $connection;
    var $server;
    var $elog_fp;
    var $log_file='./smtp_client.log';
    var $do_log=true;


    // default constructor
    function smtp_client($server='') {
        if (!$server) $this->server="localhost";
        else $this->server=$server;
       
        $this->connection = fsockopen($this->server, 25);
        if ($this->connection <= 0) return 0;

        $this->elog(fgets($this->connection, 1024));
        $this->elog("HELO xyz\r\n", 1);
        fputs($this->connection,"HELO xyz\r\n");
        $this->elog(fgets($this->connection, 1024));
        }

    function email($from_mail, $to_mail, $to_name, $header, $subject, $body) {
        if ($this->connection <= 0) return 0;
   
        $this->elog("MAIL FROM:$from_mail", 1);
        fputs($this->connection,"MAIL FROM:$from_mail\r\n");
        $this->elog(fgets($this->connection, 1024));

        $this->elog("RCPT TO:$to_mail", 1);
        fputs($this->connection, "RCPT TO:$to_mail\r\n");
        $this->elog(fgets($this->connection, 1024));

        $this->elog("DATA", 1);
        fputs($this->connection, "DATA\r\n");
        $this->elog(fgets($this->connection, 1024));
   
        $this->elog("Subject: $subject", 1);
        $this->elog("To: $to_name", 1);
        fputs($this->connection,"Subject: $subject\r\n");
        fputs($this->connection,"To: $to_name\r\n");

$smtp = "smtp_client()";
$smtp->email($from, $to[0], $to_name[0], $header[0], $subject[0], $body[0]);
$smtp->email($from, $to[1], $to_name[1], $header[1], $subject[1], $body[1]);
$smtp->send();

   

        if ($header) {
            $this->elog($header, 1);
            fputs($this->connection, "$header\r\n");
            }

        $this->elog("", 1);
        $this->elog($body, 1);
        $this->elog(".", 1);
        fputs($this->connection,"\r\n");
        fputs($this->connection,"$body \r\n");
        fputs($this->connection,".\r\n");
        $this->elog(fgets($this->connection, 1024));

        return 1;
        }


    function send() {
        if ($this->connection) {
            fputs($this->connection, "QUIT\r\n");
            fclose($this->connection);
            $this->connection=0;
            }
        }

    function close() { $this->send(); }


    function elog($text, $mode=0) {
        if (!$this->do_log) return;

        // open file
        if (!$this->elog_fp) {
            if (!($this->elog_fp=fopen($this->log_file, 'a'))) return;
            fwrite($this->elog_fp, "\n-------------------------------------------\n");
            fwrite($this->elog_fp, " Sent " . date("Y-m-d H:i:s") . "\n");
            fwrite($this->elog_fp, "-------------------------------------------\n");
            }

        // write to log
        if (!$mode) fwrite($this->elog_fp, "    $text\n");
        else fwrite($this->elog_fp, "$text\n");
        }
    }



    $res = mysql_query("select to_mail, to_name from mailliste") or die (mysql_error());
        while ("list($to_mail, $to_name) = mysql_fetch_row($res)") {

            $smtp->email("$from_mail", "$to_mail", "$to_name", "$header", "$subject", "$body");
            }
                $smtp->send();
   
mysql_close();
?>
Avatar billede tipsen Nybegynder
02. maj 2002 - 10:44 #15
Hvad er det for noget skrammel der står midt i email-funktionen og hvorfor har du ikke initialiseret $smtp-objektet!?
Avatar billede tipsen Nybegynder
02. maj 2002 - 10:46 #16
while ("list($to_mail, $to_name) = mysql_fetch_row($res)") {

skal være uden anførselstegn - det er jo ikke en streng!
Avatar billede tipsen Nybegynder
02. maj 2002 - 10:48 #17
$res = mysql_query("select to_mail, to_name from mailliste") or die (mysql_error());

$from = "ztyxx@server.dk"; <--skal selvfølgelig være din rigtige adresse!
$header = "Content-type: text/plain; charset=ISO-8859-1";
$subject = "Test af fsockopen()";
$body = "Dette er en test";
$smtp = smtp_client();

while ("list($to_mail, $to_name) = mysql_fetch_row($res)") {
  $smtp->email("$from", "$to_mail", "$to_name", "$header", "$subject", "$body");
}
$smtp->send();
mysql_close();
Avatar billede ztyxx Nybegynder
02. maj 2002 - 10:48 #18
skramlet er det som angivet på zend, det er pastet direkte ind,
$smtp-objektet?? er det de linie der hedder
// default constructor
    function smtp_client($server='') {
Avatar billede tipsen Nybegynder
02. maj 2002 - 10:49 #19
ups - der sneg anførselstegnene sig med ind igen - de skal ikke være der!
Avatar billede tipsen Nybegynder
02. maj 2002 - 10:50 #20
Jeg referer til:

      fputs($this->connection,"To: $to_name\r\n");

$smtp = "smtp_client()";
$smtp->email($from, $to[0], $to_name[0], $header[0], $subject[0], $body[0]);
$smtp->email($from, $to[1], $to_name[1], $header[1], $subject[1], $body[1]);
$smtp->send();

   

        if ($header) {

-affaldet er det i midten som ikke hører til dér!
Avatar billede ztyxx Nybegynder
02. maj 2002 - 10:55 #21
oki, så er det fjernet, men får stadig
Fatal error: Call to a member function on a non-object in ....
i linien
$smtp->email("$from_mail", "$to_mail", "$to_name", "$header", "$subject", "$body");
Avatar billede ztyxx Nybegynder
02. maj 2002 - 11:01 #22
tror sq jeg dropper det, har brugt over 9 timer på det, det må være rigeligt, finder et færdigt script og smider op istedet.
dava og erikjacobsen smid lige svar hvis i også vil have lidt af point´ene
Avatar billede tipsen Nybegynder
02. maj 2002 - 11:06 #23
har du skrevet præcis det jeg foreslog 10:48:29 !?

-giv ikke op nu (nu har jeg også brugt en bunke tid på det og vil gerne se det fungere - og det er også tæt på!)
Avatar billede tipsen Nybegynder
02. maj 2002 - 11:06 #24
-giv det lige en halv time mere!
Avatar billede tipsen Nybegynder
02. maj 2002 - 11:06 #25
Prøv at copy/paste koden igen - og lad mig se, hvilke rettelser du har fået med!
Avatar billede ztyxx Nybegynder
02. maj 2002 - 11:08 #26
tipsen> ja det prøvede jeg, men fik stadig non-object fejlen, du sagde noget om at initialisere smtp-object, hvor og hvordan er det lige...
Avatar billede tipsen Nybegynder
02. maj 2002 - 11:08 #27
Prøv at smide hele koden - så sender jeg en rettet udgave tilbage!
Avatar billede ztyxx Nybegynder
02. maj 2002 - 11:09 #28
here comes

<?php
mysql_connect("localhost", "ztyxx" ,"******") or die (mysql_error());
mysql_select_db("ztyxx") or die (mysql_error());

class smtp_client {
    var $connection;
    var $server;
    var $elog_fp;
    var $log_file='./smtp_client.log';
    var $do_log=true;


    // default constructor
    function smtp_client($server='') {
        if (!$server) $this->server="localhost";
        else $this->server=$server;
       
        $this->connection = fsockopen($this->server, 25);
        if ($this->connection <= 0) return 0;

        $this->elog(fgets($this->connection, 1024));
        $this->elog("HELO xyz\r\n", 1);
        fputs($this->connection,"HELO xyz\r\n");
        $this->elog(fgets($this->connection, 1024));
        }

    function email($from_mail, $to_mail, $to_name, $header, $subject, $body) {
        if ($this->connection <= 0) return 0;
   
        $this->elog("MAIL FROM:$from_mail", 1);
        fputs($this->connection,"MAIL FROM:$from_mail\r\n");
        $this->elog(fgets($this->connection, 1024));

        $this->elog("RCPT TO:$to_mail", 1);
        fputs($this->connection, "RCPT TO:$to_mail\r\n");
        $this->elog(fgets($this->connection, 1024));

        $this->elog("DATA", 1);
        fputs($this->connection, "DATA\r\n");
        $this->elog(fgets($this->connection, 1024));
   
        $this->elog("Subject: $subject", 1);
        $this->elog("To: $to_name", 1);
        fputs($this->connection,"Subject: $subject\r\n");
        fputs($this->connection,"To: $to_name\r\n");

   

        if ($header) {
            $this->elog($header, 1);
            fputs($this->connection, "$header\r\n");
            }

        $this->elog("", 1);
        $this->elog($body, 1);
        $this->elog(".", 1);
        fputs($this->connection,"\r\n");
        fputs($this->connection,"$body \r\n");
        fputs($this->connection,".\r\n");
        $this->elog(fgets($this->connection, 1024));

        return 1;
        }


    function send() {
        if ($this->connection) {
            fputs($this->connection, "QUIT\r\n");
            fclose($this->connection);
            $this->connection=0;
            }
        }

    function close() { $this->send(); }


    function elog($text, $mode=0) {
        if (!$this->do_log) return;

        // open file
        if (!$this->elog_fp) {
            if (!($this->elog_fp=fopen($this->log_file, 'a'))) return;
            fwrite($this->elog_fp, "\n-------------------------------------------\n");
            fwrite($this->elog_fp, " Sent " . date("Y-m-d H:i:s") . "\n");
            fwrite($this->elog_fp, "-------------------------------------------\n");
            }

        // write to log
        if (!$mode) fwrite($this->elog_fp, "    $text\n");
        else fwrite($this->elog_fp, "$text\n");
        }
    }



    $res = mysql_query("select to_mail, to_name from mailliste") or die (mysql_error());
        while (list($to_mail, $to_name) = mysql_fetch_row($res)) {

            $smtp->email($from_mail, $to_mail, $to_name, $header, $subject, $body);
            }
                $smtp->send();
   
mysql_close();
?>
Avatar billede tipsen Nybegynder
02. maj 2002 - 11:15 #29
<?php
class smtp_client {
    var $connection;
    var $server;
    var $elog_fp;
    var $log_file='./smtp_client.log';
    var $do_log=true;


    // default constructor
    function smtp_client($server='') {
        if (!$server) $this->server="localhost";
        else $this->server=$server;
       
        $this->connection = fsockopen($this->server, 25);
        if ($this->connection <= 0) return 0;

        $this->elog(fgets($this->connection, 1024));
        $this->elog("HELO xyz\r\n", 1);
        fputs($this->connection,"HELO xyz\r\n");
        $this->elog(fgets($this->connection, 1024));
        }

    function email($from_mail, $to_mail, $to_name, $header, $subject, $body) {
        if ($this->connection <= 0) return 0;

        $this->elog("MAIL FROM:$from_mail", 1);
        fputs($this->connection,"MAIL FROM:$from_mail\r\n");
        $this->elog(fgets($this->connection, 1024));

        $this->elog("RCPT TO:$to_mail", 1);
        fputs($this->connection, "RCPT TO:$to_mail\r\n");
        $this->elog(fgets($this->connection, 1024));

        $this->elog("DATA", 1);
        fputs($this->connection, "DATA\r\n");
        $this->elog(fgets($this->connection, 1024));

        $this->elog("Subject: $subject", 1);
        $this->elog("To: $to_name", 1);
        fputs($this->connection,"Subject: $subject\r\n");
        fputs($this->connection,"To: $to_name\r\n");

        if ($header) {
            $this->elog($header, 1);
            fputs($this->connection, "$header\r\n");
            }

        $this->elog("", 1);
        $this->elog($body, 1);
        $this->elog(".", 1);
        fputs($this->connection,"\r\n");
        fputs($this->connection,"$body \r\n");
        fputs($this->connection,".\r\n");
        $this->elog(fgets($this->connection, 1024));

        return 1;
        }


    function send() {
        if ($this->connection) {
            fputs($this->connection, "QUIT\r\n");
            fclose($this->connection);
            $this->connection=0;
            }
        }

    function close() { $this->send(); }


    function elog($text, $mode=0) {
        if (!$this->do_log) return;

        // open file
        if (!$this->elog_fp) {
            if (!($this->elog_fp=fopen($this->log_file, 'a'))) return;
            fwrite($this->elog_fp, "\n-------------------------------------------\n");
            fwrite($this->elog_fp, " Sent " . date("Y-m-d H:i:s") . "\n");
            fwrite($this->elog_fp, "-------------------------------------------\n");
            }

        // write to log
        if (!$mode) fwrite($this->elog_fp, "    $text\n");
        else fwrite($this->elog_fp, "$text\n");
        }
    }

mysql_connect("localhost", "ztyxx" ,"******") or die (mysql_error());
mysql_select_db("ztyxx") or die (mysql_error());

$res = mysql_query("select to_mail, to_name from mailliste") or die (mysql_error());

$from = "ztyxx@server.dk"; // skal selvfølgelig være din rigtige adresse!
$header = "Content-type: text/plain; charset=ISO-8859-1";
$subject = "Test af fsockopen()";
$body = "Dette er en test";

$smtp = smtp_client(); // brug smtp_client('smtphostname') hvis det ikke er localhost!

while (list($to_mail, $to_name) = mysql_fetch_row($res)) {
  $smtp->email("$from", "$to_mail", "$to_name", "$header", "$subject", "$body");
}

$smtp->send();
mysql_close();
?>
Avatar billede ztyxx Nybegynder
02. maj 2002 - 11:16 #30
damn, klokken er sq løbet fra mig, har en aftale kl. 11.30, bliver nødt til at smutte, kigger ind senere..
Avatar billede tipsen Nybegynder
02. maj 2002 - 11:18 #31
Du kan evt. skrive

echo $smtp;

efter $smtp = smtp_client() for at se om funktionen returnerede 0, hvilket indikerer en fejl!
Avatar billede ztyxx Nybegynder
02. maj 2002 - 11:20 #32
giver
Call to undefined function: smtp_client() in

$smtp = smtp_client();
Avatar billede ztyxx Nybegynder
02. maj 2002 - 11:22 #33
iflg. phpinfo er smtp localhost hos min udbyder
Avatar billede tipsen Nybegynder
02. maj 2002 - 11:36 #34
spørgsmålet er om vi har brug for noget i retning af:

$smtp = new smtp_client;
$smtp->smtp_client();

i stedet for - jeg har bare ikke så meget erfaring med objektorienteret programmering, men det kan være Erik ved det?
Avatar billede tipsen Nybegynder
02. maj 2002 - 11:37 #35
ztyxx: Ja, men du skal stadig have fat i din udbyder først!
Avatar billede tipsen Nybegynder
02. maj 2002 - 11:40 #36
Jeg tror bestemt du skal skrive:

$smtp = new smtp_client;
$smtp -> smtp_client();

i stedet for

$stmp = smtp_client();

og så tror jeg faktisk det fungerer...
Avatar billede tipsen Nybegynder
02. maj 2002 - 11:44 #37
NB: Du tester forøvrigt tingene ved din udbyder - ikke lokalt vel!?
Avatar billede ztyxx Nybegynder
02. maj 2002 - 11:50 #38
$smtp = new smtp_client;
$smtp -> smtp_client();

er nu sat ind, jeg får ingen fejl, men heller ingen mails!!
Avatar billede ztyxx Nybegynder
02. maj 2002 - 11:50 #39
tester hos udbyder
Avatar billede tipsen Nybegynder
02. maj 2002 - 11:56 #40
ok - det var da et skridt på vejen!

-prøv at skrive "echo $smtp;" efter du kalder smtp_client() - så kan vi se, hvad den indeholder!
Avatar billede ztyxx Nybegynder
02. maj 2002 - 11:59 #41
den siger: Object
Avatar billede ztyxx Nybegynder
02. maj 2002 - 12:05 #42
tipsen> kan se at din side ligger hos freepaq, tester du det der??
har nemlig også freepaq
Avatar billede tipsen Nybegynder
02. maj 2002 - 12:24 #43
Det kan jeg da godt prøve - har godt ingen db, men ændrer det bare lidt!
Avatar billede tipsen Nybegynder
02. maj 2002 - 12:48 #44
OK - jeg kan se, at fejlen kommer der, hvor man connecter til smtp-serveren - hvis den angives til localhost får man hvertfald fejl...
Avatar billede tipsen Nybegynder
02. maj 2002 - 13:00 #45
Der skal stå:

$smtp = new smtp_client("servernavn");

while (list($to_mail, $to_name) = mysql_fetch_row($res)) {
  $smtp->email("$from", "$to_mail", "$to_name", "$header", "$subject", "$body");
}

$smtp->send();


og så har jeg rettet følgende for nemmere at kunne debugge:

    // default constructor
    function smtp_client($server='') {
        if (!$server) $this->server="localhost";
        else $this->server=$server;
        echo "connecter til: ".$this->server."<br>";
        $this->connection = fsockopen($this->server, 25);
        if ($this->connection <= 0) echo "Kunne ikke connecte til: ".$this->server."<br>";
        if ($this->connection <= 0) return 0;
...

De skriver selv, at deres smtp-server hedder: mail2.infopaq.dk, men den giver fejl...
Avatar billede tipsen Nybegynder
02. maj 2002 - 13:08 #46
Så jeg vil foreslå, at du skriver en mail til freepaq og spørger hvad deres smtp-server hedder når du skal connecte direkte til den fra et php-script - og om den evt. kræver noget authentication!
Avatar billede ztyxx Nybegynder
02. maj 2002 - 21:20 #47
oki, takker for hjælpen, så ser vi om det kan fikses gennem freepaq
Avatar billede ztyxx Nybegynder
02. maj 2002 - 21:22 #48
freepaq´s smtpserver hedder smtp.freepaq.dk
Avatar billede ztyxx Nybegynder
02. maj 2002 - 21:25 #49
og så virker det med den sat, endnu en gang mange tak for din vedholdenhed :-)
Avatar billede tipsen Nybegynder
02. maj 2002 - 21:30 #50
Det var sgu rart at vide, at det fungerede :-)
Avatar billede ztyxx Nybegynder
02. maj 2002 - 21:39 #51
ja ikk´det var sq ved at drive mig til vanvid, normalt plejer jeg at kunne gennemskue koder ved at studere dem nøje, men denne var ved at få bugt med mig, og som jeg sagde tidligere, lå løsningen jo lige foran eén, tænkte overhovedet ikke på at bruge smtp.freepaq.dk, da der i phpinfo´en stod localhost
Avatar billede ztyxx Nybegynder
02. maj 2002 - 21:39 #52
men når man er startet som "gammel" kan det ind i mellem være svært :-)
Avatar billede cyberdude Nybegynder
03. maj 2002 - 12:13 #53
ztyxx -> hvordan kom scriptet til at se ud da du fik det til at virke.... sidder nemlig selv og bøvler med at lave noget til en liste med +4500 modtagere på......... og det vil ikke rigtigt.....
Hvis du evt. gider at poste det her eller sende det til mig på intercode@mail1.stofanet.dk :-))
Avatar billede tipsen Nybegynder
03. maj 2002 - 12:20 #54
Den eneste fejl der er i forklaringen på Zend er, at du skal skrive:

$smtp = new smtp_client();

for at initialisere klassen ("new" står ikke på Zend!) - hvis smtp-serveren ikke er localhost, skal du i stedet skrive:

$smtp = new smtp_client("smtp.servernavn.dk");

og så er det bare spørgsmål om at sætte det sammen med en db.
Avatar billede cyberdude Nybegynder
03. maj 2002 - 12:36 #55
hmm nu har jeg så indsat new også... og får så godtnok ingen fejl.... men jeg får heller ingen mail :-(
Avatar billede cyberdude Nybegynder
03. maj 2002 - 12:38 #56
opretter koden selv logfilen, eller skal jeg ind og oprette den manuelt ??
Avatar billede ztyxx Nybegynder
03. maj 2002 - 12:41 #57
det kom til at se sådan ud

<?php
class smtp_client {
    var $connection;
    var $server;
    var $elog_fp;
    var $log_file='./smtp_client.log';
    var $do_log=true;


    // default constructor
    function smtp_client($server='smtp.server.dk') { //din udbyders smtp server
        if (!$server) $this->server="localhost";
        else $this->server=$server;
       
        $this->connection = fsockopen($this->server, 25);
        if ($this->connection <= 0) return 0;

        $this->elog(fgets($this->connection, 1024));
        $this->elog("HELO xyz\r\n", 1);
        fputs($this->connection,"HELO xyz\r\n");
        $this->elog(fgets($this->connection, 1024));
        }

    function email($from_mail, $to_mail, $to_name, $header, $subject, $body) {
        if ($this->connection <= 0) return 0;

        $this->elog("MAIL FROM:$from_mail", 1);
        fputs($this->connection,"MAIL FROM:$from_mail\r\n");
        $this->elog(fgets($this->connection, 1024));

        $this->elog("RCPT TO:$to_mail", 1);
        fputs($this->connection, "RCPT TO:$to_mail\r\n");
        $this->elog(fgets($this->connection, 1024));

        $this->elog("DATA", 1);
        fputs($this->connection, "DATA\r\n");
        $this->elog(fgets($this->connection, 1024));

        $this->elog("Subject: $subject", 1);
        $this->elog("To: $to_name", 1);
        fputs($this->connection,"Subject: $subject\r\n");
        fputs($this->connection,"To: $to_name\r\n");

        if ($header) {
            $this->elog($header, 1);
            fputs($this->connection, "$header\r\n");
            }

        $this->elog("", 1);
        $this->elog($body, 1);
        $this->elog(".", 1);
        fputs($this->connection,"\r\n");
        fputs($this->connection,"$body \r\n");
        fputs($this->connection,".\r\n");
        $this->elog(fgets($this->connection, 1024));

        return 1;
        }


    function send() {
        if ($this->connection) {
            fputs($this->connection, "QUIT\r\n");
            fclose($this->connection);
            $this->connection=0;
            }
        }

    function close() { $this->send(); }


    function elog($text, $mode=0) {
        if (!$this->do_log) return;

        // open file
        if (!$this->elog_fp) {
            if (!($this->elog_fp=fopen($this->log_file, 'a'))) return;
            fwrite($this->elog_fp, "\n-------------------------------------------\n");
            fwrite($this->elog_fp, " Sent " . date("Y-m-d H:i:s") . "\n");
            fwrite($this->elog_fp, "-------------------------------------------\n");
            }

        // write to log
        if (!$mode) fwrite($this->elog_fp, "    $text\n");
        else fwrite($this->elog_fp, "$text\n");
        }
    }

mysql_connect("mysql.server.dk", "bruger" ,"*******") or die (mysql_error());
mysql_select_db("database") or die (mysql_error());

$res = mysql_query("select to_mail, to_name from mailliste") or die (mysql_error());

$from = "mail@server.dk"; //din egen mail :-)
$header = "Content-type: text/plain; charset=ISO-8859-1";
$subject = "Test af fsockopen()";
$body = "Dette er en test";

$smtp = new smtp_client;
$smtp -> smtp_client();

while (list($to_mail, $to_name) = mysql_fetch_row($res)) {
  $smtp->email("$from", "$to_mail", "$to_name", "$header", "$subject", "$body");
  }

$smtp->send();
mysql_close();
?>
Avatar billede tipsen Nybegynder
03. maj 2002 - 12:47 #58
fopen($this->log_file, 'a')

'a' parameteren åbner filen for skrivning og hvis den ikke findes prøver den at oprette den.

-hvis det ikke fungerer er det sandsynligvis fordi smtp-serveren ikke er angivet korrekt.
Avatar billede cyberdude Nybegynder
03. maj 2002 - 12:49 #59
kan man angive smtp serveren til localhost ...... eller skal det være et smtp.noget.dk ??
Avatar billede cyberdude Nybegynder
03. maj 2002 - 12:51 #60
og ja det kunen man godt :-)

Har fået det til at sende min test mail nu :-))

Takker
Avatar billede tipsen Nybegynder
03. maj 2002 - 12:52 #61
12:20:46:

"Den eneste fejl der er i forklaringen på Zend er, at du skal skrive:

$smtp = new smtp_client();

for at initialisere klassen ("new" står ikke på Zend!) - ***hvis smtp-serveren ikke er localhost***, skal du i stedet skrive:

$smtp = new smtp_client("smtp.servernavn.dk");"

Dvs. hvis det er localhost skriver du bare:

$smtp = new smtp_client();

-eller:

$smtp = new smtp_client("localhost");

-giver samme resultat
Avatar billede cyberdude Nybegynder
03. maj 2002 - 13:27 #62
hmmm hvordan får jeg den til at indsætte datoen i log_fil navnet... ?

Har prøvet dette :
$dato = date("dmY-H_i",time());
class smtp_client {
var $connection;
var $server;
var $elog_fp;
var $log_file='/home/domæne/web/log/smtp_$dato.log';
var $do_log=true;

Så kommer filnavnet blot til at være smto_$dato.log når jeg ser file.... hvorfor nu det... er det fordi det er en class at man ikek kan "sammensætte" variablerne ?
Avatar billede alrua Nybegynder
05. september 2002 - 23:21 #63
cyberdude:
heh - det er nok lidt sent (et par måneder?) men det er fordi du bruger single quotes i stedet for dobbelt - altså ' ' i stedet for " "

-Alrua
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester