[php] E-mail versturen via SMTP resulteert in error 500

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

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

Recent is mijn webhoster overgestapt van PHP 5.3 naar 5.4. Sindsdien werkt het versturen van e-mails via SMTP niet meer. Als framework gebruik ik de meest recente versie van PHPMailer.

Wanneer ik een e-mail probeer te versturen door middel van onderstaande code, krijg ik na lange tijd wachten een Internal Server Error. Helaas heb ik geen directe toegang tot de error logs van de server, en laat de reactie van de webhoster lang op zich wachten.

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
27
28
29
30
31
32
33
34
<?php
$this->IsSMTP();
        
        try {
        
            
                    $this->SMTPDebug = 2;

                    $this->SMTPAuth   = true;
                    $this->Host       = 'serveradres';      

                    $this->Port       = 25;                   
                    $this->Username   = 'e-mailadres';  
                    $this->Password   = 'wachtwoord';            
                    
                    $this->SetFrom('emailadres', 'Naam');

                    $this->Subject    = 'Test';

                    $this->MsgHTML($body);

                    $this->AddAddress(trim($emailaddress));

                    $this->Send();

                    $this->ClearAddresses();

            return true;
        
        } catch (phpmailerException $e) {
            echo $e->errorMessage();
        }

?>


Na het debuggen kom ik tot de conclusie dat het script vastloopt op onderstaande code in de PHPMailer class.

code:
1
2
3
4
5
6
<?php
socket_context = stream_context_create($options);

$this->smtp_conn = @stream_socket_client( $host . ":" . $port, 0, '', $timeout, STREAM_CLIENT_CONNECT, $socket_context );

?>


Op internet kan ik weinig vinden over het retourneren van een Internal Server Error na het uitvoeren van bovenstaande code.

NB: De mailserver lijkt correct te functioneren (na het uitvoeren van een telnet en een test via http://mxtoolbox.com/diagnostic.aspx).

Weet iemand wat de oorzaak kan zijn van deze error?

Acties:
  • 0 Henk 'm!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 08-09 15:03

Douweegbertje

Wat kinderachtig.. godverdomme

Als je de '@' weg haalt zie je het waarschijnlijk zelf :p

Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Was het maar zo simpel. Ook na het weglaten van het @ krijg ik een Internal Server Error.

Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 14:37

TheNephilim

Wtfuzzle

Niks te vinden in de logfiles van php?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

^^ dat. En anders die van Apache. Dit soort foutmeldingen wordt eigenlijk altijd wel gelogd.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
In de log is volgens de webhoster niets eigenaardigs zichtbaar. Ik heb helaas geen directe toegang tot de logs, dus ik moet 'm op z'n blauwe ogen geloven.

Acties:
  • 0 Henk 'm!

  • DennusB
  • Registratie: Mei 2006
  • Niet online
Vraag of ie de logs even doorstuurt anders, dat lijkt me makkelijker!

Owner of DBIT Consultancy | DJ BassBrewer


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
De Internal Server Error wordt veroorzaakt door een te hoge time-out. Na het verlagen van de time-out op stream_socket_client krijg ik de volgende foutmelding:

'Connection timed out'

Het lijkt er dus op dat de verbinding via stream_socket_client wordt geblokkeerd. Echter, de mailserver is wel bereikbaar via http://www.adminkit.net/telnet.aspx

Ook wanneer ik probeer verbinding te maken via PHPMailer met een Gmail account krijg ik dezelfde foutmelding.

Is het uberhaupt mogelijk dat de verbinding vanuit PHP en / of firewall wordt geblokkeerd?

Ik heb helaas nog geen log ontvangen van de webhoster.

[ Voor 20% gewijzigd door radem205 op 27-05-2015 16:29 ]


Acties:
  • 0 Henk 'm!

  • jorisros
  • Registratie: Februari 2009
  • Laatst online: 13-08 20:05
Een grote kans dat deze server nu opeens connectie probeert te maken via IPv6 inplaats van IPv4. Is me regelmatig overkomen. Of de firewall van de server zit dicht.

Werkt een curl commando wel? Daar kan je IPv6 uitzetten, daarmee zou je kunnen testen of je een verbinding naar buiten kan maken.

Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Via een curl commando verbinden met de mailserver werkt ook niet. Hiervoor gebruik ik onderstaand testscriptje. Het resultaat is een lege pagina, zonder foutmeldingen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$ch = curl_init();
$timeout = 5; 
curl_setopt ($ch, CURLOPT_URL, 'mailserveradres');
curl_setopt($ch, CURLOPT_PORT, 25);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

$file_contents = curl_exec($ch);
curl_close($ch);


print_r($file_contents);

?>


Ook het verwijderen van de IPv4 force en het veranderen van de port heeft geen effect. Wel is het mogelijk om met curl te verbinden met bijvoorbeeld gmail.com.

Ik snap er echt niets meer van. Ook het feit dat een check via http://mxtoolbox.com/diagnostic.aspx geen bijzonderheden oplevert en succesvol een verbinding kan worden gemaakt met mailserver.

Het enige wat ik kan bedenken is dat de mailserver een firewall heeft die de verbinding blokkeert. Is dit mogelijk en plausibel?

[ Voor 11% gewijzigd door radem205 op 28-05-2015 08:17 ]


Acties:
  • 0 Henk 'm!

  • HollowGamer
  • Registratie: Februari 2009
  • Niet online
radem205 schreef op donderdag 28 mei 2015 @ 08:14:
Via een curl commando verbinden met de mailserver werkt ook niet. Hiervoor gebruik ik onderstaand testscriptje. Het resultaat is een lege pagina, zonder foutmeldingen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$ch = curl_init();
$timeout = 5; 
curl_setopt ($ch, CURLOPT_URL, 'mailserveradres');
curl_setopt($ch, CURLOPT_PORT, 25);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

$file_contents = curl_exec($ch);
curl_close($ch);


print_r($file_contents);

?>


Ook het verwijderen van de IPv4 force en het veranderen van de port heeft geen effect. Wel is het mogelijk om met curl te verbinden met bijvoorbeeld gmail.com.

Ik snap er echt niets meer van. Ook het feit dat een check via http://mxtoolbox.com/diagnostic.aspx geen bijzonderheden oplevert en succesvol een verbinding kan worden gemaakt met mailserver.

Het enige wat ik kan bedenken is dat de mailserver een firewall heeft die de verbinding blokkeert. Is dit mogelijk en plausibel?
Heb je helemaal geen logs? dmesg ofzo ook niks zien?

Je kunt mail errors opvangen, zie daarvoor de PHPMailer documentatie.
Dit gebruik ik bijvoorbeeld:
code:
1
2
3
4
5
6
if ($this->mailer->send()) {
    $this->email['posted'] = date('Y-m-d H:i:s');
    return $this->email;
}

throw new \Kiss\FailedException($this->mailer->ErrorInfo);


Die $this->mailer is de PHPMailer class. ;)

Acties:
  • 0 Henk 'm!

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 16:28
Om welke webhostingpartij gaat 't? Sommigen hebben nog bijzondere restricties, waarbij php niet uitgaand met poort 25 kan verbinden bijvoorbeeld. Of dat het mail() commando false retourneert als je geen bestaand from adres gebruikt.

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Het lijkt erop dat de webhoster het probleem heeft opgelost. De exacte oorzaak hoop ik nog te kunnen achterhalen.

Bedankt allemaal voor het meedenken!
Pagina: 1