MIME::Entity
Philipp Hasenfratz
- perl
Halihallo Forumer
meld mich mal mit einer ganz "dummen" Frage:
<code>
use strict;
use MIME::Entity;
my @lines = ('Content-Type: text/plain',
'',
'hello world');
my $mail = new MIME::Entity( [@lines] );
print $mail->as_string;
</code>
Ergibt mir den Fehler: "you cannot use body() to set the encoded contents"...
he? - Warum nicht? - Das _muss_ doch so gehen, oder?
aus der Doku:
"Note: in either case, the body will not be parsed: merely read!"
und was bringt das, wenn der Body nur gelesen wird???
Also irgendwie habe ich so meine Schwierigkeiten (ich glaub, ich muss mal ein eigenes schreiben ;-)) mit diesem Modul (hab ja schon mal was dazu gepostet...)
Viele Grüsse
Philipp
Halihallo Forumer, nochmals
meld mich mal mit einer ganz "dummen" Frage:
und steht noch immer im Raum, aber TIMTOWTDI ;)
Nach ca. 15 Minuten Fehlersuchen und Testen ist mir die Lust vergangen und hab ein eigenes Modul gebastelt:
package myMIME;
use strict;
use base qw(MIME::Entity);
sub new {
my ($class, @params) = @_;
my $self;
if (ref($params[0]) eq 'ARRAY') {
$self = $class->build( @params );
} else {
$self = $class->SUPER::new( @params );
}
bless ($self, $class);
return $self;
}
sub build {
my ($class, @params) = @_;
if (ref($params[0]) eq 'ARRAY') {
my @lines = @{$params[0]};
my (@head, @body);
my ($inHead) = 1;
foreach (@lines) {
if ($inHead == 1) {
push @head, $_;
} else {
push @body, $_;
}
if (($_ eq '') or ($_ =~ /\015|\012|\015\012/)) { $inHead = 0; }
}
my $head = new MIME::Head( [@head] );
my $head_ref = $head->header_hashref;
my %head = %{$head_ref};
my %props = (%head, Data=>[@body]);
my $entity = MIME::Entity->build( %props );
return $entity;
} else {
return $class->SUPER::build( @_ );
}
}
1;
dazu:
use strict;
use Data::Dumper;
use myMIME;
my @lines = ('Content-Type: text/html',
'From: cto@entryon.ch',
'To: cto@entryon.ch',
'',
'hello world :-)');
my $mail = myMIME->new( [@lines] );
print $mail->as_string;
1:0 für mich ;-)
Viele Grüsse
Philipp
sub build {
my ($class, @params) = @_;
if (ref($params[0]) eq 'ARRAY') {
my @lines = @{$params[0]};
my (@head, @body);
my ($inHead) = 1;
foreach (@lines) {
if ($inHead == 1) {
push @head, $_;
} else {
push @body, $_;
}
if (($_ eq '') or ($_ =~ /\015|\012|\015\012/)) { $inHead = 0; }
nix da:
if (($_ eq '') or ($_ =~ /^\015|\012|\015\012$/)) { $inHead = 0; }
so, muss es sein!
Halihallo Forumer
MIME::Parser mit in_core würde das selbe machen (für's Archiv meinetwegen ;))...
Trotzdem frage ich mich noch immer, warum das nicht gleich durch den Konstruktor von MIME::Entity geschehen kann, wo es doch in der Doku geschrieben steht...
Naja, man kann nicht alles haben...
Viele Grüsse
Philipp
PS: Das Offensichtliche (Parser!!) merkt man erst, wenn man alles schon programmiert hat :-(((