Avatar billede lademan Novice
28. september 2003 - 11:07 Der er 30 kommentarer og
2 løsninger

Send mange emails

Hej.

Er der én der vil hjælpe mig med at lave et simpelt men godt script, der kan afsende mange mails afsted (1000+).

Det er kun selve afsendingsprocessen jeg har problemer med.

Mvh

Lademan
Avatar billede tzr Nybegynder
28. september 2003 - 11:14 #1
jeg er ikke helt med på hvad du mener når du siger "afsendingsprocessen" ?

når du sender mails fra php bruger du mail(), som du kan læse om i php dokumentationen på http://dk2.php.net/manual/en/ref.mail.php
Så skal du bare lave er for-loop der sender ud til de forskellige emails
Avatar billede ingeman Seniormester
28. september 2003 - 11:14 #2
'--------------------------------Laver rundsending af Email----------------------------------------------------------------
Function SendEmail
    Dim MyMail
    Set Mymail=Server.CreateObject("CDONTS.NewMail")
    MyMail.FROM = "" hvem du sender fra
    MyMail.TO = ""  hvem du sender til
    MyMail.Subject =""  vdr.
    MyMail.BODY = "" tekst
    MyMail.Importance = 1
    MyMail.SEND
    Set MyMail=Nothing
   
end function

Virker hos mig
Avatar billede fsconsult.dk Nybegynder
28. september 2003 - 11:15 #3
ingeman> du er i PHP kategorien, hvis du ikke har bemærket det  :-)
Avatar billede ingeman Seniormester
28. september 2003 - 11:16 #4
sorry
Avatar billede lademan Novice
28. september 2003 - 11:16 #5
Det skal være et stabilt script. mail() er vist ikke pålidelig, når der skal afsendes mange mails.

Ingeman, hvordan virker sciptet?
Avatar billede tzr Nybegynder
28. september 2003 - 11:19 #6
fx hvis du har en array $recipents[] med alle modtagere

for ($i=0 ; $i<count($recipents) ; $++) {
    $seccess = mail($recipents[$i], <string subject>, <string message>);
    if (!$success)
        print "mail to ".recipents[$i]." failed to send";
}
Avatar billede lademan Novice
28. september 2003 - 11:20 #7
Jep, jeg har helt styr på det med databasen og udtrækket derfra, men hvordan afsender jeg disse emails? Skal man afsende dem gruppevis, fx 10 mails ad gangen?

Eller er der en bedre måde?
Avatar billede tzr Nybegynder
28. september 2003 - 11:20 #8
ups, tastefejl ved seccess, sorry
Avatar billede tzr Nybegynder
28. september 2003 - 11:21 #9
du sender dem bare en efter en
Avatar billede ingeman Seniormester
28. september 2003 - 11:21 #10
Det er et ASP script - så jeg tro ikke du kan bruge det ?
Avatar billede lademan Novice
28. september 2003 - 11:25 #11
Hehe, har hørt noget om at mail()-funktionen ikke holder, når man skal sende mange mails... fuktionen skulle være forbundet med stor upålidelighed?
Avatar billede tzr Nybegynder
28. september 2003 - 11:27 #12
jeg har lige brugt følgende til at sende 50 emails til mig selv ... tog lidt tid, men det virkede ...

$recipents = array (
    "foo@bar.com",
    "amsterdam@europe.net"
);

for ($i=0 ; $i<count($recipents) ; $i++) {
    $success = mail($recipents[$i], "subject", "body");
    if (!$success)
        print "mail to ".$recipents[$i]." failed to send";
}
Avatar billede schaefner Juniormester
28. september 2003 - 11:31 #13
<?php
$recipents = array("foo@bar.com","amsterdam@europe.net");
$emailadresses = implode(',',$recipents);

mail("","subject","indhold","BCC: $emailadresses\nFrom: Navn <Email>");
?>
Avatar billede googolplex Novice
28. september 2003 - 11:32 #14
Mit webhotel timer ud efter 120 sekunder:

Med almindelig mail() har jeg sendt 500 mails således:

$til = 'mail@udbyder.dk';
$header = '';
$besked = 'Test';

$antal = 0;

for ($i = 1; $i < $antal + 1; $i++) {
    $emne = "Test e-mail #$i";
    mail($til, $emne, $besked);
}

Med en smtp-klasse har jeg også sendt 500 mails:

$smtp = new smtp_client('smtp1.b-one.net');

$fra = '';
$til = 'mail@udbyder.dk';
$til_navn = 'mail@udbyder.dk';
$header = '';
$besked = 'Test smtp';

$antal = 0;

for ($i = 1; $i < $antal + 1; $i++) {
    $emne = "Test e-mail #$i";
    $smtp->email($fra, $til, $til_navn, $header, $emne, $besked);
}

$smtp->send();

KLASSEN

