Solved

Viewing .gif, .lwp, .zip, .123 using javamail

Posted on 2004-08-24
17
550 Views
Last Modified: 2013-11-24
I am sending mail via javamail, but when I try to save certain files to my system and view them the files are corrupt.  I am not able to access .gif, .lwp, .123, .zip, or .exe.  I am setting the content-type based on the file extension.  Any ideas?

int i = attachmentfile.lastIndexOf(".");
String s = attachmentfile.substring(i+1);
s = s.trim();
String type = null;
      
if(s.equalsIgnoreCase("zip")){
type="application/x-bolero-doc";
}
else if(s.equalsIgnoreCase("doc")||(s.equalsIgnoreCase("lwp"))){
MimetypesFileTypeMap map = new MimetypesFileTypeMap();
map.addMimeTypes("application/msword");
type="application/msword";
mbp2.setHeader("Content-Type", "application/msword");
}
else if(s.equalsIgnoreCase("txt")||(s.equalsIgnoreCase("text"))){
type="text/plain";
}
else if(s.equalsIgnoreCase("htm")||s.equalsIgnoreCase("html")){
type="text/html";
}
else if(s.equalsIgnoreCase("xls")){
type="application/excel";
}
else if(s.equalsIgnoreCase("pdf")){
MimetypesFileTypeMap map = new MimetypesFileTypeMap();
map.addMimeTypes("application/pdf");
type="application/pdf";
mbp2.setHeader("Content-Type", "application/pdf");
}
else if(s.equalsIgnoreCase("gif")){
type="image/gif";
}
else if(s.equalsIgnoreCase("jpeg")||(s.equalsIgnoreCase("jpg")||(s.equalsIgnoreCase("jpe")))){
type="image/jpeg";
}
else if(s.equalsIgnoreCase("mpeg")||(s.equalsIgnoreCase("mpg"))){
type="audio/x-mpeg";
}
else if(s.equalsIgnoreCase("wav")){
type="audio/x-wav";
}
else {
type="application/octet-stream";
}
                              
0
Comment
Question by:rws111
  • 8
  • 6
  • 3
17 Comments
 
LVL 12

Expert Comment

by:Giant2
ID: 11881827
If you use for all:
type="application/octet-stream";
are there any problems?

Giant.
0
 

Author Comment

by:rws111
ID: 11882126
Yes, I began with setting the type for everything equal to "application/octet-stream".  Then changed it to set type based on file extension, but no progress.....
0
 
LVL 12

Expert Comment

by:Giant2
ID: 11882196
mmmhm.

and trying to use
content="text/html
even for gif (for example).
0
 
LVL 12

Expert Comment

by:Giant2
ID: 11882218
Do you have seen here?
http://www.faqs.org/rfcs/rfc1341.html
0
 
LVL 12

Expert Comment

by:Giant2
ID: 11882255
I hope you set the MimeType with the type selected after all the if else else...else.

Isn't it?
0
 

Author Comment

by:rws111
ID: 11882407
this is the remainder of the code where attachmentBody is the bytes for the file contents - don't believe i'm setting the MimeType - where/how do i do that?
ByteArrayDataSource bads =
new ByteArrayDataSource(
attachmentBody,
type
);
mbp2.setDataHandler(new DataHandler(bads));
int idx = attachmentfile.lastIndexOf("\\"); //TODO both slashes
mbp2.setFileName(attachmentfile.substring(idx));
0
 
LVL 12

Accepted Solution

by:
Giant2 earned 250 total points
ID: 11882661
attachmentBody could be iso-8859-1, UTF-8, or other
then you could set even:
mbp2.setHeader(...)
0
 

Author Comment

by:rws111
ID: 11884503
setting the header did not help ....
mbp2.setHeader("Content-Transfer-Encoding", "base64" );
mbp2.setHeader("Content-Transfer-Encoding", "UTF-8" );
0
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 
LVL 92

Assisted Solution

by:objects
objects earned 250 total points
ID: 11887177
are you sure its not related to the actual attachment contents you are sending?
0
 

Author Comment

by:rws111
ID: 11887211
actually i am using a ByteArrayDataSource and in my InputStream method i had a statement to remove the final CR/LF - well that worked for some, but corrupted others - after commenting out that statement it all worked fine.  i also set the default content-type to octet-stream. thanks alot for the help!

public InputStream getInputStream() throws IOException {
if (data == null) throw new IOException("no data");
return new ByteArrayInputStream(data);
//return new ByteArrayInputStream(data,0,data.length - 2); //remove the final CR/LF
}
0
 

Author Comment

by:rws111
ID: 11887216
requesting close of this question
0
 
LVL 92

Expert Comment

by:objects
ID: 11887255
> requesting close of this question

why?
0
 
LVL 12

Expert Comment

by:Giant2
ID: 11889487
> requesting close of this question

So do you solved all?
0
 

Author Comment

by:rws111
ID: 11905421
yes it has been resolved, the solution is noted in my comment on 08/24/2004 02:34PM PDT
0
 
LVL 92

Expert Comment

by:objects
ID: 11907537
and didn't I suggest above to check the sending of the attachment :)
0
 
LVL 12

Expert Comment

by:Giant2
ID: 11910129
>yes it has been resolved

So I suggest 2 ways:

Now you want to delete this post? [send a zero point message to the community support:
http://www.experts-exchange.com/Community_Support/    asking for deleting this post and refund points]

Now you want to close this post? [assign the points to Expert/s help you]

Bye, Giant.
0
 
LVL 12

Expert Comment

by:Giant2
ID: 11928859
Thanks.
:)
Happy to help you.
0

Featured Post

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
I had a project requirement for a displaying a user workbench .This workbench would consist multiple data grids .In each grid the user will be able to see a large number of data. These data grids should allow the user to 1. Sort 2. Export the …
Viewers will learn about the different types of variables in Java and how to declare them. Decide the type of variable desired: Put the keyword corresponding to the type of variable in front of the variable name: Use the equal sign to assign a v…
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:

863 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now