mboost-dp1

Java: Starte email-klient med vedhæftning.


Gå til bund
Gravatar #1 - tazimn
31. aug. 2010 20:57
Hej kloge hoveder!

Jeg er kommet i vanskeligheder igen..igen..

Jeg er igang med en applikation, hvori brugeren skal have mulighed for at trykke på en knap, hvorefter vedkommendes email-klient skal starte op med en adresse, et emne samt en vedhæftet fil.

Det er det sidste jeg er i bekneb over..

Javas bibliotek inderholder "java.awt.Desktop".

Ved hjælp af Desktop-objektet er det muligt, såfremt det er understøttet af platformen, at tilgå standardprogrammer på computeren.

Således starter følgende kode, email klienten på computeren.
Desktop d = Desktop.getDesktop()
d.mail()


mail()-metoden kan ligeledes modtage en URI som følger standarden for mailto-protokollen.

Der er det muligt at tilføje elementer såsom "to", "cc", "subject" og "body". Men altså ikke "attachments"..

Søgninger på min ven, google, siger at der var en mulighed i det gamle outlook 2003 men at det er blevet lukket.

Desuden er min søgning kommet forbi JavaMail API'en, men jeg ønsker ikke at applikationen skal sende emails direkte, da jeg er tilhænger af ikke at forvirre brugeren. Hvis han er vant til at sende email med Outlook, skal det blive ved sådan.

Desuden så kan jeg se problemer i at TDC endnu engang skifter SMTP-server og brugeren selv skal stå for at ændrer dette i applikationen..

Er der nogen som har en godt ide må de gerne komme med den.
Eventuelt noget med Runtime.. det kan lade sig gøre med følgende:
c:\program files (x86)\microsoft office\office12\outlook.exe /a "c:\file.txt"


Problemet er at jeg her bliver nødt til at vide hvilket program der er installeret på computeren, og hvor det ligger. Desuden kan jeg ikke finde nogle switch til at tilføje adresser eller emne.

Kan I..?

God aften!
Kenn
Gravatar #2 - røvskæg
31. aug. 2010 21:14
Nok en dead end men et alternativ :

Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler mailto:"+"address");
Gravatar #3 - røvskæg
31. aug. 2010 21:17
Gravatar #4 - Windcape
31. aug. 2010 21:21
røvskæg (2) skrev:
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler mailto:"+"address");
Det er så en platform specifik løsning (til Windows)

Et bedre alternativ er bare:


Runtime.getRuntime().exec("mailto: " + address)


Da det så er op til systemet at have en mailto handler installeret. Hvilket vist er meget normalt :)

Man kan så append de parameter der blev foreslået i #3
Gravatar #5 - røvskæg
31. aug. 2010 21:34
@Windcape
Helt enig. Det er fy fy, at lave en platform specifik løsning med java.

Men så vidt jeg husker virker "Runtime.getRuntime().exec("mailto: " + address)" ikke i fx. XP - eller hvad ?

I de programmer hvor jeg har skulle lave noget, der åbnede en browser, har jeg smagt på platform og så benyttet forskellige metoder derefter.

Men der har kravet også været, at det skulle være kompatibelt med min. jre 1.4. Det var før Desktop class'en.
Gravatar #6 - Windcape
31. aug. 2010 21:53
#5

Det skulle også gerne virke i XP. Jeg har også lige dobbeltchecket med Linux, hvor der altså desværre ikke findes lignede handlers.

På Linux (ihvertfald Ubuntu) skal man bruge "xdg-email"

Så der skal nok laves et platformcheck ligegyldig hvad man gør.
Gravatar #7 - Windcape
31. aug. 2010 21:58
#6

Forbedring til #6


xdg-open "mailto:[email protected]"


Overstående virker også, og er måske mere generisk end xdg-email!

Kan også bruges med de parameter fra #3


xdg-open "mailto:[email protected]?subject=my report&body=see attachment"


Husk quotationstegn!
Gravatar #8 - qed
31. aug. 2010 22:07
Windcape (7) skrev:
#6

Forbedring til #6


xdg-open "mailto:[email protected]"



Jeg kan bekræfte, at ovenstående også fungerer i OpenSUSE med KDE, så den burde virke i alle gængse distributioner.
Gravatar #9 - Windcape
31. aug. 2010 22:22
#8

xdg-utils er en abstraktion oven på D-Bus, som så vidt jeg kan forstå også bruges i stort set alle KDE og GNOME distributioner.
Gravatar #10 - tazimn
1. sep. 2010 07:49
Hej I to..

Løsningerne i har nævnt løser jo netop ikke mit problem, sådan som jeg kan se det..

Mit problem er jo at mailto-protokollen ikke understøtter attachments..

