Kleines HTML-Mail Problem mit Perl/MIME::Lite
Nick
Hi Board,
Hab da ein kleines Problem.
Ich würde gern HTML-Mails verschicken, die bei Empfängern, die keine HTML-Mails anzeigen, einen Text ausgeben (z.B. wenn die HTML-Ansicht ausgeschalten ist) und gleichzeitig noch eine Textdatei mitschicken.
So.. das ist das was ich will.
Das schaff ich auch, aber nicht ganz so wie ich das will.
Ich nutze das Modul MIME::Lite und mache das im Prinzip folgendermassen:
$msg = MIME::Lite->new(
To =>$empfaenger,
From =>$from,
Subject =>$subject,
Type =>'multipart/alternative'
);
$msg->attach(
Type => 'text/plain',
Data => $plaininhalt,
);
$msg->attach(
Type => 'text/html; charset=iso-8859-1',
Data => $htmlinhalt
);
$msg->attach(
Type =>'text/plain',
Data =>"$textinhalt",
Filename => "testletter.txt",
Disposition => 'attachment'
);
Das Problem nun dabei:
In Outlook Express sieht das genauso aus, wie ich mir das vorstelle. Der $plaininhalt wird ausgegeben wenn HTML-Ansicht deaktiviert ist, die Datei wird angehängt und in Ihr steht $textinhalt und angezeigt wird $htmlinhalt.
Anders jetzt z.B. bei web.de . Dort fehlt das Attachment. Ändere ich jetzt auf multipart/mixed ist zwar das Attachment mit dabei, aber $plaininhalt und $htmlinhalt werden auf einer Seite ausgegeben.. ebenso bei Outlook.
Wie schaff ich's denn dass bei möglichst allen Mail-Anbietern das genauso aussieht wie gewünscht?
Gruß,
nick
Halihallo Nick
Hi Board
Forum, bitte. Nicht Board!
Ich würde gern HTML-Mails verschicken, die bei Empfängern, die keine HTML-Mails anzeigen, einen Text ausgeben (z.B. wenn die HTML-Ansicht ausgeschalten ist) und gleichzeitig noch eine Textdatei mitschicken.
multipart/mixed
|
+-- multipart/alternative
| |
| +-- text/html
| |
| +-- text/plain
|
+-- text/plain, attached
Das einfach mit MIME-Lite umsetzen. Ggf. auf Module von MIME-Tools
zurückgreifen, da man da die Parts logisch über OO-Interface
aufbauen kann, was ich persönlich stilvoller finde...
Wie schaff ich's denn dass bei möglichst allen Mail-Anbietern das genauso aussieht wie gewünscht?
Versuche es mit dem obengenannten, sollte funktionieren.
Probleme gabs bei mir erst in Verbindung mit Attachments, alternative
und dazu noch ein multipart/related für HTML-Darstellung inklusive
beigelegter Ressourcen, also etwa folgendes:
multipart/mixed
|
+-- multipart/alternative
| |
| +-- multipart/related
| | |
| | +-- text/html
| | |
| | +-- image/gif
| |
| +-- text/plain
|
+-- application/x-octet-stream, irgendein Attachment halt...
Daran bin ich dann gescheitert, falls sowas mal jemand hinbekommen
hat, würde mich die Lösung interessieren!
|
+-- </archiv/2004/2/73236/#m421824>, wieder einmal :-)
Viele Grüsse
Philipp
Halihallo Nick
Hi Philipp,
Forum, bitte. Nicht Board!
ist doch dasselbe?
multipart/mixed
|
+-- multipart/alternative
| |
| +-- text/html
| |
| +-- text/plain
|
+-- text/plain, attachedDas einfach mit MIME-Lite umsetzen. Ggf. auf Module von MIME-Tools
zurückgreifen, da man da die Parts logisch über OO-Interface
aufbauen kann, was ich persönlich stilvoller finde...
Wie kann ich denn eine derartige, naja Baumstruktur mit MIME::Lite
verwirklichen? Geht das überhaupt?
MIME::Entity kann ich leider nicht verwenden und mit MIME::Lite
haut's nicht hin.
Sollte das doch gehen, wäre ich sehr dankbar, wenn Du mir bitte
nochmal einen Tipp, am besten ein Codebeispiel geben könntest, wie
du das gedacht hast?
Viele Grüsse
ebenso
Philipp
Nick
Halihallo Nick
Forum, bitte. Nicht Board!
ist doch dasselbe?
http://aktuell.de.selfhtml.org/artikel/gedanken/foren-boards/index.htm
Nicht ganz :-)
Wie kann ich denn eine derartige, naja Baumstruktur mit MIME::Lite
verwirklichen? Geht das überhaupt?
Jep.
MIME::Entity kann ich leider nicht verwenden und mit MIME::Lite
haut's nicht hin.
Naja, es ist auch nicht nötig MIME::Entity zu verwenden. Wie ich
soeben bemerkt habe, kann man es auch mit MIME-Lite tun. Ich hatte
seither nur Erfahrungen mit dem MIME-Tools (MIME::Entity,
MIME::Parser, ...)
Sollte das doch gehen, wäre ich sehr dankbar, wenn Du mir bitte
nochmal einen Tipp, am besten ein Codebeispiel geben könntest, wie
du das gedacht hast?
Normalerweise wird hier nie kompletter Quelltext gepostet, aber da
ich dies zum Testen gemacht habe, muss ich ihn dir ja nicht
vorenthalten:
#!/usr/bin/perl
use strict;
use warnings;
use MIME::Lite;
use Net::SMTP;
my $host = 'mail.smtp_host.de';
my $entity = MIME::Lite->new(
From => 'philipp.hasenfratz@gmx.net',
To => 'philipp.hasenfratz@gmx.net',
Subject => 'Test multipart/mixed with alternative',
Type => 'multipart/mixed',
);
my $alt = $entity->attach(
Type => 'multipart/alternative',
);
$alt->attach(
Type => 'text/plain',
Data => 'hello world in text',
);
$alt->attach(
Type => 'text/html',
Data => 'hello world in <b>html</b>',
);
$entity->attach(
Type => 'text/plain',
Disposition => 'attachment; filename=hello.txt',
Data => 'hello world in text and as attachment',
);
print $entity->as_string();
my $smtp = new Net::SMTP( $host, Timeout=>60, Debug=>1 );
unless (defined $smtp) {
for ( my $i=0; $i < 5; $i++ ) {
$smtp = new Net::SMTP( $host, Timeout=>60, Debug=>1 );
if (defined $smtp) { last; }
}
}
unless (defined $smtp) {
die("cannot open connection to SMTP server @\ $host");
}
$smtp->mail( 'philipp.hasenfratz@gmx.net' );
$smtp->to( 'philipp.hasenfratz@gmx.net' );
$smtp->data();
$smtp->datasend($entity->as_string());
$smtp->dataend();
$smtp->quit();
Viele Grüsse
Philipp
Halihallo Nick
Hi Philipp
http://aktuell.de.selfhtml.org/artikel/gedanken/foren-boards/index.htm
Nicht ganz :-)
Man lernt nie aus :-)
my $alt = $entity->attach(
Type => 'multipart/alternative',
);
Achso geht das. Ich hatte nämlich in der Art rumprobiert, fand aber keine Möglichkeit, in diesem Fall $alt und $entity irgendwie zu verknüpfen.
Es funktioniert auf jeden Fall, danke Dir für die Hilfe. Werd mir das noch näher anschauen.
Philipp
Gruß,
Nick