Wow, really dead in the water on this. Anybody out there using
javamail reliably on a web server? I've used it successfully
clientside. Have yet to see it send a message serverside. Seems like
there must be some kind of permissions issues on web servers that
restrict javamail. Is this just something people don't want happening
on web servers?
Is there some way to debug this situation? I keep reading about
sess.setDebug(true) but I'm unable to get the output back to the
browser to view. No exceptions are reported to me. Message doesn't
send and I get what appears to be a proper response back to my browser.
Hmmm... Nobody wants to come to the party... Guess I'll keep my own
thread going in case anyone else out there ever has the problem...
Here are the vitals on my local sandbox environment:
Servlet Container Apache tomcat-5.0.24
Java 1.4.2._04-b05
JavaMail 1.4
JavaBeans(tm)Activation Framework 1.1
The following source creates an email message and attachment and sends
via javamail. All works well in my local sandbox environment. Mail
message with attachment arrive without a hitch.
I've been working with my host on why deploying this produces no error
messages, but no mail message either. They are perplexed. They have
linux servers running Resin. Does anyone out there see any
incompatibility here?
<!--<?xml version="1.0"?>-->
<%@ page import="java.util.*" %>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.io.*" %>
<%@ page import="org.jdom.*" %>
<%@ page import="org.jdom.output.*" %>
<%@ page import="java.text.*" %>
<%@ page import="java.util.Properties" %>
<%@ page import="javax.mail.*" %>
<%@ page import="javax.mail.internet.*" %>
<%@ page import="javax.activation.*" %>
<!--<response>-->
<%
//Set up some error logging
File file = new File("./error.txt");
FileWriter f = new FileWriter(file);
// Wrap the filewriter with a bufferedwriter (creates an output
stream)
BufferedWriter b = new BufferedWriter (f);
//Wrap the buffered writer in a printwriter
PrintWriter pw = new PrintWriter (b,false);
//Build an xml document to attach to the email
Document attachmentDoc = new Document(new Element("NJPA"));
Element attachmentRoot = attachmentDoc.getRootElement();
// build a string from an XML document
org.jdom.output.Format attachmentFmt =
org.jdom.output.Format.getCompactFormat();
attachmentFmt.setOmitDeclaration(false);
XMLOutputter attachmentOutputter = new
XMLOutputter(attachmentFmt);
String attachXml =
attachmentOutputter.outputString(attachmentDoc);
// We now have an xml string to attach. Let's get a javamail
message together
// to which we can attach this xml. Got to do some server
properties stuff
// first before we get to the message contents.
String sServerName = "xxxxxxxxxxxxxxxxx";//Omitted here
String sUserName = "xxxxxxx";
String sPassword = "xxxxxxx";
Properties props = new Properties();
props = System.getProperties();
// fill props with any information
props.put("mail.host", sServerName);
props.put("mail.smtp.port", "25");
props.put("mail.smtp.auth", "true");
Session sess = Session.getDefaultInstance(props, null);
sess.setDebug(true);
MimeMessage message = new MimeMessage(sess);
Transport transport = null;
try {
String sContent = "Test message";
// Set the email message content to our name and address data
above
message.setContent(sContent, "text/plain");
// Hook up the message address and subject settings
String sLNameFirst = "Dude";
String sFNameLast = "Some";
InternetAddress fromAddress = new
InternetAddress("xxxxxxxx.com", sLNameFirst);
InternetAddress toAddress = new InternetAddress("xxxxxx.com",
sLastName);
InternetAddress ainternetaddress[] = { toAddress };
message.setFrom(fromAddress);
message.addRecipient(Message.RecipientType.TO, toAddress);
message.setSubject("New message attached for " + sFNameLast);
// Make a multipart message (part two being attachment) and
send
// Create part one - the message
BodyPart messageBodyPart = new MimeBodyPart();
// Fill the message with our content string
messageBodyPart.setText(sContent);
// Add the message part to a multipart
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
// Create part two - the attachment
String sXMLAttachFileName = "data_" + sFNameLast;
messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(attachXml);
messageBodyPart.setFileName(sXMLAttachFileName);
//DataSource source = new FileDataSource(filename);
//messageBodyPart.setDataHandler(new DataHandler(source));
//messageBodyPart.setFileName(filename);
// Add attachment to the multipart
multipart.addBodyPart(messageBodyPart);
// Put parts in messa
message.setContent(multipart);
// Send the message
//System.out.println("Transport: " + transport);
//System.out.println(sServerName + " " + sUserName + " " +
sPassword);
transport = sess.getTransport("smtp");
transport.connect(sServerName, sUserName, sPassword);
message.saveChanges();
transport.sendMessage(message, message.getAllRecipients());
//Transport.send(message);
}
catch (Exception ex){
StringWriter sw = new StringWriter();
ex.printStackTrace (new PrintWriter(sw));
pw.println(sw.toString());
}
finally
{
try
{
transport.close();
}
catch (Exception ex){
StringWriter sw = new StringWriter();
ex.printStackTrace (new PrintWriter(sw));
pw.println(sw.toString());
}
finally { }
}
//Send quote output back to the browser
Document doc = new Document(new Element("eionjmcquote"));
Element root = doc.getRootElement();
// build a string from an XML document
org.jdom.output.Format fmt =
org.jdom.output.Format.getCompactFormat();
fmt.setOmitDeclaration(true);
XMLOutputter outputter = new XMLOutputter(fmt);
String xml = outputter.outputString(doc);
out.print(xml);
pw.print(xml);
%>
<!--</response>-->
> Wow, really dead in the water on this. Anybody out there using
> javamail reliably on a web server? I've used it successfully
[quoted text clipped - 115 lines]
> > pw.println(sw.toString());
> > }
Martin Gregorie - 05 Dec 2006 12:47 GMT
> Hmmm... Nobody wants to come to the party... Guess I'll keep my own
> thread going in case anyone else out there ever has the problem...
It is difficult to know whats going wrong because your code never
outputs the message text from an exception.
As you seem to have the SMTP server address and passwords, etc hardcoded
in the servlet, how do you know that they are valid in the deployment
environment?
Try running it in your test harness on the target machine.

