Thread Net::POP3 - Timeout für Authentifizierung setzen? (13 answers)
Opened by mixxer at 2019-08-29 23:51

mixxer
 2019-08-31 13:42
#190430 #190430
User since
2016-04-01
25 articles
BenutzerIn
[default_avatar]
Wenn ich die Logins 'folke', wie im Listing, dann werden zwar die Logins parallel ausgeführt. Leider komme ich mit der 'Zwischenspeicherung' der Net::xxx - Objekte nicht klar. Die Zwischenspeichrung benötige ich, um die Clients wieder diszuconnecten. Irgendwie haben die Childs jedoch keinen Zugriff auf meine Datenstruktur im Hauptprogramm. Ich weiß, das ist eine wichtige Eigenschaft der Folks, komme aber deshalb trotzdem nicht weiter... Wie kann ich die Objekte in das Hauptprogramm hinüberretten? MFG
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
75
76
77
78
79
80
81
82
83
84
85
86
sub _accounts_verify
  #
{
    &_database_read;
    my @verifyList = &_string_to_list($opt_x);
  LOOP:
    foreach (@verifyList) {
        $pm->start and next LOOP;    # do the fork
        my $x_3 = $dbData->{$_}->{ +POP3 }  // 0;
        my $x_4 = $dbData->{$_}->{ +IMAP4 } // 0;
        my $x_S = $dbData->{$_}->{ +SMTP }  // 0;
        my $x_U = $dbData->{$_}->{ +USER }  // 0;
        my $x_P = $dbData->{$_}->{ +PASS }  // 0;
        my $x_H = $dbData->{$_}->{ +HELO }  // 'Foo';
        $x_3 and $dbData->{$_}->{pop3folk} = &_login_pop3( $x_3, $x_U, $x_P );
        $x_4 and $dbData->{$_}->{imap4folk} = &_login_imap4( $x_4, $x_U, $x_P );
        $x_S and $dbData->{$_}->{smtpfolk} = &_login_smtp( $x_S, $x_U, $x_P, $x_H );
        $pm->finish;
    }
    $pm->wait_all_children;
    print Dumper $dbData;  # hier gibt es keine Net::xxx Objekte mehr
    foreach ( keys %{$dbData} ) { # damit ist das hier vorläufig sinnlos...
        $dbData->{$_}->{pop3folk}->quit        if exists $dbData->{$_}->{pop3folk};
        $dbData->{$_}->{imap4folk}->disconnect if exists $dbData->{$_}->{imap4folk};
        $dbData->{$_}->{smtpfolk}->quit        if exists $dbData->{$_}->{smtpfolk};
    }
}

sub _login_pop3
  #
  # 1. SSL-Verbindung zu einem pop3s-Server aufbauen
  # 2. Mit den übergebenen Zugangsdaten authentifizieren
  #
{
    my $host   = shift;
    my $user   = shift;
    my $pass   = shift;
    my $client = Net::POP3->new(
        Host  => $host,
        SSL   => 1,
        Debug => $verbose
    ) || die();
    $client->auth( $user, $pass );
    return $client;
}

sub _login_imap4
  #
  # 1. SSL-Verbindung zu einem imap4s-Server aufbauen
  # 2. Mit den übergebenen Zugangsdaten authentifizieren
  #
{
    my $host   = shift;
    my $user   = shift;
    my $pass   = shift;
    my $client = Mail::IMAPClient->new( Debug => $verbose ) || die;
    $client->Server($host);
    $client->Ssl(1);
    $client->connect || die;
    $client->User($user);
    $client->Password($pass);
    $client->login;
    say "IMAP4 -- $host -- $user -- OK!";
    return $client;
}

sub _login_smtp
  #
  # 1. SSL-Verbindung zu einem smtp-Server aufbauen
  # 2. Mit den übergebenen Zugangsdaten authentifizieren
  #
{
    my $host   = shift;
    my $user   = shift;
    my $pass   = shift;
    my $helo   = shift;
    my $client = Net::SMTP->new(
        Host      => $host,
        Debug     => $verbose,
        SSL       => 1,
        SendHello => 0,
    ) || die();
    $client->hello($helo) || die();
    $client->auth( $user, $pass );
    return $client;
}

View full thread Net::POP3 - Timeout für Authentifizierung setzen?