Forums Register Login
JavaMail not working
I just spent several hours trying everything I can find to send mail from Java and nothing works. I just get "java.lang.NoClassDefFoundError: javax/activation/DataSource". I have the activation.jar and all the JavaMail.jars in my classpath. I tried several code samples from on the web - all different techniques, but ultimately using the JAF and JavaMail - and they all failed with this error when they try to create a MimeMessage object.
Anyone else have this problem?
Tomcat 5
Code (this particular code is straight from oreilly book):
package com.jspservletcookbook;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class EmailBean {
private final static String DEFAULT_CONTENT = "Unknown content";
private final static String DEFAULT_SUBJECT= "Unknown subject";
private static String DEFAULT_SERVER = null;
private static String DEFAULT_TO = null;
private static String DEFAULT_FROM = null;
java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("email.mailDefaults");
DEFAULT_TO = bundle.getString("DEFAULT_TO");
DEFAULT_FROM = bundle.getString("DEFAULT_FROM");
DEFAULT_SERVER = "mail._.com";
DEFAULT_TO = "dimitri@_.com";
DEFAULT_FROM = "dimitri@_.com";
//JavaBean properties
private String smtpHost;
private String to;
private String from;
private String content;
private String subject;
public void sendMessage() throws Exception {
Properties properties = System.getProperties();
//populate the 'Properties' object with the mail
//server address, so that the default 'Session'
//instance can use it.
properties.put("mail.smtp.host", smtpHost);
Session session = Session.getDefaultInstance(properties);
Message mailMsg = new MimeMessage(session);//a new email message
InternetAddress[] addresses = null;
try {

if (to != null) {
//throws 'AddressException' if the 'to' email address
//violates RFC822 syntax
addresses = InternetAddress.parse(to, false);
mailMsg.setRecipients(Message.RecipientType.TO, addresses);
} else {
throw new MessagingException(
"The mail message requires a 'To' address.");
if (from != null) {
mailMsg.setFrom(new InternetAddress(from));
} else {
throw new MessagingException(
"The mail message requires a valid 'From' address.");
if (subject != null)
if (content != null)
//Finally, send the mail message; throws a 'SendFailedException'
//if any of the message's recipients have an invalid address
} catch (Exception exc) {
throw exc;
private void handleMessages(HttpServletRequest request, PrintWriter out) throws IOException, ServletException {
HttpSession httpSession = request.getSession();
String user = (String) httpSession.getAttribute("user");
String password = (String) httpSession.getAttribute("pass");
String popAddr = (String) httpSession.getAttribute("pop");
Store popStore = null;
Folder folder = null;
if (! check(popAddr))
popAddr = EmailBean.DEFAULT_SERVER;
try {
if ((! check(user)) || (! check(password)))
throw new ServletException("A valid username and password is required to check email.");
Properties properties = System.getProperties();
Session session = Session.getDefaultInstance(properties);
popStore = session.getStore("pop3");
popStore.connect(popAddr, user, password);
folder = popStore.getFolder("INBOX");
if (! folder.exists())
throw new ServletException("An 'INBOX' folder does not exist for the user.");
Message[] messages = folder.getMessages();
int msgLen = messages.length;
if (msgLen == 0)
out.println("<h2>The INBOX folder does not yet contain any email messages.</h2>");
for (int i = 0; i < msgLen; i++){
displayMessage(messages[i], out);
out.println("<br /><br />");
} catch (Exception exc) {
out.println("<h2>Sorry, an error occurred while accessing the email messages.</h2>");
} finally {
if (folder != null)
if (popStore != null)
} catch (Exception e) { }
private void displayMessage(Message msg, PrintWriter out) throws MessagingException, IOException {
if (msg != null && msg.getContent() instanceof String){
if (msg.getFrom()[0] instanceof InternetAddress) {
out.println("Message received from: " + ((InternetAddress)msg.getFrom()[0]).getAddress() +"<br />");
out.println("Message received on: " + msg.getReceivedDate() +"<br />");
out.println("Message content type: " + msg.getContentType() +"<br />");
out.println("Message content type: " + (String) msg.getContent());
} else{
out.println("<h2>The received email message was not of a text content type.</h2>");
public void setSmtpHost(String host){
if (check(host)){
this.smtpHost = host;
} else {
this.smtpHost = EmailBean.DEFAULT_SERVER;
public void setTo(String to){
if (check(to)){
this.to = to;
} else {
this.to = EmailBean.DEFAULT_TO;
public void setFrom(String from){
if (check(from)){
this.from = from;
} else {
this.from = EmailBean.DEFAULT_FROM;
public void setContent(String content){
if (check(content)){
this.content = content;
} else {
this.content = EmailBean.DEFAULT_CONTENT;
public void setSubject(String subject){
if (check(subject)){
this.subject = subject;
} else {
this.subject = EmailBean.DEFAULT_SUBJECT;
private boolean check(String value){
if(value == null || value.equals(""))
return false;
return true;
Moving to "Other Java APIs", which is where JavaMail questions belong.
Hello? Anyone here?
Hi Dimitri,
I am getting the same error. Did you ever find a resolution? I just upgraded from Tomcat 4.1.18 to Tomcat 5, and am now getting the error.
Hi Scott and Dimitri
Can you let us know where in classpath you have put those jars?
In Tomcat you can try putting there in the lib folder where other Jars are already there. As I remember last from Tomcat experience you can also modify setclasspath.batch or setclasspath.sh to include the jar file wherever youput.
The problems of the world fade way as you eat a piece of pie. This tiny ad has never known problems:
Why should you try IntelliJ IDEA ?

This thread has been viewed 1347 times.

All times above are in ranch (not your local) time.
The current ranch time is
Aug 19, 2018 19:57:56.