MIME::Entity
Philipp Hasenfratz
- perl
Halihallo
hab mich bem Doku lesen grün und blau geärgert, als ich ...
---
Instance method. Get the encoded (transport-ready) body, as an array of lines. This is a read-only data structure: changing its contents will have no effect. ^-------------------^
^-------^
---
...las. Warum zum ... kann ich den Body eines Entities nicht nachträglich noch ändern? - Hab auch mal im Source des Moduls nachgeschaut und hab nur folgendes gefunden:
sub body {
my ($self, $value) = @_;
if (@_ > 1) { ### setting body line(s)...
croak "you cannot use body() to set the encoded contents\n";
^----------------------------------------------------------^
}
else { ### getting body lines...
...
}
}
zeimlich frech dieses Modul, wo ich doch nur den Text einer Mail kurz nachträglich ändern will, da ich dessen Inhalt beim build noch nicht kenne.
Jemand Kommentar oder gar Lösung???
Greets
Philipp
Hallo Philipp,
sub body {
my ($self, $value) = @_;
if (@_ > 1) { ### setting body line(s)...
croak "you cannot use body() to set the encoded contents\n";
»»
Ich habe mal in einer älteren Version dieses Moduls nachgesehen, und da stand
<cite>
=item body [VALUE]
I<Instance method.>
Get or set the body, as an array of lines. This should be regarded
as a read-only data structure: changing its contents will have
unpredictable results (you can, of course, make your own copy,
and work with that).
</cite>
bzw.
<cite>
sub body {
my ($self, $value) = @_;
if (@_ > 1) { # setting body line(s)...
return $self->bodyhandle(new MIME::Body::Scalar $value);
}
else { # getting body lines...
return ($self->bodyhandle ? [$self->bodyhandle->as_lines] : []);
}
}
</cite>
zeimlich frech dieses Modul, wo ich doch nur den Text einer Mail kurz nachträglich ändern will, da ich dessen Inhalt beim build noch nicht kenne.
Jemand Kommentar oder gar Lösung???
Jetzt könntest Du natürlich dieses
$self->bodyhandle(new MIME::Body::Scalar $value);
nachbilden, bzw.. verwenden. Allerdings denke ich, daß der Author dieses Moduls sicherlich gute Gründe gehabt hat, den Body nicht mehr so ändern zu lassen.
Du könntest ja das build so lange hinauszögern, bis Du weißt, was Du eigentlich haben willst. Die Informationen, die Du für ein build brauchst, speicherst Du dann gleich in ein passendes Hash, welches Du dann am Ende der Methode build übergibst.
Grüße
Klaus
Halihallo Klaus
zeimlich frech dieses Modul, wo ich doch nur den Text einer Mail kurz nachträglich ändern will, da ich dessen Inhalt beim build noch nicht kenne.
Jemand Kommentar oder gar Lösung???
Jetzt könntest Du natürlich dieses
$self->bodyhandle(new MIME::Body::Scalar $value);
nachbilden, bzw.. verwenden. Allerdings denke ich, daß der Author dieses Moduls sicherlich gute Gründe gehabt hat, den Body nicht mehr so ändern zu lassen.
Ja, ich habe auch schon daran gedacht, das build-in Modul zu verändern, aber ich muss gestehen, dass mir dies nicht zusagt...
Ich dachte mir: MIME::Entity setzt sich aus einem MIME::Header und MIME::Body zusammen, das Modul MIME::Body bietet jedoch die Möglichkeit den Body zu verändern, also wieso nicht auch MIME::Entity? - Ist doch eine "Inkonsistenz" und eine Verachtung des grundlegenden OOP - Styles. Nun, ich bin zu folgender Erkenntnis gelangt:
Nicht jedes Entity hat einen Body (steht auch in der Doku). Somit wäre der schreibzugriff auf den Body ein "fehler" (verstoss gegen die Richtlinien der RFC). Ich glaube, dass aufgrund dieser Tatsache, der Autor es unterliess, den Body nachträglich ändern zu können.
Du könntest ja das build so lange hinauszögern, bis Du weißt, was Du eigentlich haben willst. Die Informationen, die Du für ein build brauchst, speicherst Du dann gleich in ein passendes Hash, welches Du dann am Ende der Methode build übergibst.
Ja, nachträglich (noch etwas später in der Nacht), hatte ich die selbe Idee und es dann auch so gemacht. Ich warte, bis das Programm den Header und Body des ersten Entities festgelegt hat, dann wird es generiert. Werden dann noch weitere Parts attached, werden diese dem generierten angehängt, oder in einem Hash aufbewahrt.
Danke für deine Hilfe
Philipp