Avatar billede muddi Praktikant
08. juni 2002 - 23:56 Der er 11 kommentarer og
1 løsning

Mail class? Anbefalet af Tipsen!

Jeg har forsøgt at bruge en mail class, som jeg læste at Tipsen anbefalede i tilfælde, hvor PHP skal udsende mange emails.
Scriptet findes på denne side: http://www.zend.com/codex.php?id=347&single=1

Herunder kan I se det script, som jeg har forsøgt at køre, men uden held. Der bliver skrevet en fin logfil, hvor det ikke ser ud til at noget er galt, men der kommer ikke nogen mails til mig!
Er der nogen her (evt. Tipsen) som kan fortælle hvordan jeg får det til at du! Mit eget gæt er, at jeg skal specificere en mailserver!





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

?>


<?php
$from = 'postmaster@halstania.dk';
$to[] = 'admin@halstania.dk';
$to_name[] = 'Administrator';
$header[] = '';
$subject[] = 'Test1';
$body[] = 'Dette er en test af admin@halstania.dk';

$smtp = new smtp_client();
$smtp->email($from, $to[0], $to_name[0], $header[0], $subject[0], $body[0]);
$smtp->send(); 
?>
Avatar billede muddi Praktikant
08. juni 2002 - 23:58 #1
Jeg mente så 'specificere en smtp-server' og ikke en mailserver!
Forresten er jeg ikke så erfaren i det med klasser...
Avatar billede brevkasserne Nybegynder
09. juni 2002 - 00:25 #2
Det er netop det du skal:

$smtp = new smtp_client(NAVN PÅ SMTP-SERVER);
$smtp->email($from, $to[0], $to_name[0], $header[0], $subject[0], $body[0]);
$smtp->send();
Avatar billede brevkasserne Nybegynder
09. juni 2002 - 00:27 #3
$smtp = new smtp_client(NAVN PÅ SMTP-SERVER);
$smtp->email("postmaster@halstania.dk","admin@halstania.dk","Administrator","HEADER","Test1","Dette er en test af admin@halstania.dk");
$smtp->send();
Avatar billede muddi Praktikant
09. juni 2002 - 00:34 #4
brevkasserne >> NICE det virkede, men hvor står der at klassen smtp_client modtager en parameter?

Lægger du et svar?
Avatar billede brevkasserne Nybegynder
09. juni 2002 - 01:05 #5
...
Avatar billede brevkasserne Nybegynder
09. juni 2002 - 01:06 #6
Forsåtr desværre ikke lige dit sidste spørgsmål?
Avatar billede muddi Praktikant
09. juni 2002 - 01:15 #7
Hvor i scriptet kan man se at man skal skrive

smtp_client(NAVN PÅ SMTP-SERVER)?
Avatar billede brevkasserne Nybegynder
09. juni 2002 - 01:20 #8
Her:

// default constructor
function smtp_client($server='') {

Der fortæller den at det der står inde i parantensen er serveren...
Avatar billede muddi Praktikant
09. juni 2002 - 01:24 #9
ok tak!
Avatar billede tipsen Nybegynder
09. juni 2002 - 02:17 #10
Nåede desværre ikke at se spørgsmålet inden det var afsluttet - men du har jo også fået det til at fungere :-)

Det med serveren (som default er localhost) skal du desværre læse dig til at koden - det fremgår ikke særligt tydeligt. Bemærk også at scriptet genererer en log-fil med resultater fra de mail-afsendelser du laver - det er jo meget rart, at have resultaterne liggende i en ekstern fil, som man kan kigge igennem ved lejlighed.
Avatar billede muddi Praktikant
09. juni 2002 - 02:27 #11
tipsen >> Jeps det er smart med logfilen!
Men jeg synes ikke at det går specielt hurtigt med at få sparket alle mine mails afsted. Jeg prøvede at sende 200 bare for at teste, men det tog over 60 sekunder.
Hvordan får man den til at sparke dem af sig noget hurtigere? Hvor hurtigt kan du få det til at køre?
Avatar billede johnwies Nybegynder
30. september 2004 - 23:45 #12
Hvordan vedhæfter man så en fil i mailen med scriptet
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