[PHP] PHPMailer -> Internal Server Error

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Ha,

Om naar ongeveer 100 mensen een mailing te versturen gebruik ik de fantastische code van PHPMailer. Wanneer ik een bijlage toevoeg aan de mailing (eerst bestand uploaden en dan koppelen aan PHPMailer) dan ontstaat soms een Internal Server Error (zie onderstaand). Alhoewel ik niet 100% zeker ben dat het alleen gebeurt bij het toevoegen van een bijlage (meestal wordt de mailing namelijk verstuurd door iemand anders).

Error:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.....etc.

Een gedeelte van de code die ik gebruik om een mailing te versturen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$mail             = new PHPMailer();

$body             = $mail->getFile('body.html');
$body             = eregi_replace("[\]",'',$body);

$mail->IsSMTP(); 
$mail->Host       = "mail.domeinnaam.com"; 

$mail->From       = "E-mailadres";
$mail->FromName   = "Naam";

$mail->Subject    = "Onderwerp";

$mail->AltBody    = "Fout!"; 

$mail->MsgHTML($body);

$mail->AddAddress("E-mailadres", "Naam");

$mail->AddAttachment($file_path2);             

if(!$mail->Send()) {
  echo "Mail error: " . $mail->ErrorInfo;
} else {
  echo "Bericht verzonden!";
}


Het blijkt dat wanneer de error ontstaat de mailing wel verzonden is!

Zoals je kan zien gebruik ik een smtp server (mail.domeinnaam.nl), gehost bij Digitalus. Is het mogelijk dat de fout ligt bij deze SMTP server?

Acties:
  • 0 Henk 'm!

Verwijderd

Nee, je maakt gewoon een fout in je PHP script ergens anders zou de mail niet verzonden worden.

[ Voor 4% gewijzigd door Verwijderd op 15-08-2008 12:25 ]


Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 19:24

Patriot

Fulltime #whatpulsert

Kun je de complete source van de aangeroepen pagina geven? Met deze code lijkt op het eerste gezicht niets mis, maar dat kan anders zijn voor de rest.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

Check de logs van je webserver, daar vindt je waarschijnlijk wat meer info ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Bedenk dat een Internal Server Error een HTTP 500 error is. Geen error van php dus, maar waarschijnlijk van Apache, als je Apache draait. Check dus /var/log/apache voor een errorlog :)

Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
mithras schreef op vrijdag 15 augustus 2008 @ 12:55:
Bedenk dat een Internal Server Error een HTTP 500 error is. Geen error van php dus, maar waarschijnlijk van Apache, als je Apache draait. Check dus /var/log/apache voor een errorlog :)
Er bestaat geen "Apache" map in de "log" map :s

Dit is de gehele code van de pagina:
(Tijd geleden gescript dus misschien wat omslachtig :p_

PHP:
1
*snip*

[ Voor 98% gewijzigd door Creepy op 15-08-2008 13:06 ]


Acties:
  • 0 Henk 'm!

Verwijderd

mithras schreef op vrijdag 15 augustus 2008 @ 12:55:
Bedenk dat een Internal Server Error een HTTP 500 error is. Geen error van php dus, maar waarschijnlijk van Apache, als je Apache draait. Check dus /var/log/apache voor een errorlog :)
En PHP kan ook zo ingesteld worden dat hij die error laat zien in plaats van normale errors.
2. PHP Coding Timing Out
If your PHP script makes external network connections, the connections may time out. If too many connections are attempted and time out, this will cause the Internal Server Error. To prevent such time outs and errors, we suggest that your relevant php scripts be coded with some timeout rules.

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
offtopic:
TS mag wel eens wat gaan posten in [Alg] Slechtste programmeervoorbeelden deel 3 :X
En je apache log?
Verwijderd schreef op vrijdag 15 augustus 2008 @ 12:59:
[...]

En PHP kan ook zo ingesteld worden dat hij die error laat zien in plaats van normale errors.

[...]
Het is niet zo dat je bij een status 500 gelijk je php gaat debuggen, omdat het slechts een kleine mogelijkheid betreft in de vele keren dat status 500 voorkomt.

