Thread EMails empfangen und weiterverarbeiten (15 answers)
Opened by Gustl at 2013-05-06 13:43

Gustl
 2013-05-22 13:05
#167732 #167732
User since
2011-01-27
441 Artikel
BenutzerIn
[Homepage]
user image
Ich habe es nun mit Perl::Sockets gelöst, da das andere Modul nicht funktioniert (siehe oben)

Hier mein Skript:
Code (perl): (dl )
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
#!/usr/bin/perl
use Socket;

use warnings;
use strict;

my $port = 25;

my $sockaddr = 'S n a4 x8';
my $authcount=0;

my ($name, $aliases, $proto) = getprotobyname('tcp');
print "Port = $port\n";

my $thisaddr = gethostbyname('157.163.168.131');

my $this = pack($sockaddr, AF_INET, $port, $thisaddr);

socket(S, AF_INET, SOCK_STREAM, $proto);

bind(S,$this) || die "bind: $!";
listen(S,5) || die "connect: $!";

select(S); 
$| = 1; 
select(STDOUT);

my $pid;

for(;;) {
   print "Listening for connection....\n";

   my $mail_content = "";
   my $bool_data = 0;
   my $addr;
   ($addr = accept(NS,S)) || die $!;
    send(NS,"220 okey-dokey\r\n",0);
   my ($af,$port,$inetaddr) = unpack($sockaddr,$addr);
   my @inetaddr = unpack('C4',$inetaddr);
   #print "$af $port @inetaddr\n";

   my $ctr=0;
   
   while (my $t=<NS>) {
      $ctr++;
      if( substr($t,0,4) eq "QUIT") {
         send(NS,"221 Bye\r\n",0);
         last;
      }
      print $t;
      #print FIL $t;
      if( substr($t,0,1) eq '.') {
         send(NS,"250 okey-dokey\r\n",0);
         $bool_data = 0;
         next;
      }
      if($bool_data){
        $mail_content .= $t;  
      }
      my $x=substr($t,0,4);
      if( ($x eq "EHLO") ||($x eq "HELO") || ($x eq "RCPT") || ($x eq "MAIL") ||
         ($x eq "RSET") || ($x eq "QUIT")) {
            send(NS,"250 " . $t . " okey-dokey\r\n",0);
      }
      if($x eq "DATA"){ send(NS,"354 End data with .\r\n",0); $bool_data = 1; }
   }
   close(NS);
   analyse_email($mail_content);  
}

sub analyse_email{
  my $mail = shift;
  print "\n\nEMAIL:\n".$mail;
}


Hier der Ablauf:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 1:  > 220 mail.example.com SMTP Foo Mailserver
2: < HELO mail.example.org
3: > 250 Ok
4: < MAIL FROM: hans.muster@example.org
5: > 250 Ok
6: < RCPT TO: foo@example.com
7: > 250 Ok
8: < DATA
9: > 354 End data with .
10: < From: hans.muster@example.org
11: < To: foo@example.com
12: < Subject: Testmail
13: <
14: < Testmail
15: < .
16: > 250 Ok
17: < QUIT
18: > 221 Bye


Bei einigen Zeilen verstehe ich zwar nicht was da genau gemacht wird, aber ich bekomme die Email und kann mit dieser weiter arbeiten.

Vielen Dank.

modedit Editiert von GwenDragon: Logeinträge in CODE-Tags gestellt; wg. besserer Formatierung; Bitte mal auch Vorschau beim Posten verwenden
Last edited: 2013-05-22 15:26:17 +0200 (CEST)

View full thread EMails empfangen und weiterverarbeiten