Avatar billede -zonic- Nybegynder
08. juni 2009 - 15:18 Der er 4 kommentarer og
1 løsning

fsocketopen til smtp med authentication?

Hej, jeg har fundet nedenstående kode i et tidligere spm her på sitet.. jeg skal bruge noget lignende, min smtp server kræver bare email og kode for at logge på serveren...

er der nogen der kan fortælle mig hvordan jeg fletter det ind i scriptet?

<?php
class smtp_client {
    var $connection;
    var $server;
    var $elog_fp;
    var $log_file='./smtp_client.log';
    var $do_log=true;


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

mysql_connect("mysql.server.dk", "bruger" ,"*******") or die (mysql_error());
mysql_select_db("database") or die (mysql_error());

$res = mysql_query("select to_mail, to_name from mailliste") or die (mysql_error());

$from = "mail@server.dk"; //din egen mail :-)
$header = "Content-type: text/plain; charset=ISO-8859-1";
$subject = "Test af fsockopen()";
$body = "Dette er en test";

$smtp = new smtp_client;
$smtp -> smtp_client();

while (list($to_mail, $to_name) = mysql_fetch_row($res)) {
  $smtp->email("$from", "$to_mail", "$to_name", "$header", "$subject", "$body");
  }

$smtp->send();
mysql_close();
?>
Avatar billede repox Seniormester
08. juni 2009 - 15:49 #1
Du skal sende en AUTH LOGIN kommando i dein smtp_client() funktion lige efter din HELO kommando.
Derefter sender du USER og PASS kommandoer base64 encodede.
f.eks.
AUTH LOGIN\r\n
USER base64_encode(brugernavn)\r\n
PASS base64_encode(kodeord)\r\n
Avatar billede -zonic- Nybegynder
08. juni 2009 - 16:29 #2
kan du prøve at vise mig det i min kode?

på forhånd tak!
Avatar billede repox Seniormester
08. juni 2009 - 18:12 #3
$this->elog(fgets($this->connection, 1024));
$this->elog("AUTH LOGIN\r\n", 1);
fputs($this->connection,"AUTH LOGIN\r\n");
$this->elog(fgets($this->connection, 1024));

$this->elog(fgets($this->connection, 1024));
$this->elog("USER ".base64_encode($brugernavn)."\r\n", 1);
fputs($this->connection,"USER ".base64_encode($brugernavn)."\r\n");
$this->elog(fgets($this->connection, 1024));

$this->elog(fgets($this->connection, 1024));
$this->elog("PASS ".base64_encode($kodeord)."\r\n", 1);
fputs($this->connection,"PASS ".base64_encode($kodeord)."\r\n");
$this->elog(fgets($this->connection, 1024));
Avatar billede -zonic- Nybegynder
28. august 2009 - 15:18 #4
tak for hjælpen!

smid et svar!
Avatar billede -zonic- Nybegynder
30. august 2009 - 19:59 #5
lukker hvis ikke der kommer svar senest i morgen...
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