// 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 ingeman Seniormester
28. september 2003 - 11:33 #15
Er der nogen der kender et godt script til det samme i ASP / javascript ?
Avatar billede tzr Nybegynder
28. september 2003 - 11:38 #16
googelplex (uha, ja, det er jo det store tal) << interessant class du har lavet, lige bortset fra at det er jo ikkesend() der sender emailsne, men det er vel også ligemeget :) men ja, sådan kan man også gøre. En del mere effektivt end at bruge mail() skulle jeg mene
Avatar billede tzr Nybegynder
28. september 2003 - 11:39 #17
ingeman << jeg ville ikke forslå dig at bruge javascript da det kører client-side, men prøv at spørge inde i ASP kategorien ? ;)
Avatar billede googolplex Novice
28. september 2003 - 17:19 #18
tzr:

uha, ja, det er jo det store tal: Tjaa, det kommer jo an på hvad man sammenligner med, men korrekt, sammenlignet med en googolplex er det et relativt lille tal :P

interessant class du har lavet: Det er ikke mig der har lavet den, fik et link her på eksperten. Den ligget på zend.com.

Ved ikke hvad du mener med det ikke er send() der sender ?
Avatar billede tzr Nybegynder
30. september 2003 - 19:45 #19
goggolplex << det jeg mener er at det er ikke send() der sender mailen. Lige så snart du bruger email() sender den mailen til smtp serveren og sender. Send() gør faktisk det som close() burde gøre, nemlig at den slutter protokollen og disconnecter. Men i bund og grund er det vel også ligemeget, bare det virker, synes bare det er lidt misvisende.

goggolplex er 10^goggol ik ? (bare lige for at være sikker :)
Avatar billede googolplex Novice
30. september 2003 - 23:16 #20
tzr: Du har ret, det er bestemt misvisende, men forklarer jo en del, jeg havde nemlig undret mig over hvordan det virkede.

googol = 10^100
googolplex = 10^googol
Avatar billede tzr Nybegynder
01. oktober 2003 - 09:28 #21
goggolplex << hvis du vil vide hvordan SMTP virker foreslår jeg at du læser "RFC2821 - Simple Mail Transfer Protocol"
Avatar billede googolplex Novice
01. oktober 2003 - 10:00 #22
Du har vel ikke et link :-)

Er der andre protokoller jeg kan drage nytte af at læse, kender ikke så meget til det endnu.
Avatar billede tzr Nybegynder
01. oktober 2003 - 19:42 #23
der er tonsvis af protokoller defineret af IETF (Internet Engineering TaskForce), bla TCP, FTP, HTTP (eller, så vidt jeg ved er det w3c der 'ejer' den, men IETF har en RFC til den)

ietf's hjemmeside: http://www.ietf.org
god kilde til IETF's RFC'ere: http://www.rfc-editor.org

til RFC2821: (jeg kan godt li pdf) http://www.rfc-editor.org/cgi-bin/rfcdoctype.pl?loc=RFC&letsgo=2821&type=ftp&file_format=pdf
Avatar billede tzr Nybegynder
03. oktober 2003 - 18:14 #24
Lademan << har  du fået noget til at virke ?
Avatar billede rebuilder Nybegynder
03. marts 2005 - 17:34 #25
googolplex << Kan du forklare din class lidt nærmere...?

Hvad er forudsætningerne for at få det til at virke...?

Mit webhotel giver følgende:

Warning: fsockopen(): unable to connect to smtp1.b-one.net:25 in /usr/home/dan11625/public_html/smtp.php on line 42
Avatar billede tzr Nybegynder
04. marts 2005 - 09:08 #26
rebuilder << jeg kan godt li at du spørger til et 2 års gammelt indlæg :) Men for at det virker skal du erstatte "smtp1.b-one.net:25" med den smtp server som du har adgang til via dit webhotel.
Avatar billede googolplex Novice
04. marts 2005 - 09:36 #27
Hvad er en smtp-server :P Ja undskyld jeg spørger, men det er så lang tid siden, så jeg har desværre glemt det ;)
Avatar billede tzr Nybegynder
05. marts 2005 - 18:11 #28
en smtp server er en server man bruger til at sende mails ... Simple Mail Transfer Protocol
Avatar billede googolplex Novice
05. marts 2005 - 19:38 #29
Jeg jokede nu bare :P
Avatar billede tzr Nybegynder
06. marts 2005 - 14:52 #30
lol ja ok :) og jeg havde åbenbart for mange tømmermænd til at opfatte det ;)
Avatar billede googolplex Novice
06. marts 2005 - 16:14 #31
Hehe, ja den slags kan jo ske ;)
Avatar billede fixbabe Nybegynder
26. november 2006 - 18:47 #32
hmm, jeg har lavet
$antal = 0;

for ($i = 1; $i < $antal + 1; $i++) {
    $emne = "Test e-mail #$i";
    mail($til, $emne, $besked);
}

om til
        $antalx = 0;

        for ($i = 1; $i < $antalx + 1; $i++) {
        mail("$email", $subject, $show, $headers);
        print "Sendt til $email<br>";
        }
men det virker ikke, hvorfor?
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