Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

JavaMail i zapis do MySQL

0 views
Skip to first unread message

D.

unread,
Oct 8, 2004, 8:25:12 AM10/8/04
to
Witam,

chcialbym pobrane za pomoca JavaMail wiadomosci, zapisywac do bazy danych tak,
by potem mozna bylo je w kazdej chwili wyswietlac z bazy danych. Chcialbym miec
mozliwosc zapisywania CALYCH maili - wraz z zalacznikami, obrazkami w tresci
maila itp.
Jak to zrobic?
Czy da sie zapisac do bazy danych caly obiekt Message jako blob'a, a pozniej
odczytac go z bazy jako obiekt Message i dalej przetwarzac w celu jego
wyswietlenia?
Czy ktos moze mi udzielic wskazowek jak to zrobic, ewentualnie podeslac jakis
krotki przyklad.
Pozdrawiam
D.

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl

Wojciech Jakóbczyk

unread,
Oct 8, 2004, 8:43:03 AM10/8/04
to
> Czy da sie zapisac do bazy danych caly obiekt Message jako blob'a, a pozniej
> odczytac go z bazy jako obiekt Message i dalej przetwarzac w celu jego
> wyswietlenia?

rtfm
http://java.sun.com/products/javamail/javadocs/javax/mail/internet/MimeMessage.html#MimeMessage(javax.mail.Session,%20java.io.InputStream)
MimeMessage.writeTo

wojtek

ta...@poczta.onet.pl

unread,
Oct 8, 2004, 12:26:39 PM10/8/04
to
> > Czy da sie zapisac do bazy danych caly obiekt Message jako blob'a, a
pozniej
> > odczytac go z bazy jako obiekt Message i dalej przetwarzac w celu jego
> > wyswietlenia?
>
http://java.sun.com/products/javamail/javadocs/javax/mail/internet/MimeMessage.h
tml#MimeMessage(javax.mail.Session,%20java.io.InputStream)
> MimeMessage.writeTo
>
> wojtek

1. zapisuje maile do bazy tak:
ByteArrayOutputStream bout = new ByteArrayOutputStream();
message.writeTo(bout);
byte[] byteArray = bout.toByteArray();
MyMail mail = new MyMail();
mail.setMessage(byteArray);
mail.save();

gdzie MyMail jest obiektem torque a metoda setMessage zapisuje BLOBA

2. probuje odczytac tak:
MyMail mail = MyMailPeer.retrieveByPK(1);

InputStream in = new InputStream(mail.getMessage());
ObjectInputStream s = new ObjectInputStream(in);

w tym momencie dostaje komunikat:
java.io.StreamCorruptedException: invalid stream header
at java.io.ObjectInputStream.readStreamHeader
(ObjectInputStream.java:737)
at java.io.ObjectInputStream.(ObjectInputStream.java:253)

dlaczego?
co jest zle?

Wojciech Jakóbczyk

unread,
Oct 11, 2004, 5:29:07 AM10/11/04
to
> ByteArrayOutputStream bout = new ByteArrayOutputStream();
> message.writeTo(bout);
> byte[] byteArray = bout.toByteArray();
> MyMail mail = new MyMail();
> mail.setMessage(byteArray);
[...]

> InputStream in = new InputStream(mail.getMessage());
> ObjectInputStream s = new ObjectInputStream(in);
>
> w tym momencie dostaje komunikat:
> java.io.StreamCorruptedException: invalid stream header
> at java.io.ObjectInputStream.readStreamHeader
> (ObjectInputStream.java:737)
> at java.io.ObjectInputStream.(ObjectInputStream.java:253)
>
> dlaczego?
> co jest zle?

zapisujesz tablice bajtow (ByteArrayOutputStream) a probujesz odczytac
obiekt (ObjectInputStream).

wojtek

ta...@poczta.onet.pl

unread,
Oct 11, 2004, 5:46:25 AM10/11/04
to
> > ByteArrayOutputStream bout = new ByteArrayOutputStream();
> > message.writeTo(bout);
> > byte[] byteArray = bout.toByteArray();
> > MyMail mail = new MyMail();  
> > mail.setMessage(byteArray);
> [...]
> > InputStream in = new InputStream(mail.getMessage());
> > ObjectInputStream s = new ObjectInputStream(in);
>
> zapisujesz tablice bajtow (ByteArrayOutputStream) a probujesz odczytac
> obiekt (ObjectInputStream).

jestem poczatkujacy w javie, wiec moze czegos nie wiem..
instrukcja: mail.getMessage() zwraca mi tablice bajtow (byte[]) - niech Cie nie
zwiedzie nazwa metody - ona nie zwraca mi obiektu Message, ale byte[]
tworze z otrzymanje tablicy bajtow InputStreem, potem ObjectOutpuStream by
finalnie z tej zapisanej w bazie jak blob tablicy bajtow odtworzyc obiekt
Message JavaMail'a..
i dostaje wspomniany komunikat :(
jak to zrobic by bylo dobrze?
a moze jest inny sposob zapisywania maili do bazy (razem z zalacznikami i
html), by potem latwo mozna je bylo pobrac z niej i wyswietlic na www?

0 new messages