Avatar billede decaf Nybegynder
14. oktober 2002 - 13:47 Der er 7 kommentarer og
1 løsning

smtp mail fejl

jeg har oprettet en smtp_client der udsender mails... alt virker fint men hvis maillisten er for lang stopper siden med "Siden kan ikke vises....osv" og scriptet bliver afbrudt...jeg submitter via en form til min mail.php men er det fordi jeg ikke bruger header location eller PHP_SELF i submit???
Avatar billede whatever Nybegynder
14. oktober 2002 - 13:54 #1
Hvordan sender du mailen? Benytter du BCC, eller har du et loop som kører mail() flere gange?
Avatar billede decaf Nybegynder
14. oktober 2002 - 13:56 #2
jeg bruger :

while (list($navn, $email) = mysql_fetch_row($result)) {
$smtp->email($from, $email, $navn, $header, $subject, $body);
}
Avatar billede whatever Nybegynder
14. oktober 2002 - 13:58 #3
Det siger jo ikke så meget. Hvordan ser klassen ud?
Avatar billede decaf Nybegynder
14. oktober 2002 - 14:04 #4
class smtp_client {
var $connection;
var $server;
var $elog_fp;
var $log_file='/home/domæne/web/log/log.log';
var $do_log=true;


// default constructor
function smtp_client($server='') { //din udbyders smtp 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");
}
}

$result = sql1("select navn, email from kundekartotek where email !='' ORDER BY navn") or die (mysql_error());
$antalmodtres=mysql_num_rows($result);

$antalmodtagere=$antalmodtres;

$from = "nyhedsmail@domæne.dk";
$from_navn = "Nyhedsmail domæne.dk";
$header = "Content-type: text/html; charset=iso-8859-1";
$body = "$mail_bruger";
$smtp = new smtp_client;
$smtp -> smtp_client();

while (list($navn, $email) = mysql_fetch_row($result)) {
$smtp->email($from, $email, $navn, $header, $subject, $body);
}


$smtp->send();
$dato = date("dmy-His",time());
$old_file = "/home/domæne/web/log/log.log";
$new_file = "/home/domæne/web/log/NY_$dato.log";
rename ($old_file, $new_file);

$besked = addslashes($besked);
$subj = addslashes($subject);
$afsender = "$from_navn <$from>";
$datotid = time();
sql1("insert into newsmail_log (id,tid,emne,besked,afsender,hvem,antalmodtagere) values ('','$datotid','$subj','$besked','$afsender','$hvem','$antalmodtagere')") or die (mysql_error());
echo "Done. Beskeden er sendt!<br>Antal modtagere : $antalmodtagere";
$a = !$a;
}
Avatar billede decaf Nybegynder
14. oktober 2002 - 14:39 #5
det virker som om det er en indbygget evne i IE at den afbryder efter et stykke tid hvis den ikke får siden leveret inden for et bestemt tidsrum...er det muligt at disable dette??

Jeg har sat ini_set('max_execution_time', 300000);

Men jeg tror det er den måde jeg submitter min form på... skal det ske gennem PHP_SELF eller header location..
Avatar billede tipsen Nybegynder
14. oktober 2002 - 14:44 #6
Du kan evt. sætte et flag i db'en som indikerer hvorvidt en person har fået sendt denne udgave af nyhedsmailen - så kan du nemt køre det af flere omgange ved at lave en sql i retning af:

...where modtagetnyhedsbrev="false" limit 1000;
og en update som så sætter feltet modtagetnyhedsbrev='true' hos dem så der sendes til!
Avatar billede decaf Nybegynder
14. oktober 2002 - 14:50 #7
men er der ingen anden måde at komme uden om en timeout??? så skal jeg lave et reset for hver gang der udsendes en ny nyhedsmail...jeg har ikke mere end 600 mailadresser så det virker underligt at det tager så lang tid...har testet med ca 50 brugere og det virker fint
Avatar billede decaf Nybegynder
14. oktober 2002 - 16:32 #8
lukker...
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