Desktop d = Desktop.getDesktop();
URI uri = new URI("mailto:" + address + "?SUBJECT=" + subject);
d.mail(uri);


Overstående er vel den korrekte måde at gøre tingene på, hvis vi ser på platformuafhængighed.

Det virker også glimrende.. der kan bare ikke vedhæftes elementer..

Følgende giver ingen fejl, men vedhæfter heller ikke filen:
Desktop d = Desktop.getDesktop();
URI uri = new URI("mailto:" + address + "?SUBJECT=" + subject+"&ATTACHMENT='C:/file.txt'");
d.mail(uri);


Jeg håber I forstår hvad jeg mener..
Gravatar #11 - markjensen
1. sep. 2010 09:24
Det eneste jeg umiddelbart kan finde er at lave en ny e-mail og gemme den som .eml, og så bagefter åbne den. Ellers siger alle andre at det ikke er muligt.
Gravatar #12 - qed
1. sep. 2010 09:27
Jeg ved godt det måske lyder som en lidt hackish løsning, men jeg har ikke kunne finde andre.

Kunne du ikke konstruere hele e-mailen som en midlertidig fil, hvor du på forhånd encoder din attachment efter gældende standard, og så åbner systemets default mail-program med den midlertidige mail-fil ?

Edit: Hov, der var markjensen lige lidt hurtigere :)
Gravatar #13 - tazimn
1. sep. 2010 09:39
Jow... det har jeg selv tænkt på..

Men er der nogle guides til at lave disse..?
Gravatar #14 - Windcape
1. sep. 2010 09:47
tazimn (10) skrev:
Følgende giver ingen fejl, men vedhæfter heller ikke filen:
Hvilken mail-klient tester du med?

Det *burde* virke!
Gravatar #15 - tazimn
1. sep. 2010 10:00
#14

Outlook 2007 og Live Mail
Gravatar #16 - qed
1. sep. 2010 10:01
Windcape (14) skrev:
Hvilken mail-klient tester du med?

Det virker ikke med Thunderbird 3.0.6.
Gravatar #17 - Windcape
1. sep. 2010 11:51
tazimn (13) skrev:
Jow... det har jeg selv tænkt på..

Men er der nogle guides til at lave disse..?
Protokollen er fint specificeret, og SUN har biblioteket JavaMail som også kan danne dem.

Det er dog et super elendigt API, og rigtig træls at bruge. (Men hey, det er Java, what to expect :p)
Gravatar #18 - Windcape
1. sep. 2010 11:55
Jeg checkede lige op på mailto. I Thunderbird betragtes det som et sikkerhedshul

Så du skal nok ikke forvente at det vil virke i noget som helst program. Hvad er formålet i første omgang anyway?
Gravatar #19 - tazimn
1. sep. 2010 13:43
Windcape (18) skrev:

Hvad er formålet i første omgang anyway?


Applikationen er et faktureringsystem, hvori brugeren skal kunne sende ordrebekræftelser, fakturaer osv, til diverse kunder i kundekartoteket..

Jeg ved at det kan lade sig gøre, da min forhenværende arbejdsplads har et faktureringsystem som kan gøre det..
Gravatar #20 - Windcape
1. sep. 2010 14:02
#19

"som kan gøre det", siger intet om det er noget som er bygget til kun at integerer med Outlook.

Anyway, http://stackoverflow.com/questions/81862/how-do-i-... er nok den eneste løsning på dit problem.
Gravatar #21 - tazimn
1. sep. 2010 14:19
Nej, det er klart.. Og jeg tror faktisk også at det er lavet til at interagere udelukkende med Office pakken..

Men derfor burde det jo stadig kunne lade sig gøre.. dog bliver det kun muligt på Windows platformen, og såfremt brugeren har Outlook eller Live Mail installeret..
Gravatar #22 - Windcape
1. sep. 2010 14:25
#21

Jeps, så ideen med en platformsuafhænging løsning går fløjten. (Og så er en programflade i Java pludselig en dårlig ide, da det giver en meget ringere brugeroplevelse.)

Hvorfor ikke bare automatisk gemme fakturaerne i en mappe i ~/My Documents/ og så lade brugeren automatisk attache den?

Hvis det er fuldautomatisk, så kan du ligeså godt implementere en mini-mailklient med JavaMail.

(Og JDIC er jo sådan set heller ikke cross-platform, medmindre du selv distributere det!)
Gravatar #23 - tazimn
1. sep. 2010 14:42
Windcape (22) skrev:
#21
Hvorfor ikke bare automatisk gemme fakturaerne i en mappe i ~/My Documents/ og så lade brugeren automatisk attache den


Du mener vel manuelt..?

Ellers kunne jeg godt tænke mig at vide hvordan..?

