Avatar billede lademan Novice
13. september 2003 - 21:48 Der er 17 kommentarer og
1 løsning

Nyhedsbrev kode

Hej.

Hvordan ser et pålidelig nyhedsmail-script ud, der kan klare 1000++ mails?

Så simpelt og godt som muligt.

Tak for hjælpen!
Avatar billede lademan Novice
13. september 2003 - 21:48 #1
.
Avatar billede lademan Novice
13. september 2003 - 21:55 #2
det er kun selve afsendelses-delen jeg efterspørger. mail() virker efter sigende ikke optimalt, når det drejer sig om så mange mails...
Avatar billede nicklasb Nybegynder
13. september 2003 - 22:00 #3
grunden til at du ikke kan få mail() til at virke, er at funktionen ikke er særlig udbygget, og beregnet til at sende meget mere end en mail af gangen. Grunden hertil er at funktionen kalder op til din standard-smtp-server, sender mailen, og lukker herefter forbindelsen til serveren igen.. Dette gør den så igen og igen, hver gang du kalder funktionen.
Et godt råd ville være at lave et script der åbner forbindelsen, sender ALLE dine mails og herefter lukker igen!
Se evt et sådan script her: http://www.zend.com/codex.php?id=347&single=1
Avatar billede nicklasb Nybegynder
13. september 2003 - 22:03 #4
med udbygget mener jeg at der ikke i selve funktionen er de store muligheder for logging af mailafsendelse osv. For at du kan lave det i mail(), bliver du nød til "uden for" funktionen at tjekke om mailen er sendt, tjekke hvor mange du har send, hvad du har sendt og til hvem.
Det kan det den classe / funktion jeg har linket til. (Det har selvfølgelig igen indflydelse på hvorvidt funktionen kan sende mange mail samtidig, men syntes aligevel lige det skulle nævnes.. :)
Avatar billede lademan Novice
13. september 2003 - 22:09 #5
ok...

hvordan kommer jeg i gang med ovennævnte kode kombineret med et database udtræk fra email-tabellen?
Avatar billede nicklasb Nybegynder
13. september 2003 - 22:12 #6
har du overhovedet kigget på hvad der står på siden?!? Du har allerede efter 6 minutter opgivet. Giv det lige et forsøg; klik på linket, og læs hvad der står på siden. Det er faktisk ekstremt godt beskrevet derpå..
Kom så tilbage med kontrete spørgsmål hvis du går i stå :D

Det er da sjovest selv at finde svar på sine spøgsmål, eller?!? ;D
Avatar billede lademan Novice
13. september 2003 - 22:14 #7
jæ har læst banditten igennem :-)
- men har ikke den store smtp-erfaring
Avatar billede nicklasb Nybegynder
13. september 2003 - 22:18 #8
behøver du skam slet heller ikke.. Har heller intet erfaring med mailservere (ikke meget i hvert falde), og kan da let bruge scriptet.. Eneste kunden du skal have, er lidt kendskab til php.. :D
Hvor langt er du nået og hvad kan du ikke finde ud af?
Avatar billede lademan Novice
13. september 2003 - 22:21 #9
Hvad med disse variabler?

    var $connection;
    var $server;
    var $elog_fp;
    var $log_file='./smtp_client.log';
    var $do_log=true;
Avatar billede nicklasb Nybegynder
13. september 2003 - 22:25 #10
det er bare deklareringer af variabler der bruges længere nede i scriptet. De første tre linier skal du bare lade være som de er. De næste to skal rettes så de passer til dine behov og server.. Altså log_fil og do_log..
Den første pejer på hvor din logfil ligger i forhold til dit script.. Den næste fortæller scriptet om du overhovedet ønsker at logge hvad der er blevet sendt. For lige at tjekke at det hele virker kan du lige til at starte med bare slå denne feture fra.. Altså kun rette den sidste linie af dem du har vist der til:

var $do_log=false;
Avatar billede nicklasb Nybegynder
13. september 2003 - 22:27 #11
svarefejlene er gratis i dag.. :D Tror vist det går lidt for stærkt en gang i mellem.. Selvfølgelig skulle der have stået feature..
Avatar billede lademan Novice
13. september 2003 - 22:32 #12
finder den selv smtp serveren?
Avatar billede lademan Novice
13. september 2003 - 22:32 #13
:-D
Avatar billede nicklasb Nybegynder
13. september 2003 - 22:36 #14
hvis ikke du angiver andet, ja.. Men en god ide er aligevel selv lige at angive det.. Hvis du fx har din side hosted hos en udbyder, og de pludselig i et forsøg på at stille andre tilfredse kommer til at ændre den, vil den også blive ændret i dit script.. Så find en smtp du kan sende igennem, og skiv det så i dit script.. I kaldet af funktionen skrive du:

$smtp = new smtp_client(din.mailserver.dk);

og skifter så selvfølgelig ud med din mailserver.. :D
Avatar billede lademan Novice
13. september 2003 - 22:37 #15
Jeg kan ikke få det her til at virke:

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

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

$smtp=smtp_client();
$smtp->email('mail@hotmail.com', 'mail@hotmail.com', 'mail@hotmail.com', 'HEADER', 'EMNE', 'BODY');
$smtp->email('mail@hotmail.com', 'mail@hotmail.com', 'mail@hotmail.com', 'HEADER', 'EMNE', 'BODY');
$smtp->email('mail@hotmail.com', 'mail@hotmail.com', 'mail@hotmail.com', 'HEADER', 'EMNE', 'BODY');
// $smtp->email($from, $to[1], $to_name[1], $header[1], $subject[1], $body[1]);
$smtp->send();
Avatar billede nicklasb Nybegynder
13. september 2003 - 22:54 #16
hvad skriver den af fejl?!?
Og kan det være fordi din mail ikke er mail@hotmail.com?!?

Det føste er dit navn.. Altså det der plejer at stå i frafejltet..
Det andet er din modtagers mailadresse..
Det tredje er din modtagers navn
Det fjerde er specielle headers. Der kan du fx skrive at din mail skal være ren tekst.. Altså skriver du her:
$headers = 'Content-Type: text/plain; charset=iso-8859-1'; og sætter den ind..
Den femte er emnet i din mail
og den sidste er selve indholdet af mailen..

Der ud over skal du lige rette dit smtp kald.. (som jeg skrev tidligere.. Altså rette
$smtp=smtp_client();
til
$smtp = new smtp_client(din.mailserver.dk);
, og så udskifte med din mailserver..
Avatar billede nicklasb Nybegynder
05. oktober 2003 - 21:20 #17
har du fundet ud af noget videre?!?
Avatar billede lademan Novice
25. november 2007 - 16:44 #18
Mange tak for hjælpen! Da der ikke er nogen, der har afgivet svar, lukkes tråden.
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