classpathx-javamail
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Classpathx-javamail] sending emails with authentication


From: Chris Burdess
Subject: Re: [Classpathx-javamail] sending emails with authentication
Date: Mon, 20 Sep 2010 08:40:24 +0100

Daniel Rindt wrote:
> Am Donnerstag, den 16.09.2010, 08:27 +0100 schrieb Chris Burdess:
>> The PrintStream(File) constructor specifically says that it won't
>> flush the underlying stream. You will need to call flush manually on
>> that PrintStream, or use the OutputStream constructor.
> Yes. But this is also not working:
> === 8< ===
>       Session session = Session.getInstance(props, auth);
>       session.setDebug(true);
>       PrintStream ps = null;
>       try {
>           ps = new PrintStream("/tmp/classpathx-mail.out");
>           session.setDebugOut(ps);
>       } catch (FileNotFoundException e) {
>           // TODO Auto-generated catch block
>           e.printStackTrace();
>       }
>       try {
>           Message msg = new MimeMessage(session);
>           msg.setFrom(new InternetAddress(senderAddress));
>           msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(
>                   recipientsAddress, false));
>           msg.setSubject(subject);
>           msg.setText(text);
>           msg.saveChanges();
>           Transport.send(msg);
>       } catch (Exception e) {
>           e.printStackTrace();
>       }
>       ps.flush();
>       ps.close();
> === 8< ===
> I got nothing in the file, its just zero bytes. Thanks for further help.


I amended your code and got it to work:

        Session session = Session.getInstance(props, auth);
        session.setDebug(true);
        OutputStream fos = null;
        try {
            fos = new FileOutputStream("classpathx-mail.out");
            PrintStream ps = new PrintStream(fos);
            session.setDebugOut(ps);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            Message msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(senderAddress));
            msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(
                    recipientsAddress, false));
            msg.setSubject(subject);
            msg.setText(text);
            msg.saveChanges();
            Transport.send(msg);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //fos.close();

Note that if you close the FileOutputStream at the end you won't get any 
output. This is down to some weirdness in exactly why/how/when PrintStreams get 
flushed, which I'm afraid I don't understand myself, but it's not a problem in 
the logging as far as I can see (which as I said simply uses the 
java.util.logging mechanism. If you find any way to shed any light on what's 
happening there please share it.

Regards
-- 
Chris Burdess





reply via email to

[Prev in Thread] Current Thread [Next in Thread]