Schrift
[thread]914[/thread]

Multipart Mail: Plaintext / HTML mit Grafik

Leser: 1


<< >> 7 Einträge, 1 Seite
Captain Future
 2007-04-05 16:59
#9887 #9887
User since
2004-01-16
19 Artikel
BenutzerIn
[default_avatar]
Hallo Leute,

vielleicht kann mir ja einer von euch bei folgender Sache weiterhelfen.

Ich möchte eine E-Mail versenden die aus Plaintext und HTML mit Grafikanhang besteht und dem user je nach Mail-Client/Einstellung Plaintext oder HTML mit Grafik anzeigt.
Das ganze wenn möglich ohne Module!!

Es sollte also eine Multipart/alternative mail sein, die für den HTML und Grafik Teil nochmal eine Multipart/mixed Teil enthält.

## Multipart/alternative ANFANG
## Boundary 1
## Text Plain
## Boundary 1
#### Multipart/mixed ANFANG
#### Boundary 2
#### Content text/html
#### Boundary 2
#### Content image/gi || application/octet-stream
#### Boundary 2 Ende
#### Multipart/mixed ENDE
## Boundary 1 Ende
## Multipart/alternative ENDE

Irgendwie stimmt da was mit dem Header oder so nicht ?

Prob 1:
Die Mail wird nicht von vornherein als Mail mit Anhang ausgewiesen - erst nach aufruf.

Prob 2:
Die Grafikdatei sollte eigentlich in der Mail eingebettet sein.

Prob 3:
Die Mail sollte so konform sein, daß sie in möglichst vielen Mail-Clients und Betriebssystemen problemlos in Plaintext oder HTML angezeigt wird.

Prob 4:
Die Grafikdatei bleibt für alle Mails an verschiedene user gleich und sollte dann aus ner Variablen eingefügt werden, sodaß nicht jedesmal die Gif-Datei eingelesen und codiert werden muss.

Prob 5:
Die Textinformationen sind in dem Hauptscript in utf-8 gespeichert. Der Body-Text wird in der Mail richtig dargestellt nur der subject ist total kaputt.

Versand erfolgt übrigens per sendmail also auf nem unix-system mit Perl 5.8.8.

Hier mal mein Quellcode:

Code: (dl )
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
57
58
59
#!/usr/bin/perl

use strict;
use Time::Local;
use MIME::Base64;

# Variablen-Blub
#my(subject, text, htmlxode, ...) =

my $bild_anhang_dateiname = $dir_pic.'grafik.gif';
my $bild_anhang;
open(BILD, "<$bild_anhang_dateiname");
#binmode(BILD);
my $bild_anhang_dateigroesse = -s $bild_anhang_dateiname;
read(BILD, $bild_anhang, $bild_anhang_dateigroesse);
close(BILD);
my $mail_grafik = encode_base64($bild_anhang);

my $boundary = 'Message-Boundary'.'___'.time.$user_id.time;
my $boundary2 = 'Message-Boundary_2'.'___'.$user_id.time.$user_id;

open (MAIL, "|$mailprog -oi -t");
print MAIL "MIME-Version: 1.0\n";
#print MAIL "Return-Path: $mailsender\n";
print MAIL "Content-Type: multipart/alternative; boundary=\"$boundary\"\n";
print MAIL "From: $mailsender\n";
print MAIL "To: $user_email\n";
print MAIL "Subject: $subject\n\n";
print MAIL "This is a multi-part message in MIME format.\n";
print MAIL "--".$boundary."\n";
#### Die Nachricht als Text-Mail
print MAIL "Content-Type: text/plain; charset=\"utf-8\"\n";
print MAIL "Content-Transfer-Encoding: 8bit\n";
print MAIL "$text_part01 $user_name,\n\n";
print MAIL "$text_part02\n\n";
print MAIL "$text_part03\n";
print MAIL "$mail_link01\n\n";
print MAIL "$text_part04\n\n";
print MAIL "--".$boundary."\n";
### Anfang des 2. Teil der Mail mit HTML und Grafik (multipart/mixed)
print MAIL "Content-Type: multipart/mixed; boundary=\"$boundary2\"\n\n";
print MAIL "--".$boundary2."\n";
## Die Nachricht als HTML-Mail
print MAIL "Content-Type: text/html; charset=\"utf-8\"\n";
print MAIL "Content-Transfer-Encoding: quoted-printable\n";
print MAIL "$html_mail_message\n";
print MAIL "--".$boundary2."\n";
#print MAIL "Content-type: application/octet-stream; name=\"grafik.gif\"\n";
print MAIL "Content-type: image/gif; name=\"grafik.gif\"\n";
print MAIL "Content-transfer-encoding: base64\n";
#print MAIL "Content-Disposition: attachment; filename=\"grafik.gif\"\n";
print MAIL "Content-Disposition: inline; filename=\"grafik.gif\"\n";
print MAIL "$mail_grafik\n";
print MAIL "\n";
### Ende des 2. Teil der Mail mit HTML und Grafik (multipart/mixed)
print MAIL "--".$boundary2."--\n\n";
print MAIL "--".$boundary."--\n";

