Avatar billede jps2mt Nybegynder
08. april 2003 - 17:09 Der er 17 kommentarer og
1 løsning

Sikre at mail bliver sendt med mail()

Hvordan kan jeg sikre at en mail bliver afsendt med mail() funktionen...

Det er vilkårligt hvem der ikke modtager mails, og der er ikke nogle fejl i de adresser der står i databasen over modtagere...

Jeg har lavet TRUE / FALSE check i mit script og det har ikke hjulpet synderligt meget...

Får denne fejl når jeg prøver at sende via listen:

Warning: Failed to Receive in F:\oldtimerklubben\web\admin\mass_mail.php on line 40
xxxxxxxxxxxxxx@image.dk modtog ikke mailen, forsøger igen -
Warning: Failed to Receive in F:\oldtimerklubben\web\admin\mass_mail.php on line 44
xxxxxxxxxxxxxx@image.dk modtog stadig ikke mailen, der er et eller andet galt og der forsøges ikke igen.

Linierne omkring dette punkt er som flg. i scriptet:

} elseif ($m == "send") {
  require("../include/gen_func.inc.php");

  $subject = "OTK-Mail: ".$subject;
  $headers  = "From: ".$from."\r\n";
//  $headers .= "Bcc: ".$rec_list."\r\n";

  $result = mysql_query("SELECT * FROM Medlemmer ORDER BY UID");
  while ($row = mysql_fetch_array($result)) {
  if (mail($row[EMail], $subject, $body, $headers)) { // Linie 40 (Første fejl kommer her)
    echo "Mail afsendt til ".$row[EMail]."<br>\n";
  } else {
    echo $row[EMail]." modtog ikke mailen, forsøger igen -";
    if (mail($row[EMail], $subject, $body, $headers)) { // Linie 44 (Anden fejl kommer her)
    echo "Mail afsendt til ".$row[EMail]."<br>\n";
    } else {
    echo $row[EMail]." modtog stadig ikke mailen, der er et eller andet galt og der forsøges ikke igen.<br>\n";
    }
  }
  }
//  header("location: index.php");
}

Efter hvad jeg kan se er det min mail-server der ikke vil modtage, men hvordan kan det være...Har aldrig haft det her problem før, og har altid brugt MDeamon som server...
Avatar billede bacce.dk Nybegynder
08. april 2003 - 18:18 #1
hmm det er nu ikke din mailbox der ikke vil modtage men nok snarer din mail funktion der ikke virker.
så spørgsmålet er. er det din egen server ?? har du sat sendmail patch rigtigt (hvis det er din egen server) ??
Avatar billede tipsen Nybegynder
08. april 2003 - 18:20 #2
Hvis du udsender mange mails på denne måde, kan du med fordel overveje at benytte smtp-klassen som du finder på zend.com - den vil fungere hurtigere og bedre end sendmail der ikke er beregnet til masse-mails!
Avatar billede jps2mt Nybegynder
08. april 2003 - 19:51 #3
MDeamon = W2K mail-server, derfor benyttes IKKE sendmail, men det der API som PHP til Win bruger...

Og ja, det er min egen server...

Eftersom den godt vil modtage en del af de mails der skal sendes, men ikke en anden del af dem, så kan jeg ikke se at det skulle være PHP den er gal med...Og det er jo vilkårligt hvem der modtager, samt hvor mange der modtager...
Avatar billede tipsen Nybegynder
08. april 2003 - 23:27 #4
jps2mt: "sendmail" var en fejl fra min side - der skulle have stået "mail()" - en reference til php-funktionen. Problemet er at den belaster smtp-serveren enormt hårdt ved hele tiden at åbne og lukke forbindelsen i stedet for at holde forbindelsen åben og sende alle mails på én gang!

Dette problem omgås ved at benytte den nævnte SMTP-klasse, som kommunikerer direkte med SMTP-serveren uden at den er mere besværlig at bruge end mail()

Da du ikke kan se noget system i, hvilke emails der forsvinder kunne det måske godt tyde på et belastningsproblem af SMTP-serveren - hvor mange mails sender du og hvor lang tid tager det?
Avatar billede jps2mt Nybegynder
09. april 2003 - 16:19 #5
Det drejer sig pt. om under 30 mails...Og jeg har lavet sådan at jeg GODT kan se hvilke mails der ikke bliver modtaget...Og jeg kan endda se at mailserveren IKKE registrerer at den forsøger...Der er intet i loggen på mailserveren som antyder fejl, men tilgengæld heller ingen afsendte E-Mails til dem som er angivet med fejl på siden...
Avatar billede tipsen Nybegynder
09. april 2003 - 16:27 #6
mystisk...
Avatar billede jps2mt Nybegynder
09. april 2003 - 16:55 #7
Hmmm...Det lader til at det er fordi den sender for hurtigt...Kan også se at det ikke er så vilkårligt hvem der modtager mailen, som først antaget...

