mail()-Befehl mit Anmeldung am smtp???

daHooligan
Hy,


ich würde gerne den mail()-Befehl aus php verwenden. Geht bei mir aber net. daher 2 fragen:
1. geht das überhaupt mit nem smtp an dem man sich anmelden muss
2. geht das auch mit nem IIS 5.0, denke aber schon, ist ja ein php-befehl und das wird von php verarbeitet


MfG


daHool
neonator
hab vor kurzem ein mail-system gebastelt, bzw angefangen...
das mit der authentifikation bei smtp-server funktioniert z.t. .. der server muss diese methode unterstützen...

da ist mal so ein test, den ich ausgegraben habe..
es wird eine socket-verbindung zum smtp server aufgebaut, authenthifiziert und das mail rausgelassen...
das meisste sollte wohl selbst erklärend sein...
vieleicht hab ich noch ne dok zu smtp oder so.. mal suchen...
php:
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:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
<?
  $host               "web.de";
  $port               25;
  $user               "irgendwas";
  $pass               "abc";
  $header             "";
  $subject            "hallooooooo";
  $message            "hallo :)\r\nder dritte test text heut...";
  $contype            "text/plain";
  $to                 "test@web.de"# mehrere adressen mit komma (,) getrennt
  $cc                 false# ^^
  $bcc                false# ^^
  $from               "abc@web.de";
  $replyto            "abc@web.de";
  
  $cr                 "\r\n";
  $receivers          $to;
  if($cc)
    $receivers       .= ', '.$cc;
  if($bcc)
    $receivers       .= ', '.$bcc;
  $_receivers         explode(',',$receivers);
  for($i=0;$i<count($_receivers);$i++) {
    $_receivers[$i]   = trim($_receivers[$i]);
    if(strstr($_receivers[$i],"<")) {
      $_receivers[$i] = strstr($_receivers[$i],"<");
      $_receivers[$i] = substr($_receivers[$i],1,(strlen($_receivers[$i])-2));
    }
  }

  $header             'From: '.$from.$cr;
  $header            .= 'Reply-To: '.$replyto.$cr;
  $header            .= 'To: '.$to.$cr;
  if($cc)
    $header          .= 'Cc: '.$cc.$cr;
  if($bcc)
    $header          .= 'Bcc: '.$bcc.$cr;
  $header            .= 'X-Mailer PHP/'.phpversion().$cr;
  $header            .= 'X-Sender-IP '.$_SERVER['REMOTE_ADDR'].$cr;
  $header            .= 'Content-Type '.$contype.$cr;
  $header            .= $cr;
  
  $from_blank         $from;
  if(strstr($from,"<")) {
    $from_blank       strstr($from,"<");
    $from_blank       substr($from_blank,1,(strlen($from_blank)-2));
  }
  
  $fp                 = @fsockopen($host,$port);
  if(!$fp) {
    echo "failed: conecting server";die;
  }
  
  $re                 fgets($fp,128);
  fputs($fp,'HELO jone.ch'.$cr);
  $re                 fgets($fp,128);
  fputs($fp,'MAIL From: <'.$from_blank.'>'.$cr);
  $re                 fgets($fp,128);
  if(substr($re,0,3)!='250')
    die("1 failed: 'from'-problem");
  for($i=0;$i<count($_receivers);$i++) {
    fputs($fp,'RCPT To: <'.$_receivers[$i].'>'.$cr);
    $re               fgets($fp,128);
    if(substr($re,0,3)!='250')
      die("2 failed..");
  }
  fputs($fp,'DATA'.$cr);
  $re                 fgets($fp,128);
  if(substr($re,0,3)!='354')
    die("3 failed..");
  fputs($fp,$header.trim($message).$cr.'.'.$cr);
  $re                 fgets($fp,128);
  if(substr($re,0,3)!='250')
    die("4 failed..");
  fclose($fp);
  
  echo "done...";
  
  
?>


gruss
jone
neonator
ne, stop, das ist ja ohne authentifikation.. ich such mal die kommands raus..

du kannst übrigens mit telnet auch ein bisschen ausprobieren smile
(vorausgestzt du hast windows)
-> dos
-> telnet smtp.web.de 25
-> HELO [deinhost---ist egal]
-> HELP

^^ mit HELO sagst du "hallo" mit der standard-variant...
du kannst auch "extendend" ... dann musst EHLO schreiben... bei dieser variante ist authentifikation möglich

variante 2 unterstützen nicht alle server!

-> telnet smtp.web.de 25
-> EHLO abc
dann sagt er in einer zeile:
250-AUTH PLAIN LOGIN
so als beispiel.. d.h. die auth-methoden sind "plain" oder "login".. wir wählen die variant login...
-> AUTH LOGIN
er antwortet mit einem 334 (=ok) und einem schlüssel (egal)
-> username //base64-codiert
(wieder 334 und ein schlüssel)
-> pass // base64-codiert

das mit base64 ist halt nicht so sicher und du musst das passwort dann im script stehen haben.. die anderen varianten kenn ich noch nicht so gut.. smile

hoffe das hilft dir ein bisschen

mein script wird dir wahrscheinlich nicht viel bringen, da es noch mit zuviel andern variablen vollgestopft ist...

[€dit] hab da noch was gefunden:
http://www.treiber-forum.de/forum/archiv...php/t-2760.html
das ist ein protokoll von so einer authentifizierung und mail versand.. der server hat immer eine zahl vor der antwort...
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:
220 mail.domain.de
ehlo rechnername
250-mail.domain.de
250-AUTH LOGIN CRAM-MD5 PLAIN
250-AUTH=LOGIN CRAM-MD5 PLAIN
250-PIPELINING
250 8BITMIME
auth login
334 VXNlcm5hbWU6
dGVzdEBkb21haW4uZGU= (Username Base64 kodiert)
334 UGFzc3dvcmQ6
dGVzdA== (Passwort Base64 kodiert)
235 ok, go ahead (#2.0.0)
mail from:<a@b.c>
250 ok
rcpt to:<a@nicht.lokal.de>
250 ok
data
354 go ahead
body
.
250 ok 1027000566 qp 12772
quit
221 mail.domain.de


jone
Saemon
afaik geht es auch mit dieser klasse, damti kann man sogar mails mit anhang etc. schicken

(ist wohl einfacher ^^, auch wenn das smtp protokoll direkt zu benutzen sicher interessanter ist)
daHooligan
hast du mir dazu noch ne anleitung???
weil ich blick da ohne readme net sooo ganz durch...
Saemon
leider nicht.

aber schau dir mal die example4.php an, das sollte ungefähr sein, was du brauchst. Ansonsten kannst du auch mal die API.txt anschauen, vielleicht hilft dir die auch weiter.