close (MAIL);


Wäre super wenn von euch jemand dazu eine Idee hätte und mir weiterhelfen könnte.

Schon danke im voraus.

Ciao Captain Future
GwenDragon
 2007-04-05 17:13
#9888 #9888
User since
2005-01-17
14787 Artikel
Admin1
[Homepage]
user image
Warum kein Modul? Du verwendest doch auch schon Mime::Base64!? Wieso rechnest du das dann nicht selbst? ;)

Spaßbeiseite.

Ich würde CPAN:MIME-tools verwenden. Da ersparst du die die Zusammenstückelei.

Ansonsten würde ich kein \n verwenden! Das konvertiert nur auf einem System richtig für MIME!
RFC-1521 sagt aus, dass Zeilenenden \x0D\x0A sein müssen!\n\n

<!--EDIT|GwenDragon|1175779170-->
Captain Future
 2007-04-05 18:36
#9889 #9889
User since
2004-01-16
19 Artikel
BenutzerIn
[default_avatar]
@GwenDragon

danke erstmal.
Ja gut Base64 muss nun wirklich nicht selber sein. ;-)

Ich würde das schon gerne ohne Modul wissen.
Das zusammenfrickeln find ich nicht so schlimm.

Komisch ist auch das der HTML-Mailtext in utf-8 ok ist aber der Betreff als irgendwas anderes ankommt, obwohl die Quellen in utf-8 vorliegen.

Ciao Captain Future
GwenDragon
 2007-04-05 22:26
#9890 #9890
User since
2005-01-17
14787 Artikel
Admin1
[Homepage]
user image
Ich würde ja besser Quoted-Printable nehmen, das ist sicherer.
pKai
 2007-04-08 00:36
#9891 #9891
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
WG: Subject

Wahrend im Body ggf. Zeichen mit gesetztem 8. Bit O.K. sind,
sind diese im RFC822-Header nie zulässig.

Um hier entsprechende Daten zu übertragen (z. B. im Subject)
definiert RFC2047 (ftp://ftp.rfc-editor.org/in-notes/rfc2047.txt)
hierfür ein Codierungsschema, um diese Daten "inline" entweder
Quoted-Printable oder Base64 zu codieren.
I sense a soul in search of answers.
Captain Future
 2007-04-10 17:39
#9892 #9892
User since
2004-01-16
19 Artikel
BenutzerIn
[default_avatar]
Hi, hab das mal so gemacht:


Code: (dl )
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
my $msg = MIME::Lite->new(


From => "$mailsender",


To => "$user_email",


Subject => "$subject",


Type => 'multipart/mixed',


);
$msg->attach( Type => 'text/plain; charset="utf-8"',

Encoding => 'quoted-printable',

Data => "$text_mail_message");

$msg->attach( Type => 'text/html; charset="utf-8"',

Encoding => 'quoted-printable',

Data => "$html_mail_message");

$msg->attach( Type => 'image/gif',

Encoding => 'base64',

Path => "$dir_pic"

);




MIME::Lite->send('sendmail', "/usr/sbin/sendmail -t -oi");
$msg->send;


Wenn das ganze als multipart/alternative raus geht wird im Mail-Client text und html gleichzeitig angezeigt und die Grafik nur als Anhang.

Und bei utf-8 subject daten geht garnix mer - kein mailversand. hmmm

Ich glaube den HTML-Teil mit Grafik muss ich nochmal in ein multipart/mixed Stück kapseln aber wie mit dem Modul in der Doc stehen auch nur text mit daetianhang und nur html mit Dateianhang Beispiele.

Ciao Captain Future
Captain Future
 2007-04-11 11:46
#9893 #9893
User since
2004-01-16
19 Artikel
BenutzerIn
[default_avatar]
@pKai
Danke für den Hinweis.

Ich Poste hier mal den Code, mit dem ich das 7bit - 8bit Problem in Verbindung mit UTF-8 im Subject des Mailheaders in den Griff bekommen habe.
Hoffe das kann sonst auch noch jemand gebrauchen:
Code: (dl )
1
2
3
use Encode qw/encode/;
...
$smtp_agent -> subject( encode('MIME-Q', $subject ));

Encode::MIME... aus Perldoc

An der Multipart/Alternative Sache bin ich noch dran. :-)

Ciao Captain Future
<< >> 7 Einträge, 1 Seite



View all threads created 2007-04-05 16:59.