Avatar billede hkb-x Nybegynder
15. august 2008 - 11:52 Der er 3 kommentarer

SMTP via PHP

For at få mere kontrol over afsendelsen af mails har jeg bygget mit eget SMTP script der fungerer ca således:

<?php

$forbindelse = fsockopen(mail.example.com, 25);

fwrite($forbindelse, 'HELO mail.example.com');

$svar = fread($forbindelse, 1024);

?>

Det kører generelt set helt fint men nogle udbydere brokker sig over at jeg sender HELO før de melder '220 service ready'.

Mit script kommunikerer altså på følgende måde (S er server jeg vil sende til og C er mig som client):

C: HELO mail.example.com
S: 220 service ready at mail.example.com
S: 250 ok

Dette er principielt set forkert da 220 svaret skal komme inden HELO. Hvis jeg bruger telnet fra komandolinien kommer det til at se således ud (åbent eventuelt cmd / teminalen og tjek det ud):

C: telnet mail.example.com 25
S: 220 service ready at mail.example.com
C: HELO mail.example.com
S: 250 ok

Som i kan se så svarer serveren med 220 allerede når jeg opretter forbindelse med telnet men ikke hvis jeg bruger PHPs fsockopen(). Så hvad er det telnet gør som jeg mangler at gøre i PHP?
Avatar billede jhkl Nybegynder
15. august 2008 - 11:55 #1
Lige efter du har åbnet forbindelsen, så kalder du fread, og afventer svar fra serveren
Avatar billede hkb-x Nybegynder
15. august 2008 - 12:17 #2
arh pinligt.

var ellers noget af det første jeg prøvede. jeg har 2 funktioner en der skriver til en forbindelse og en der læser. kan se at jeg istedet for at læse kom til at skrive noget tomt input. det kan serveren jo ikke lide. beklager meget at jeg overså at jeg skulle læse istedet for at skrive tomt. har sidet oppe hele natten med det her pis. det virker. kast svar for point.
Avatar billede tmi Nybegynder
15. august 2008 - 16:23 #3
jeg lavede engang en funktion du gerne må arve ;-) Hvis det altså er det samme du vil

function mimemail($tos, $from, $data) {
    $mh = fsockopen ("localhost", 25); fgets($mh);
    fputs($mh, "HELO localhost\r\n"); fgets($mh);
    fputs($mh, "MAIL FROM: <$from>\r\n"); fgets($mh);
    foreach ($tos as $to) {
        fputs($mh, "RCPT TO: <".strtolower($to).">\r\n"); fgets($mh);
    }
    fputs($mh, "DATA\r\n"); fgets($mh);
    fputs($mh, "$data\r\n.\r\n"); fgets($mh);

    fclose($mh);
}
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