Er det måske muligt at placere filen i udklipsholderen, åbne emailklienten med adresse og emne, og derefter bruge en makro til at trykke Ctrl+V..?

Longshot i know.. :/
Gravatar #24 - Windcape
1. sep. 2010 23:58
Ja, manuelt, sorry ;)
Gravatar #25 - tazimn
2. sep. 2010 08:12
Windcape (24) skrev:
Ja, manuelt, sorry ;)


Bummer.. ;)
Gravatar #26 - arne_v
4. sep. 2010 02:59
#substans

Set fra et praktisk perspektiv så tror jeg at de to mest interessante løsninger er:
1) Drop standard mail klient og send det fra Java via Java Mail API.
2) Skift fra Java til noget der kan scripte Outlook (noget der kan snakke COM)
Gravatar #27 - arne_v
4. sep. 2010 03:04
Windcape (22) skrev:
(Og JDIC er jo sådan set heller ikke cross-platform, medmindre du selv distributere det!)


De her omtalte features er en del af Java SE 6.
Gravatar #28 - tazimn
4. sep. 2010 22:32
arne_v (26) skrev:
1) Drop standard mail klient og send det fra Java via Java Mail API.


Dette ser jeg helst undgået, da det hindre brugeren i at kunne bruge sin egen mailklient til at se hvilke tilbud, ordre eller faktura der er sendt til hvilke kunder..

arne_v (26) skrev:
2) Skift fra Java til noget der kan scripte Outlook (noget der kan snakke COM)


Det skulle vel være muligt at skrive en klasse i C++, og derefter kalde den ved hjælp af JNI..?
Gravatar #29 - arne_v
5. sep. 2010 00:01
tazimn (28) skrev:
Dette ser jeg helst undgået, da det hindre brugeren i at kunne bruge sin egen mailklient til at se hvilke tilbud, ordre eller faktura der er sendt til hvilke kunder..


KISS==CC

Gravatar #30 - arne_v
5. sep. 2010 00:02
tazimn (28) skrev:
Det skulle vel være muligt at skrive en klasse i C++, og derefter kalde den ved hjælp af JNI..?


Ja.

Men har du prøvet at bruge COM i C++?

Gravatar #31 - tazimn
5. sep. 2010 07:57
arne_v (29) skrev:
KISS==CC


Jeg synes bare at brugervenligheden går fløjten, når der skal forklares at de mails, han har sendt ikke ligger i "sendte mails", men i indbakken.. Det er jo på ingen måde logisk..

Men det er helt klart den nemmeste løsning..

arne_v (30) skrev:
Ja.

Men har du prøvet at bruge COM i C++?


Nææ.. det har jeg ikke.. Er det da umuligt..?
http://support.microsoft.com/kb/259298
Gravatar #32 - Windcape
5. sep. 2010 10:34
tazimn (31) skrev:
Er det da umuligt..?
Nej :-)

Jeg synes næsten du skal prøve, så kan du se hvorfor det er så morsomt :p
Gravatar #33 - arne_v
5. sep. 2010 13:32
tazimn (31) skrev:

Nææ.. det har jeg ikke.. Er det da umuligt..?
http://support.microsoft.com/kb/259298


Det er fuldt understøttet.

Og jeg tror ikke engang at du vil skulle skrive særligt meget kode.

Men at lære COM for at forstå hvordan koden virker er en rimelig omfattende opgave.

Developer's Workshop to COM and ATL 3.0 / Andrew Troelsen

giver en god introduktion.

Og jeg mener at den kan findes på nettet som PDF lovligt.

Men det er tungt stof !

Gravatar #34 - tazimn
5. sep. 2010 13:41
arne_v (33) skrev:
tazimn (31) skrev:

Nææ.. det har jeg ikke.. Er det da umuligt..?
http://support.microsoft.com/kb/259298


Det er fuldt understøttet.

Og jeg tror ikke engang at du vil skulle skrive særligt meget kode.

Men at lære COM for at forstå hvordan koden virker er en rimelig omfattende opgave.

Developer's Workshop to COM and ATL 3.0 / Andrew Troelsen

giver en god introduktion.

Og jeg mener at den kan findes på nettet som PDF lovligt.

Men det er tungt stof !


Jamen for helvede da også.. :-)

Hvorfor er ingenting ligetil.. ;-)

Jeg kan trøste mig med at funktionen ligger en del sprints forude, så der er tid nok til at overveje hvordan det skal virke.. Eventuelt går kunden med til at applikationen selv sender de mails, og at han får en kopi i sin indbakke.. Det ville i hvert fald være den nemmeste løsning..
Gravatar #35 - Windcape
5. sep. 2010 14:16
tazimn (34) skrev:
Hvorfor er ingenting ligetil.. ;-)
Du *kunne* jo også bruge C# !

