A real email client allows the user considerably more control. Of course, it also
requires more work. In this recipe, I’ll build a simple version of a mail sender, relying
upon the JavaMail standard extension in package javax.mail and javax.mail.
internet (the latter contains classes that are specific to Internet email protocols).
This first example shows the steps of sending mail over SMTP, the standard Internet
mail protocol. The steps are listed in the sidebar.
As usual in Java, you must catch certain exceptions. This API requires that you catch
the MessagingException , which indicates some failure of the transmission. Class
import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
/** sender -- send an email message.
*/
public class Sender {
/** The message recipient. */
protected String message_recip = "spam-magnet@darwinsys.com";
/* What's it all about, Alfie? */
protected String message_subject = "Re: your mail";
/** The message CC recipient. */
protected String message_cc = "nobody@erewhon.com";
/** The message body */
protected String message_body =
"I am unable to attend to your message, as I am busy sunning " +
"myself on the beach in Maui, where it is warm and peaceful. " +
"Perhaps when I return I'll get around to reading your mail. " +
"Or perhaps not.";
/** The JavaMail session object */
protected Session session;
/** The JavaMail message object */
protected Message mesg;
/** Do the work: send the mail to the SMTP server. */
public void doSend() {
// We need to pass info to the mail server as a Properties, since
// JavaMail (wisely) allows room for LOTS of properties...
Properties props = new Properties();
// Your LAN must define the local SMTP server as "mailhost"
// for this simple-minded version to be able to send mail...
props.put("mail.smtp.host", "mailhost");
// Create the Session object
session = Session.getDefaultInstance(props, null);
session.setDebug(true); // Verbose!
try {
// create a message
mesg = new MimeMessage(session);
// From Address - this should come from a Properties...
mesg.setFrom(new InternetAddress("nobody@host.domain"));
// TO Address
InternetAddress toAddress = new InternetAddress(message_recip);
mesg.addRecipient(Message.RecipientType.TO, toAddress);
// CC Address
InternetAddress ccAddress = new InternetAddress(message_cc);
mesg.addRecipient(Message.RecipientType.CC, ccAddress);
// The Subject
mesg.setSubject(message_subject);
// Now the message body.
mesg.setText(message_body);
// TODO I18N: use setText(msgText.getText(), charset)
// Finally, send the message!
Transport.send(mesg);
} catch (MessagingException ex) {
while ((ex = (MessagingException)ex.getNextException()) != null) {
ex.printStackTrace();
}
}
}
/** Simple test case driver */
public static void main(String[] av) {
Sender sm = new Sender();
sm.doSend();
}
}
Of course, a program that can only send one message to one address is not useful in
the long run. The second version (not shown here, but in the source tree accompany-
ing this book) allows the To, From, Mailhost, and Subject to come from the com-
mand line and reads the mail text either from a file or from the standard input.
requires more work. In this recipe, I’ll build a simple version of a mail sender, relying
upon the JavaMail standard extension in package javax.mail and javax.mail.
internet (the latter contains classes that are specific to Internet email protocols).
This first example shows the steps of sending mail over SMTP, the standard Internet
mail protocol. The steps are listed in the sidebar.
As usual in Java, you must catch certain exceptions. This API requires that you catch
the MessagingException , which indicates some failure of the transmission. Class
import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
/** sender -- send an email message.
*/
public class Sender {
/** The message recipient. */
protected String message_recip = "spam-magnet@darwinsys.com";
/* What's it all about, Alfie? */
protected String message_subject = "Re: your mail";
/** The message CC recipient. */
protected String message_cc = "nobody@erewhon.com";
/** The message body */
protected String message_body =
"I am unable to attend to your message, as I am busy sunning " +
"myself on the beach in Maui, where it is warm and peaceful. " +
"Perhaps when I return I'll get around to reading your mail. " +
"Or perhaps not.";
/** The JavaMail session object */
protected Session session;
/** The JavaMail message object */
protected Message mesg;
/** Do the work: send the mail to the SMTP server. */
public void doSend() {
// We need to pass info to the mail server as a Properties, since
// JavaMail (wisely) allows room for LOTS of properties...
Properties props = new Properties();
// Your LAN must define the local SMTP server as "mailhost"
// for this simple-minded version to be able to send mail...
props.put("mail.smtp.host", "mailhost");
// Create the Session object
session = Session.getDefaultInstance(props, null);
session.setDebug(true); // Verbose!
try {
// create a message
mesg = new MimeMessage(session);
// From Address - this should come from a Properties...
mesg.setFrom(new InternetAddress("nobody@host.domain"));
// TO Address
InternetAddress toAddress = new InternetAddress(message_recip);
mesg.addRecipient(Message.RecipientType.TO, toAddress);
// CC Address
InternetAddress ccAddress = new InternetAddress(message_cc);
mesg.addRecipient(Message.RecipientType.CC, ccAddress);
// The Subject
mesg.setSubject(message_subject);
// Now the message body.
mesg.setText(message_body);
// TODO I18N: use setText(msgText.getText(), charset)
// Finally, send the message!
Transport.send(mesg);
} catch (MessagingException ex) {
while ((ex = (MessagingException)ex.getNextException()) != null) {
ex.printStackTrace();
}
}
}
/** Simple test case driver */
public static void main(String[] av) {
Sender sm = new Sender();
sm.doSend();
}
}
Of course, a program that can only send one message to one address is not useful in
the long run. The second version (not shown here, but in the source tree accompany-
ing this book) allows the To, From, Mailhost, and Subject to come from the com-
mand line and reads the mail text either from a file or from the standard input.
No comments:
Post a Comment