Thread Perl Script PGP Email entschlüsseln und weiterleiten (18 answers)
Opened by Chris at 2017-02-17 21:26

Linuxer
 2017-02-17 22:23
#186112 #186112
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Und was für Fehler kommen? Werden Dir die Fehlermeldungen verschwiegen? Sollen wir raten?

Ich denke, Du wirst Dich ein wenig mit Perl auseinandersetzen müssen ;-)


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
sub decode {

    my $entity = shift @_;

    #Create new Mail GPG obj
    my $mg = Mail::GPG->new;

    #Decrypt the email from stdin
    my ($decrypted_entity, $result) = $mg->decrypt (
        entity     => $entity,
        passphrase => $passphrase
    );

    #Get a reference to the decoded message body
    my $decoded_body_sref = $result->get_gpg_stdout;
    return $decoded_body_sref;
#    my $to = 'chris';
#    my $from = 'root';
#    my $subject = 'Test Email';
#open(MAIL, "|/usr/sbin/sendmail -t");
#print MAIL "To: $to\n";
#print MAIL "From: $from\n";
#print MAIL "Subject: $subject\n\n";
#print MAIL $decoded_body_sref ;
#close(MAIL);
#print "Email Sent Successfully\n";
}


Generell wird die Subroutine mit return $decoded_body_sref bereits wieder verlassen, bevor der Code zum Mailversand erreicht werden kann.

Zum Mailversand (hab's nur schnell gelesen und schnell geantwortet, daher leider nur in Stichworten):
- nutze lexikalische Datei-Handles
- nutze 3-Argument-Form des open
- prüfe Systemaufrufe wie open() auf Erfolg; gleiches beim close() ...
- $decoded_body_sref enthält eine Referenz, die man dereferenzieren muss
- Pack den Mailversand in eine eigene Routine, und nicht mit in die decode-Routine
- Rufe diese Routine dann im Main auf, nachdem Du die Referenz auf den entschlüsselten Text hast
- Sauberer und Besser wäre es, ein passendes Modul zum Mail-Versand zu nehmen; z.B. CPAN:Email::Sender


Schnell gehackter und ungetesteter Vorschlag:
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
...
### MAIN

# we get a reference to body
my $unencrypted_body = &parse_email($stdin);

# ***NEW*** sent dereferenced body by mail
mail_it( $$unencrypted_body );


...

sub decode {

    my $entity = shift @_;

    #Create new Mail GPG obj
    my $mg = Mail::GPG->new;

    #Decrypt the email from stdin
    my ($decrypted_entity, $result) = $mg->decrypt (
        entity     => $entity,
        passphrase => $passphrase
    );

    #Get a reference to the decoded message body
    my $decoded_body_sref = $result->get_gpg_stdout;

    return $decoded_body_sref;
    
    # ***NEW*** removed mail sending
}


# ***NEW*** own subroutine for mail sending
sub mail_it {
    my $mailtext = shift;

    my $to      = 'chris';
    my $from    = 'root';
    my $subject = 'Test Email';

    open( my $mailer, "|-", "/usr/sbin/sendmail -t" )
      or die "Could not open sendmail: $!";

    # one print to print it all
    print $mailer <<"END_OF_MESSAGE";
To: $to
From: $from
Subject: $subject

$mailtext

END_OF_MESSAGE

    close( $mailer ) or die "Close sendmail failed: $!";

    print "Email Sent Successfully\n";
}


edit: fixed typo in code; thanks Chris
Last edited: 2017-02-18 00:03:25 +0100 (CET)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Perl Script PGP Email entschlüsseln und weiterleiten