Du ved, det der totalt imba sprog, som kan gøre hvad du ønsker med 2 linjer, max!
Gravatar #36 - tazimn
5. sep. 2010 17:53
Windcape (35) skrev:
Du *kunne* jo også bruge C# !

Du ved, det der totalt imba sprog, som kan gøre hvad du ønsker med 2 linjer, max!


Jeg har desværre ikke erfaring i c#, så jeg synes ikke det er en mulighed i dette projekt..
Gravatar #37 - Windcape
5. sep. 2010 18:09
#36

Men skal det ikke forestille at være dit 5 semesterprojekt du har gang i nu ? (Er det forresten så dit speciale/hovedeopgave, eller skal du i praktik før du er færdig?)

Sproget er en mindre betydning, og i skulle da gerne være blevet undervist i C# (eller et andet sprog end Java, men det er jo typisk C# eller C++).
Gravatar #38 - arne_v
5. sep. 2010 18:19
#(C#)

C# (eller VB.NET hvis man foretrækker) er ikke noget dårlig bud til Outlook integration.

.NET kommer med indbygget support for COM (folk der ikke forstår COM kommer dog ofte i problemer alligevel, men der skal skrives mindre kode og nemmere kode end i unmanaged C++).

Gravatar #39 - Windcape
5. sep. 2010 18:38
COM er heller ikke så smertefuldt i C# 4 som det plejede at være.

Men jeg tror det ville være godt at sætte udviklingen på pause, og finde ud af de relevante platforms- krav og muligheder.

Hvem siger at hele jeres applikation ikke bare kunne være en Thunderbird eller Outlook extension :) Og husk for guds skyld at lave en deployment plan!
Gravatar #40 - tazimn
5. sep. 2010 21:07
Windcape (37) skrev:
#36

Men skal det ikke forestille at være dit 5 semesterprojekt du har gang i nu ? (Er det forresten så dit speciale/hovedeopgave, eller skal du i praktik før du er færdig?)

Sproget er en mindre betydning, og i skulle da gerne være blevet undervist i C# (eller et andet sprog end Java, men det er jo typisk C# eller C++).


Det er praktikopholdet vi har gang i nu.. Men opgaven kan godt udvides til at blive hovedopgave..

Vi er kun blevet undervist i Java og JSP..

#39
Platformskravet er Windows..
Vi laver denne applikation for en lille et-mands virksomhed, og det er derfor ikke de store krav til platforme, da det skal erstatte det excel-ark han bruger til at fakturer med..
Gravatar #41 - Windcape
6. sep. 2010 05:17
tazimn (40) skrev:
Vi er kun blevet undervist i Java og JSP
Ah, og jeres specialiseringsforløb var 100% valgfrit, hvor jeg gætter på ingen så valgte at lære C# (eller et andet sprog)

Ikke særlig fornuftigt! Århus og København har et lidt mere explicit forløb lagt ud.

tazimn (40) skrev:
Vi laver denne applikation for en lille et-mands virksomhed, og det er derfor ikke de store krav til platforme, da det skal erstatte det excel-ark han bruger til at fakturer med..
Ah, den slags opgave....
Gravatar #42 - tazimn
6. sep. 2010 08:05
Windcape (41) skrev:
Ah, og jeres specialiseringsforløb var 100% valgfrit, hvor jeg gætter på ingen så valgte at lære C# (eller et andet sprog)


Held og lykke med at "lære" et andet sprog på 2 måneder, sideløbende med andre projekter.. Det er højst muligt, for 95% af eleverne, at få kendskab til det pågældende sprog.

Desuden var det ikke helt valgfrit.. Der var nogle som spurgte opm det var muligt bare at omkrive en eksisterende applikation, til et andet sprog.. Men det var ikke "udfordrende nok", da det kun var at "lære en anden syntakst"..

Så det var nok 70% valgfrit.

Windcape (41) skrev:
tazimn (40) skrev:
Vi laver denne applikation for en lille et-mands virksomhed, og det er derfor ikke de store krav til platforme, da det skal erstatte det excel-ark han bruger til at fakturer med..
Ah, den slags opgave....


Aner jeg lidt sarkasme..?
Gravatar #43 - Windcape
6. sep. 2010 09:08
tazimn (42) skrev:
Held og lykke med at "lære" et andet sprog på 2 måneder, sideløbende med andre projekter.. Det er højst muligt, for 95% af eleverne, at få kendskab til det pågældende sprog.
Det lykkedes da helt fint for min klasse =) Men vi havde også 5 måneder til det.

tazimn (42) skrev:
Aner jeg lidt sarkasme..?
Meget :)
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login