Avatar billede causasui Nybegynder
28. januar 2003 - 20:15 Der er 8 kommentarer og
1 løsning

Mailingliste

Hvad skal man gøre hvis man ønsker at lave en mailingliste der kan klare mere end 300 mails??
Jeg ved at funktionen mail ikke er så hensigtsmæssig til at håndterer store mængder mails......
Findes der en eller anden "pakke" i php der kan varetage dette?. 
Jeg ved intet om det, vil bare gerne igang med at undersøge hvilke muligheder jeg har??
Avatar billede swaxi Nybegynder
28. januar 2003 - 20:27 #1
du kan gøre to(tre) ting :
enten bruger du en decideret mailingliste-manager (mailman, mlm/qmail etc...)
eller også laver du et system, der via crontab (hvis du er på en linuxserver) kører et script, som smider mailsne afsted en efter hinanden ...
en sidste mulighed er at smide alle dine modtagere i Bcc-feltet - på den måde kan du med een mail nå ud til mange modtagere (men det virker bare ikke altid lige godt)

jeg har selv gjort noget a la nr. 2 ... når jeg engang får tid til at rydde op i koden lægger jeg den nok i open-source, men indtil da ...

den første løsning er bestemt den mest solide, og bortset fra installationen af selve maillistmanageren (som din systemadministrator skal klare) er det også ret nemt at have med at gøre ...
Avatar billede tipsen Nybegynder
28. januar 2003 - 20:51 #2
Hvis du leder efter en solid løsning som belaster mail-serveren mindst muligt kan du bruge den klasse du finder på:

http://www.zend.com/codex.php?id=347&single=1

-den er tidligere blevet anbefalet og benyttet med succes i tidligere spørgsmål af samme karat her på eksperten. Meget nem at bruge og effektiv til afsendelse af mange mail!
Avatar billede causasui Nybegynder
28. januar 2003 - 21:35 #3
Nu har jeg researched lidt. der hvor jeg er hosted(DHT) har de valgt at lukke deres EZMLM og Mmail ned af sikkerhedsmæssige årsager, det ser tilsyneladende ud som om de ikke tilbyder nogen service af den art.
Avatar billede causasui Nybegynder
28. januar 2003 - 21:36 #4
Kunne en af jer ikke forklare i hvordan jeg kommer igang med at bruge denne kode, har ikke prøvet at arbejde med oop !!
<?php
<%
// smtp_client class -------------------------------------------------------
// use:
//        $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();

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

?> 
Example 
$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();
Avatar billede tipsen Nybegynder
28. januar 2003 - 22:45 #5
Her er et eksempel på, hvordan du kan bruge den:

//inkluder en separat fil som indeholder klassen
include('smtpklassefil.php');

//udtræk fra db
$res = mysql_query("select to_email, to_name from maillisttable");

//mail data
$from = '"Dit navn" <din@email.dk>';
$header = 'Reply-To: nr2@email.dk>' //hvis anden reply-to end afsender-email
$subject = 'Emne for mailen';
$body = 'Alt hvad der skal stå i mailen!';

//lav et nyt objekt af smtp-typen
$smtp = new smtp_client;

while (list($to, $to_name) = mysql_fetch_row($res)) {
  $smtp->email($from, $to, $to_name, $header, $subject, $body);
}
$smtp->send();
Avatar billede causasui Nybegynder
28. januar 2003 - 22:58 #6
->Tipsen
Jeg skal lige være sikker på at have forstået den smule oop der indgår i dit eksempel, rigtigt.
Først inkluderes klassen og dette er bla. for at jeg kan lave et nyt objekt af smtp-typen, men hvorfor skal der ikke laves et nyt objekt for hvergang løkken kører?? (det lyder sikkert lidt dumt)
Det ville være fedt hvis du gider at svare på dette!!
Tak for et rigtig godt svar, nu kan jeg da ihvertfald få det op at køre
Avatar billede causasui Nybegynder
28. januar 2003 - 23:10 #7
->Tipsen
Lige på faldrebet...
Jeg har prøvet at køre dette script:
include('smtpklassefil.php');
$smtp = new smtp_client;
$smtp->email('svendage', 'minhotmail@hotmail.com', 'svendage', 'test', 'test', 'test');
$smtp->send();

Men får 16 af dem her:
Warning: fopen("./smtp_client.log", "a") - Permission denied in /hotel/mojito/WWW/test/smtpklassefil.php on line 83

Er det fordi mit webhotel(DHT) nægter mig adgang til en eller anden feature som er bygget ind i denne klasse ?
Avatar billede tipsen Nybegynder
29. januar 2003 - 00:45 #8
Du laver ét objekt, laver en masse mails og sender dem alle - det kræver kun ét objekt... - Jeg ved ikke rigtigt hvordan jeg skal forklare det - finessen er at der åbnes en forbindelse til smtp-serveren og det hele sendes på én gang hvorimod, mail-funktionen ville åbne og lukke forbindelsen for hver eneste mail og den operation tager *lang* tid, hvorfor vi her undgår den!

Det problem du får er åbenbart, at klassen gerne vil oprette en log-fil, til log-resultater af kørslen. Prøv at oprette filen smtp_client.log og giv den de rigtige rettigheder vha. chmod()!
Avatar billede causasui Nybegynder
29. januar 2003 - 08:21 #9
Ok den er jeg med på !!
Tak for hjælpen
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