The key to avoiding the use of a disk file is to use a
"ByteArrayDataSource" in the DataHandler for the attachment. A class
like this wasn't provided out of the box, so you have to provide it.
I'll include the one I have. It isn't optimized, in case that's an
issue for you.
------------------
/**
* This class is used along with the DataHandler to attach a byte
array as
* an email attachment.
*/
public static class ByteArrayDataSource implements DataSource
{
private InputStream inputStream;
private byte[] data;
private boolean dataLoaded = false;
private String contentType;
private String name;
public ByteArrayDataSource(InputStream inputStream,
String contentType,
String name)
{
setContentType(contentType);
setName(name);
setInputStream(inputStream);
}
public ByteArrayDataSource(byte[] data,
String contentType,
String name)
{
setContentType(contentType);
setName(name);
setData(data);
}
public ByteArrayDataSource(String data,
String contentType,
String name)
{
setContentType(contentType);
setName(name);
setData(data.getBytes());
}
void loadData()
throws IOException
{
int available = 0;
while ((available = inputStream.available()) > 0)
{
byte[] newdata = new byte[available];
if (data == null)
data = newdata;
else
{
byte[] olddata = data;
data = new byte[olddata.length + newdata.length];
System.arraycopy(olddata, 0, data, 0,
olddata.length);
System.arraycopy(newdata, 0, data, olddata.length,
newdata.length);
}
}
data = new byte[inputStream.available()];
int readBytes = inputStream.read(data);
setData(data);
}
public void setInputStream(InputStream inputStream)
{ this.inputStream = inputStream; }
public void setContentType(String contentType)
{ this.contentType = contentType; }
public void setName(String name)
{ this.name = name; }
public void setData(byte[] data)
{
this.data = data;
dataLoaded = true;
}
public InputStream getInputStream()
throws IOException
{
if (!dataLoaded)
loadData();
return (new ByteArrayInputStream(data));
}
public OutputStream getOutputStream()
throws IOException
{
throw new
UnsupportedOperationException("This is a read-only
DataSource");
}
public String getContentType() { return (contentType); }
public String getName() { return (name); }
}
------------------
> -----Original Message-----
> From: CRANFORD, CHRIS [mailto:[EMAIL PROTECTED]
> Sent: Thursday, September 02, 2004 5:25 AM
> To: 'Struts Users Mailing List'
> Subject: RE: PDF & Email
>
>
> What I'm trying to get at is a way to generate the PDF in
> memory and attachment it that way from memory without
> actually having to use a physical disk file. Basically we
> have a form that gathers information about a request. That
> form in turn is converted to the message's body content but
> we also want to render a PDF attachment that is an approval
> form that can be printed by the recipient, signed and then
> filled. I'd like to do all this without any physical disk
> I/O files. Possible?
>
> -----Original Message-----
> From: Matthias Wessendorf [mailto:[EMAIL PROTECTED]
> Sent: Thursday, September 02, 2004 8:25 AM
> To: 'Struts Users Mailing List'
> Subject: RE: PDF & Email
>
>
> or like this:
>
>
>
> // Create the attachment
> EmailAttachment attachment = new EmailAttachment();
> attachment.setPath("mypictures/john.jpg");
> attachment.setDisposition(EmailAttachment.ATTACHMENT);
> attachment.setDescription("Picture of John");
> attachment.setName("John");
>
> // Create the email message
> MultiPartEmail email = new MultiPartEmail();
> email.setHostName("mail.myserver.com");
> email.addTo("[EMAIL PROTECTED]", "John Doe");
> email.setFrom("[EMAIL PROTECTED]", "Me"); email.setSubject("The
> picture"); email.setMsg("Here is the picture you wanted");
>
> // add the attachment
> email.attach(attachment);
>
> // send the email
> email.send();
>
>
>
>
>
>
>
>
> > -----Original Message-----
> > From: Matthias Wessendorf [mailto:[EMAIL PROTECTED]
> > Sent: Thursday, September 02, 2004 2:21 PM
> > To: 'Struts Users Mailing List'
> > Subject: RE: PDF & Email
> >
> >
> > you only use setter-methods
> > for clazz Email / simpleEmail
> > and so one...
> >
> > see:
> >
> > SimpleEmail email = new SimpleEmail();
> > email.setHostName("mail.myserver.com");
> > email.addTo("[EMAIL PROTECTED]", "John Doe");
> > email.setFrom("[EMAIL PROTECTED]", "Me"); email.setSubject("Test
> > message"); email.setMsg("This is a simple test of commons-email");
> > email.send();
> >
> >
> > no painfull
> >
> > Storage and so on ... :-)
> >
> > it is easy... more than easy
> >
> >
> > Regards,
> > Matthias
> >
> > > -----Original Message-----
> > > From: HG [mailto:[EMAIL PROTECTED]
> > > Sent: Thursday, September 02, 2004 2:26 PM
> > > To: Struts Users Mailing List
> > > Subject: Re: PDF & Email
> > >
> > >
> > > Hi Chris
> > >
> > > Can't recall from my memroy how to do it, and I don't
> have access to
> > > the source from my current location, sorry.
> > >
> > > No one says, you should use JavaMail as is.
> > > The mail library referred to by Matthias seems to be
> great...and as
> > > far as I can see it uses the Java Mail API also....but greatly
> > > simplifies the act of doing E-mails...The Java Mail API
> can be very
> > > cumbersome....
> > >
> > > HTH
> > >
> > > Henrik
> > >
> > > ----- Original Message -----
> > > From: "CRANFORD, CHRIS" <[EMAIL PROTECTED]>
> > > To: "'Struts Users Mailing List'" <[EMAIL PROTECTED]>
> > > Sent: Thursday, September 02, 2004 2:09 PM
> > > Subject: RE: PDF & Email
> > >
> > >
> > > > Have any code snippets you could share on how to pass the
> > generated
> > > > PDF to javamail as an attachment. That would greatly
> expedite my
> > > > coding
> > > efforts...
> > > >
> > > >
> > > > TIA
> > > > Chris
> > > >
> > > > -----Original Message-----
> > > > From: HG [mailto:[EMAIL PROTECTED]
> > > > Sent: Thursday, September 02, 2004 8:14 AM
> > > > To: Struts Users Mailing List
> > > > Subject: Re: PDF & Email
> > > >
> > > >
> > > > Hi Chris
> > > >
> > > > I used iText (http://www.lowagie.com/iText/) in the past to
> > > generate
> > > > the
> > > PDF
> > > > and then JavaMail API to send it as an attachment. Works great..
> > > >
> > > > Regards
> > > >
> > > > Henrik
> > > >
> > > >
> > > > ----- Original Message -----
> > > > From: "CRANFORD, CHRIS" <[EMAIL PROTECTED]>
> > > > To: <[EMAIL PROTECTED]>
> > > > Sent: Thursday, September 02, 2004 1:59 PM
> > > > Subject: PDF & Email
> > > >
> > > >
> > > > > I need to generate an email along with a PDF within a
> > java struts
> > > > > action
> > > > and
> > > > > send that email with the PDF attachment using java mail.
> > > Can anyone
> > > > > recommend a great PDF package that I can do this and
> > > render the PDF
> > > > > as an email attachment in realtime?
> > > > >
> > > > > _______________________________________________________
> > > > > Chris Cranford
> > > > > Programmer/Developer
> > > > > SETECH Inc. & Companies
> > > > > 6302 Fairview Rd, Suite 201
> > > > > Charlotte, NC 28210
> > > > > Phone: (704) 362-9423, Fax: (704) 362-9409, Mobile:
> > (704) 650-1042
> > > > > Email: [EMAIL PROTECTED]
> > > > >
> > > > >
> > > >
> > > >
> > > >
> > >
> >
> ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > >
> > > >
> > > >
> > >
> >
> ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > >
> > >
> > >
> > >
> >
> ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> >
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]