De code wordt getriggerd door apache, dus kijk daar eerst naar en graaf dan verder. Anders kan je stuk voor stuk alle opties gaan bekijken waardoor een status 500 getriggerd wordt. En dan blijkt in je log iets vrij evidents te staan ;)

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

Of een var/log/httpd/ of een andere plek afhankelijk van je apache config. Kom op zeg, doe zelf eens iets meer moeite om je probleem op te lossen? Ik heb ook je code verwijderd. Relevante code geven is prima, maar al je code hiervoor geven is echt te veel. Probeer een klein test geval te maken waarmee je je probleem kan reproduceren. Grote kans dat je met het maken van je test geval tegen de oplossing oploopt :)

Maar again: bekijk je apache log! Daarin staat zeer waarschijnlijk meer.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Oid
  • Registratie: November 2002
  • Niet online

Oid

Ik zie dat digitalus ensim gebruikt, nu ken ik emsim niet maar bij directadmin kan ik zelf de logs van apache bekijken, zowel error logs als usage logs.

code:
1
2
3
4
5
6
7
8
9
10
[Fri Aug 15 16:24:20 2008] [error] [client 91.141.157.*] File does not exist: /home/web26/domains//public_html/favicon.ico
[Fri Aug 15 16:24:20 2008] [error] [client 91.141.157.*] File does not exist: /home/web26/domains//public_html/404.shtml
[Fri Aug 15 16:25:06 2008] [error] [client 81.204.61.*] File does not exist: /home/web26/domains//public_html/robots.txt
[Fri Aug 15 16:25:06 2008] [error] [client 81.204.61.*] File does not exist: /home/web26/domains//public_html/404.shtml
[Fri Aug 15 17:18:15 2008] [error] [client 91.141.157.*] File does not exist: /home/web26/domains/public_html/favicon.ico
[Fri Aug 15 17:18:15 2008] [error] [client 91.141.157.*] File does not exist: /home/web26/domains/public_html/404.shtml
[Fri Aug 15 18:59:47 2008] [error] [client 65.55.210.*] File does not exist: /home/web26/domains//public_html/robots.txt
[Fri Aug 15 18:59:47 2008] [error] [client 65.55.210.*] File does not exist: /home/web26/domains//public_html/404.shtml
[Fri Aug 15 20:10:41 2008] [error] [client 89.205.141.*] File does not exist: /home/web26/domains/public_html/favicon.ico
[Fri Aug 15 20:10:41 2008] [error] [client 89.205.141.*] File does not exist: /home/web26/domains//public_html/404.shtml


Hierin kan je dus zien wat er fout is gegaan. Bekijk dit ook eens in ensim.

Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Wanneer ik in de error_log kijk dan zie ik (helaas) geen error op het moment dat de mailing was verzonden. Kan het ook te maken hebben met de smtp server?

Acties:
  • 0 Henk 'm!

Verwijderd

Een mailing versturen via een PHP script vanuit een HTTP request is recipe for disaster. Nooit doen!

Maak een scriptje dat server-side wordt aangeroepen via een shell commando. Dit kun je eventueel wél in PHP doen (uiteraard naar background verplaatsen en goed laten loggen), maar liever ook niet. Het best kun je dan de command line interface gebruiken, dus php -q script.php.
Dit kun je eventueel in een cronjob kwijt. Hete mooiste is dan alle emails in een queue plaatsen. Ofwel voor het versturen, of gewoon in de mailqueue van de server laten zetten. En dan in kleinere batches laten versturen.

Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 22:02
Verwijderd schreef op vrijdag 15 augustus 2008 @ 23:21:
Een mailing versturen via een PHP script vanuit een HTTP request is recipe for disaster. Nooit doen!

Maak een scriptje dat server-side wordt aangeroepen via een shell commando. Dit kun je eventueel wél in PHP doen (uiteraard naar background verplaatsen en goed laten loggen), maar liever ook niet. Het best kun je dan de command line interface gebruiken, dus php -q script.php.
Dit kun je eventueel in een cronjob kwijt. Hete mooiste is dan alle emails in een queue plaatsen. Ofwel voor het versturen, of gewoon in de mailqueue van de server laten zetten. En dan in kleinere batches laten versturen.
Dus in plaats van wielen opnieuw uit te vinden gewoon php list gebruiken.
Pagina: 1