Avatar billede leif Seniormester
08. december 2003 - 23:10 Der er 2 kommentarer og
1 løsning

Bedste måde at sende mails

Hej,

Der er noget med at PHP kan sende mails via SMTP serveren i stedet for at bruge standard mail funktionen.

Men hvad er bedst at bruge ???

Jeg har lavet et script der er beregnet til at sende 1 mail i minuttet, men det er ikke alle der kommer frem, det er til test af en mailserver !!!!

Fra
Leif
Avatar billede tipsen Nybegynder
08. december 2003 - 23:53 #1
mail() funktionen i PHP åbner og lukker forbindelsen til en evt. smtp-server hver eneste gang du kalder den - hvis du sender mange mails på denne måde - altså kalder mail() mange gange, vil du selvfølgelig også åbne og lukke forbindelsen til smtp-serveren mange (unødvendige) gange!

Derfor er der mest fornuft i selv at åbne en forbindelse til smtp-serveren, sende alle de mails der skal sendes og derefter lukke forbindelsen igen. Dette belaster smtp-serveren mindst muligt.
Avatar billede googolplex Novice
08. december 2003 - 23:54 #2
Hvis du skal sende mange mails på en gang er det at foretrække at sende direkte via smtp-serveren i stedet for at bruge mail();

Her er en SMTP-klasse:

<?php


// smtp_client class -------------------------------------------------------
// use:
//        $smtp= new 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();

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

?>
Avatar billede leif Seniormester
13. december 2003 - 20:49 #3
Lukker og slukker, da min nye server alligevel har en mailinglist funktion !!!
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