Solved

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

Posted on 2004-08-24
17
555 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
MS Dynamics Made Instantly Simpler

Make Your Microsoft Dynamics Investment Count  & Drastically Decrease Training Time by Providing Intuitive Step-By-Step WalkThru Tutorials.

 
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
 
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

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

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…
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
Viewers learn about the “for” loop and how it works in Java. By comparing it to the while loop learned before, viewers can make the transition easily. You will learn about the formatting of the for loop as we write a program that prints even numbers…
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.
Suggested Courses

738 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