De 10 første modtager den, derefter kommer der kun fejl...
Kan se at mailserveren ved 10 SMTP connections skal melde Server Too Busy...Det kunne jo tyde på at det er det der sker...
Avatar billede tipsen Nybegynder
09. april 2003 - 17:13 #8
Du kan finde smtp-klassen på:

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

Eksempel:

$from = 'din@email.dk';
$header = 'diverse ekstra headere';
$subject = 'dit emne for mailen';
$body = 'din mailtekst...';

$smtp = new smtp_client(NAVN PÅ SMTP-SERVER);
while(list($to, $to_name) = mysql_fetch_row($dbressource)) {
  $smtp->email($from, $to, $to_name, $header, $subject, $body);
}
$smtp->send();
Avatar billede jps2mt Nybegynder
09. april 2003 - 18:07 #9
Kan man ikke bare gemme den i en fil, og så require den ind i scriptet?? (Har aldrig brugt classes før)
Avatar billede tipsen Nybegynder
09. april 2003 - 19:08 #10
Du kan enten have klassen stående ovenover ovenstående kodestump eller, som du selv foreslår, gemme den i en ekstern fil og include den (igen før du rent faktisk bruger den!) - sidstnævnte er den bedste løsning.
Avatar billede jps2mt Nybegynder
09. april 2003 - 20:04 #11
Fatal error: Cannot instantiate non-existent class: smtp_client in f:\oldtimerklubben\web\admin\mass_mail.php on line 60

Kode:

  Include("f:\www.trab.dk\scripts\smtp.php");

//  $from = 'din@email.dk';
  $header = "";
//  $subject = 'dit emne for mailen';
//  $body = 'din mailtekst...';

  $smtp = new smtp_client(localhost); // Linie 60
  $result = mysql_query("SELECT * FROM Medlemmer ORDER BY UID");
  while ($row = mysql_fetch_array($result)) {
  $smtp->email($from, $row[EMail], $$row[Nick], $header, $subject, $body);
  }
  $smtp->send();
Avatar billede tipsen Nybegynder
09. april 2003 - 22:49 #12
1. At du ikke kan oprette en instans af klassen tyder på, at den ikke er inkluderet ordentligt - prøv evt. at smide klassen øverst i filen med det script du kører - bare for at lokalisere fejlen.

2. input til klassen skal være en streng, dvs. 'localhost' i stedet for localhost - og ydermere er 'localhost' i forvejen default, så det behøver du ikke angive.
Avatar billede jps2mt Nybegynder
10. april 2003 - 17:00 #13
Får stadig samme fejl, ved at inkludere selve class i scriptet...Bare med et andet linie nummer, selvfølgelig, men samme fejl beskrivelse...

Den med localhost så jeg selv, efter jeg havde skrevet herinde...Og også den med de 2 $ er rettet... :)
Avatar billede jps2mt Nybegynder
10. april 2003 - 17:33 #14
Hmmm...Har lavet et eller andet, nu virker det nemlig...MEN!!

Der kommer INGEN afsender på... :(
Avatar billede jps2mt Nybegynder
10. april 2003 - 17:47 #15
Okay okay...Efter endnu nærmere studeren var det bare et spørgsmål om headers... :D

Den virker nu...Takker mange gange for hjælpen...

Ps. Fed class... :)
Avatar billede tipsen Nybegynder
10. april 2003 - 19:09 #16
Har du nogen tidsmåling på om det kører hurtigere eller langsommere og hvor meget det stresser smtp-serveren?
Avatar billede jps2mt Nybegynder
10. april 2003 - 19:22 #17
Synes ikke der er nogen mærkbar forskel i tiden, men den sender alt, og som du vist selv snakkede om, så holder den sig jo i en connection, dvs. hvis serveren har (som min har) en øvre grænse for hvor mange samtidige SMTP sessions den må håndtere, så er den her jo ideel... :)
Avatar billede tipsen Nybegynder
10. april 2003 - 20:29 #18
godt nok :-)
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