#-*- perl -*- # # Copyright (C) 2018 Ken'ichi Fukamachi # All rights reserved. This program is free software; you can # redistribute it and/or modify it under the same terms as Perl itself. # # $FML$ # package Mail::Message::Encode::Obsolete; use strict; use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD); use Carp; =head1 NAME Mail::Message::Encode::Obsolete - obsolete encode/decode routines. =head1 SYNOPSIS =head1 DESCRIPTION Temporarily obsolete functions in Mail::Message::Encode are moved to here. =head1 MIME ENCODE/DECODE =head2 encode_mime_string($str, $encode, $out_code, $in_code) encode string $str to encoding system $encode with output code $out_code. $in_code is used as a hint. =cut # Descriptions: encode string. # Arguments: OBJ($self) STR($str) STR($encode) STR($out_code) STR($in_code) # Side Effects: croak() if language is unknown. # Return Value: STR sub encode_mime_string { my ($self, $str, $encode, $out_code, $in_code) = @_; my $lang = $self->{ _language }; my $str_orig = $str; my $str_out = ''; # base64 encoding by default. $encode ||= 'base64'; # code by default if ($lang eq 'japanese') { $out_code ||= 'jis'; $str = $self->convert($str, $out_code, $in_code); } else { croak("Mail::Message::Encode: unknown language"); } if ($encode eq 'base64') { eval q{ use IM::Iso2022jp; $str_out = line_iso2022jp_mimefy($str); }; } elsif ($encode eq 'qp') { eval q{ use IM::Iso2022jp; $main::HdrQEncoding = 1; $str_out = line_iso2022jp_mimefy($str); $main::HdrQEncoding = 0; }; } else { croak("Mail::Message::Encode: unknown encoding"); } return $str_out ? $str_out : $str_orig; } =head2 decode_mime_string(string, [$options]) decode a base64/quoted-printable encoded string to a plain message. The encoding method is automatically detected. C<$options> is a HASH REFERENCE. You can specify the charset of the string to return by $options->{ charset }. [reference] RFC1554 says: reg# character set ESC sequence designated to ------------------------------------------------------------------ 6 ASCII ESC 2/8 4/2 ESC ( B G0 42 JIS X 0208-1978 ESC 2/4 4/0 ESC $ @ G0 87 JIS X 0208-1983 ESC 2/4 4/2 ESC $ B G0 14 JIS X 0201-Roman ESC 2/8 4/10 ESC ( J G0 58 GB2312-1980 ESC 2/4 4/1 ESC $ A G0 149 KSC5601-1987 ESC 2/4 2/8 4/3 ESC $ ( C G0 159 JIS X 0212-1990 ESC 2/4 2/8 4/4 ESC $ ( D G0 100 ISO8859-1 ESC 2/14 4/1 ESC . A G2 126 ISO8859-7(Greek) ESC 2/14 4/6 ESC . F G2 =cut # Descriptions: decode MIME string. # Arguments: OBJ($self) STR($str) STR($out_code) STR($in_code) # Side Effects: croak() if language is unknown. # Return Value: STR sub decode_mime_string { my ($self, $str, $out_code, $in_code) = @_; my $lang = $self->{ _language }; my $str_out = ''; unless ($str) { return $str;} if ($lang eq 'japanese') { if ($str =~ /=\?utf-8\?[bq]\?/i) { $str_out = $self->decode_mime_utf8_to_euc($str); } else { eval q{ use IM::EncDec; $str_out = mime_decode_string( $str ); }; return $str if $@; } # XXX IM returns "ESC$(B ... " string but # XXX mule 2.3 cannot read "ESC$(B ... ESC(B" string as JIS. # XXX ng detects it as ASCII. # XXX Whereas, w3m looks to be able to read it ? $str_out =~ s/^\e\$\(B/\e\$B/; # make mule read this string. # XXX-TODO: use Mail::Message::Charset ? $in_code = $self->detect_code($str_out); $out_code |= 'euc-jp'; # euc-jp by default. } else { croak("Mail::Message::Encode: unknown language"); } return $self->convert($str_out, $out_code, $in_code); } # Descriptions: decode mime encoded string for utf8. # Arguments: OBJ($self) STR($str) # Side Effects: none # Return Value: STR sub decode_mime_utf8_to_euc { my ($self, $str) = @_; if ($str =~ /=\?utf-8\?(\w)\?/i) { if ($1 =~ /B/i) { $str =~ s/=\?utf-8\?B\?([A-Za-z0-9+\/]+=*)\?=/$1/gi; $str = $self->raw_decode_base64($str); } elsif ($1 =~ /Q/i) { $str =~ s/=\?utf-8\?q\?([\x20-\x7e\t]+?)\?=/$1/gi; $str = $self->raw_decode_qp($str); } } $str =~ s/\n//g; use Jcode; return Jcode->new($str,"utf8")->euc; } =head1 CODING STYLE See C on fml coding style guide. =head1 AUTHOR Ken'ichi Fukamachi =head1 COPYRIGHT Copyright (C) 2018 Ken'ichi Fukamachi All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 HISTORY Mail::Message::Encode first appeared in fml8 mailing list driver package. See C for more details. =cut 1;