How to emulate "mailto:" in Java?

Can anyone send me a code snippet showing how to call up the mail program on the client machine?

What I need is code that will do the same thing as the HTML statement:
<a href="">

This is for a stand-alone Java application. Hopefully, the same code can be used on a server in a client/server environment.
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

You could put this HTML into a JLabel.
I think the best you could do is pop up a Java window for sending a mail. The functionality you see normally requires OS-level integration.
snazzyragsAuthor Commented:

This is what I did:

JButton emailButton;
emailButton = new JButton("<HTML><BODY><a href=\"\">Send Email</a></BODY></HTML>");

The button displayed as a hyperlink, as expected. However, when the button was pressed, nothing happened. Is there more?

Thanks for your quick response.
OWASP: Forgery and Phishing

Learn the techniques to avoid forgery and phishing attacks and the types of attacks an application or network may face.

>>Is there more?

There certainly is ;-) See my comment above. Obviously, you can make the button open a program, but not necessarily with the address in the text field AFAIK.

snazzyragsAuthor Commented:

To use your solution, I need to know the email program on the client's machine. Now I'm really getting over my head here, but I'm sure there's a method for doing this - perhaps through the client's registry?

Secondly, I should have mentioned this earlier (sorry), but my program dynamically builds the recipient list, so I need to pass this list (String class) to the email program, as well. The subject, text and attachments are the responsibility of the user, once they are presented with their email application.

I haven't discarded your original solution, CEHJ, just exploring simpler solutions first.
You're going to need some low-level integration between Java and OS/mail program API. This, if you're interested in platform independence, would also have to be done for each OS.
My comment referred to a JLabel, not a JButton.  I don't think what you've done would have the same effect, the button callbacks would probably take priority over the HTML content.  Try changing the JButton to a JLabel:

JLable emailLabel;
emailLabel = new JButton("<HTML><BODY><a href=\"\">Send Email</a></BODY></HTML>");

However, as CEHJ said, this will then rely on the OS to manage the opening of the browser.
By default, even in a JEditorPane, absolutely nothing happens when you click on a hyperlink in Java. You have to make something happen. The question is what?
snazzyragsAuthor Commented:
OK guys, have at it and let me know the answer when the dust settles!

BTW, a couple years ago I had a similar requirement except it was on the server side. So I just used the exec() method of Runtime and called a Perl program with the required parameters and let it send the email via sendmail. That was done quite easily. This new requirement seems much more difficult because I'm trying to use a Windows email system on the client platform - MS-Outlook Express, in particular.

Maybe I should investigate some Perl possibilities...
snazzyragsAuthor Commented:
Eureka! I received the solution on the MS-Office/Outlook expert's list. We were close, but not close enough.

FYI, here's the solution:

Runtime.getRuntime().exec("perl ...<command line parameters>...");

This is the same program I used a couple years ago with the following very important modification:

system("start mailto:<recipient list>");

For some reason, this doesn't work (yet!). I may investigate later - it would be nice to not have to call the perl program:

Runtime.getRuntime().exec("start mailto:<recipient list>");     // Doesn't work! (why?!?!)


Works for me, but you'll need > Win 98
snazzyragsAuthor Commented:
I'm running W2K - Pro. I get the following IOException:

"CreateProcess: start error=2"

Is this the same old DOS IO error 2 from days of yore (NOENT)? If so, what's missing? I'm not familiar with 'mailto:' - whatever it is. I didn't know it had any relevence outside HTML.

Runtime.getRuntime().exec("cmd.exe /C start");    

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
snazzyragsAuthor Commented:

Abba - Dabba - Doooo! It works!!

Although I've already paid the points for the previous solution, I'll give them to you, as well, for this much more elegant solution.

Do you mind explaining what is going on here? I know cmd.exe opens a new environment (shell in Unix terms) and I've looked at the DOS help on 'start', although that explains how to use it with no background info on what it is doing or why it's required. Most importantly, what the heck is 'mailto:'? It's not an internal or external DOS command and it doesn't seem to be an executable file.
Shall come back on that later - got to go out now ;-)
Or - to give you a quick one:

1. start 'knows' how to start a prog, probably based on registry settings
2. mailto: is a url (in RFCs no doubt)
>>2. mailto: is a url (in RFCs no doubt)

or, more precisely, the protocol part of a url
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today

From novice to tech pro — start learning today.