Bonjour,
on me demande d'apporter quelques modifications à un code mais j'ai un soucis pour savoir de quel format de mail il s'agit dans l'analyse de ce code.
Si vous pouviez m'indiquer cela, ça m'aiderait beaucoup.
Voici quelques bouts de code :
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
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 #--8<--------------------------------------------------------------------------# # # RECUPERATION DU FICHIER MIME # #-------------------------------------------------------------------------->8--# my $path_to_delete = ""; my $temp_path = "$PATH_VAR_TMP/mms_parser-" . int(rand(999999999)); system("/bin/rm -rf $temp_path"); mkdir($temp_path) or log_msg('alert', "Couldn't create $temp_path") and exit(75); $path_to_delete = $temp_path; my $parser = MIME::Parser->new; $parser->output_under($temp_path); $parser->ignore_errors(1); # Réception de l'entrée standard my $is_quoted_printable = 0; my $concat = 0; my $fh; my $str; { while (<STDIN>) { if ($concat) { $str .= $_; } else { $str = $_; } if ($is_quoted_printable) { if ($str =~ /\x3d\x0d\x0a/) { $str =~ s/\x3d\x0d\x0a//; $concat = 1; } else { $concat = 0; } } if ($str =~ /Content-Transfer-Encoding/) { if ($str =~ /quoted-printable/) { $is_quoted_printable = 1; } else { $is_quoted_printable = 0; } } if ($is_quoted_printable) { $str =~ s/\=($PROHIBITED_ENCODING)//g; $str =~ s/&#\d{5};//g; } if (!$concat) { $fh .= $str; $str = ""; } } $fh .= $str if (length($str)); }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #--8<--------------------------------------------------------------------------# # # PARSING DU FICHIER MIME # #-------------------------------------------------------------------------->8--# my $entity = eval { $parser->parse_data($fh) }; $error = ($@ || $parser->last_error); # Traitement d'erreur BASIQUE. Il faut examiner les types d'erreurs # lors des tests, et vérifier si l'on ne peut pas passer outre. if (length($error)) { my $path = "$PATH_VAR_MMS/trash/" . time() . '-err-' . sprintf("%.f", rand(1000000)) . "$EMAIL_EXT"; if (open(ERR, ">$path")) { print(ERR $fh); log_msg('err', "MIME parsing failed. File saved to $path.\n$error"); exit(0) ; } log_msg('err', "$@ $!"); exit(0); # syslogging wanted here ... } $error = 0;
MerciCode:
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 # ---- # parse_header : # Paramètres : Un en-tête MIME. # ---- sub parse_header { my $header = shift; # Cette regexp est tres dependante du format de MessageID (infra amont) # effectuer un eval de # $split_id = "(split(/\./, $header->get('message-id')))[0,1]" ? my ($ext_id, $id) = (split(/\./, $header->get('message-id')))[0,1]; unless (defined($id) || defined($ext_id)) { log_msg('err', "ID or EXT-ID invalid. Exiting."); dump_bad_mail($fh, time() . "-ID"); exit(0); } $ext_id = $1 if ($ext_id =~ /\D*(\d+)\D*/); $id = $1 if ($id =~ /\D*(\d+)\D*/); # get MSISDN my $from = $header->get('from'); unless(defined($from)) { log_msg('err', "No 'From' field available ! Exiting."); dump_bad_mail($fh, time() . "-$id"); exit(0); } [...] }