Question:
How do I use the .net classes to log on to a mailserver and request, say, the number of new mailmessages? Or send a message?Just POP3/SMTP.
An example would be helpful.
Answer:
Java provides classes for sending e-mail via the SMTP protocol,but doesn’t have any facilities for reading e-mail from a mailserver. To create a mail reader, you’d have to implement theappropriate protocol (such as POP or IMAP) yourself using theSocket class. While this is do-able, it may be more work thanyou think if you insist on implementing the complete protocol.Check to see if there are public domain implementationsof these protocols available on the Net before trying to codeit yourself.
Sending e-mail, on the other hand, is simple. Among Java’snetworking classes is an SMTP client, calledsun.net.smtp.SmtpClient
,that allows you to do it.
Here’s a synopsis of sun.net.smtp.SmtpClient
as of JDK1.0.2:
Constructors:
SmtpClient(String) New SMTP client connected to host host. SmtpClient() Create an uninitialized SMTP client.Methods:
closeServer() issue the QUIT command to the server and close the connection. from(String) set the From line of the email startMessage() start sending the body of the email to(String) set the To line of the email messageIn fact, Sun’s HotJava browser uses this package to implement the
sendto
operation for sending mail from the browser. In general,the sun.* packages provide the underlying implementationfor the public Java APIs, and are themselves available to Javaprogrammers. However, because they are not part of the publishedJava API, they may change from release to release.The following applet demonstrates how to use this package to send e-mail.It creates a couple of TextFields for To: and Subject: anda TextArea for the message body. When the user presses the Send button,it will open an SMTP connection to the server and send the e-mail usingthe SMTP protocol. Note that because the applet is making connectionsback to its codebase, it doesn’t get security exceptions.
importjava.awt.*;import java.applet.*;import java.net.*;import java.io.*;import sun.net.smtp.*;public class SendMail extends Applet { TextField to, subject; TextArea text; public void init() { setLayout(new BorderLayout()); Panel p1 = new Panel(); p1.setLayout(new BorderLayout()); p1.add(“West”, new Label(“To: “)); to = new TextField(); p1.add(“Center”, to); Panel p2 = new Panel(); p2.setLayout(new BorderLayout()); p2.add(“West”, new Label(“Subject: “)); subject = new TextField(); p2.add(“Center”, subject); Panel headers = new Panel(); headers.setLayout(new BorderLayout()); headers.add(“North”, p1); headers.add(“South”, p2); add(“North”, headers); text = new TextArea(10, 30); add(“Center”, text); Button send = new Button(“Send”); add(“South”, send); } public boolean handleEvent(Event e) { if (e.target instanceof Button && e.id == Event.ACTION_EVENT) { try { SmtpClient msg = new SmtpClient( getCodeBase().getHost()); // Set the To: field msg.to(to.getText()); // Set the From: field to some address msg.from(“[email protected]”); // Write the body of the message // according to RFC 733 PrintStream out = msg.startMessage(); out.println(“Subject: ” + subject.getText()); out.println(text.getText()); msg.closeServer(); } catch (Exception err) { System.out.println(“Send Failed.”); err.printStackTrace(); } return true; } return false; }}