Signature
martin@ | Martin Gregorie
gregorie. | Essex, UK
org |
rexdtripod@hotmail.com - 05 Dec 2006 18:03 GMT
> > Hmmm... Nobody wants to come to the party... Guess I'll keep my own
> > thread going in case anyone else out there ever has the problem...
[quoted text clipped - 5 lines]
> in the servlet, how do you know that they are valid in the deployment
> environment?
Good question. I've taken the word of the service provider
(lunarpages) to date. They have indicated to me that my authentication
information is indeed what they have in their records. I'm not sure
how I would determine otherwise. Is there a way I could determine
this?
Would seem odd to me to have authentication information that is valid
for me from some locations, but not in the actual deployment
environment. Is that the sort of thing a service provider would do?
The host continues to have me tinker with server authentication info in
my script. Had me try the name of the machine explicitly with my
username and password. That worked from my sandbox, but not once
deployed. Had me try "localhost" with authentication disabled. That
didn't work. Had me try the machine name with authentication disabled.
That worked from my location, but once again, not from the deployment
environment.
Does this sound like some sort of additional security measure or
something?
> Try running it in your test harness on the target machine.
Not sure what you mean by this. I'm guessing what you mean by "test
harness" is my local sandbox environment?
Servlet Container Apache tomcat-5.0.24
Java 1.4.2._04-b05
JavaMail 1.4
JavaBeans(tm)Activation Framework 1.1
I'm in a shared server environment with my host. I'm not at liberty to
modify their machines. I'm under the impression that the only thing I
can do is deploy to what they have and hope that they have been
diligent in setting up their deployment framework. Am I missing
something here?
> --
> martin@ | Martin Gregorie
> gregorie. | Essex, UK
> org |
Martin Gregorie - 06 Dec 2006 19:26 GMT
> Not sure what you mean by this. I'm guessing what you mean by "test
> harness" is my local sandbox environment?
Correct.
Have you tried turning debugging on with your code? That should point
pretty unambiguously to where its going wrong.

Signature
martin@ | Martin Gregorie
gregorie. | Essex, UK
org |
Simon Brooke - 05 Dec 2006 20:18 GMT
> Hmmm... Nobody wants to come to the party... Guess I'll keep my own
> thread going in case anyone else out there ever has the problem...
[quoted text clipped - 14 lines]
> linux servers running Resin. Does anyone out there see any
> incompatibility here?
I have servlets sending mail in a Linux environment, utterly reliably; the
oldest Servlet application I have which does this is has now been running
for six years.
So there's nothing in principle which stops Servlets in a Linux environment
My code isn't like yours - it's fundamentally plain old-fashioned
Servlets - but the stack I'm using is similar (I'm using IBM Java 5 with
Tomcat 4, but the JavaMail and JAF versions are the same as yours).
If you continue to have problems, feel free to get in touch.

Signature
simon@jasmine.org.uk (Simon Brooke) http://www.jasmine.org.uk/~simon/
;; my other religion is Emacs
Nigel Wade - 06 Dec 2006 11:38 GMT
> Hmmm... Nobody wants to come to the party... Guess I'll keep my own
> thread going in case anyone else out there ever has the problem...
[quoted text clipped - 36 lines]
> //Wrap the buffered writer in a printwriter
> PrintWriter pw = new PrintWriter (b,false);
Have you verified that this operation works on your deployment server? Where
is ./error.txt created, does the servlet have permission to create it? If this
fails you won't know whether there were any exceptions as your exception
reporting requires this step to work. This is wrapped around a BufferedWriter,
and I don't see any flush after writing to it, maybe the error is still in the
buffer? How do you view the contents of this file?
I would test this by generating some trace output to pw and verifying that I
could read it.
It is possible that your ISP is blocking access to their SMTP server from your
deployment server, but they ought to know their own acceptance rules...
Does your deployment server allow outgoing connections on port 25, it may be
firewalled?

Signature
Nigel Wade, System Administrator, Space Plasma Physics Group,
University of Leicester, Leicester, LE1 7RH, UK
E-mail : nmw@ion.le.ac.uk
Phone : +44 (0)116 2523548, Fax : +44 (0)116 2523555