Extract Mail Attachment using Java Mail
Hello Friends
A day ago I entered into Java Mail , now I am able to send mail from my Java Program.
The help I need from you is I wanna save the attachment coming in the mail using Java.
For eg : a mail reched my Inbox contains .xls or .csv file which I wanna save to some place.
Plss guide me to acheive this friends.
Regards
Vicky
String host = "";
String username = "";
String password = "";
String srcDir = "INBOX";
String tarDir = "";
String subject = "";
String filepath = "C:/Documents and Settings/name/Desktop";
String filename = "demo";
Properties props = System.getProperties();
props.put("mail.host", host);
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imap");
store.connect(host, username, password);
Folder folder = store.getFolder(srcDir);
Folder dFolder = store.getFolder(tarDir);
folder.open(Folder.READ_WRITE);
Message message[] = folder.getMessages();
java.util.Date yesterdayDate = new Date(System.currentTimeMillis() - 24*60*60*1000);
for (int p = 0; p < message.length; p++) {
java.util.Date messageReceivedDate = message[p].getReceivedDate();
if(messageReceivedDate.after(yesterdayDate))
if (message[p].getSubject().equals(subject)) {
Multipart mp = (Multipart)(message[p].getContent());
for (int i = 0, n = mp.getCount(); i < n; i++) {
Part part = mp.getBodyPart(i);
String disposition = part.getDisposition();
if ((disposition != null) && (disposition.equals("ATTACHMENT") || disposition.equals("INLINE")))) {
String fullpath = filepath+"/" + filename+".csv";
File file = new File(fullpath);
InputStream in = part.getInputStream();
FileOutputStream fos = new FileOutputStream(file);
byte[] buf = new byte[part.getSize()];
int c = 0;
while ((c = in.read(buf)) != -1) {
fos.write(buf, 0, c);
in.close();
fos.close();
} // if (disposition) closing
}// inner for loop closing
/* ----------------------------------------------------Move Message to new folder--------------------------------------------------------------------- */
if (message.length != 0) {
folder.copyMessages(message, dFolder);
folder.setFlags(message, new Flags(Flags.Flag.DELETED), true);
// Dump out the Flags of the moved messages, to insure that
// all got deleted
for (int i = 0; i < message.length; i++)
if (!message.isSet(Flags.Flag.DELETED))
System.out.println("Message # " + message[i] + " not deleted");
} //for
}// if (message.length != 0)
// System.out.println("*** Message moved to "+tarDir+" Directory ***");
}//if loop closing - checking message subject
}// if loop closing checking date
}// outer for() loop closing
Similar Messages
-
How to Read An Attachment Using Java Mail
Hi
I Am Able To Read The Mail Using Java Mail ,but Unable To Read The Attachment Which Comes Along With The Mail.
Please Help Me , In Reading The Attachment.Hi
I Am Able To Read The Mail Using Java Mail ,but
t Unable To Read The Attachment Which Comes Along
With The Mail.
Please Help Me , In Reading The Attachment.Do you mean:
- I only recieve .txt or .doc attachments and I want to see the contents? Or could you get a .jpg as well?
or
- Do you need to seperate the attachment from the e-mail and then view it? -
Want to send PDF as attachement using Java Mail
HI,
I am using Java mail API for sending PDF as attachment. Here is my sample code
messageBodyPart = new MimeBodyPart();
messageBodyPart.setDataHandler(new DataHandler("String data for PDF using iText", "text/plain" ));
I am generating String for PDF file using iTEXT but I am unable to find out mimetype for passing into DataHandler as second paramete.
Any idea?
Thanks
ShaileshDon't convert the data to String. It isn't text so
you'll damage the binary content by doing that. In
the "demos" directory of your JavaMail download
you'll find a ByteArrayDataSource class you can use
instead of a FileDataSource. Yes, this worked for me. I create the pdf in memory as as StringBuffer and I just changed the code from
messageBodyPart.setDataHandler(new DataHandler(pdf.toString(), "application/pdf"));
to
messageBodyPart.setDataHandler(new DataHandler(new ByteArrayDataSource(pdf.toString(), "application/pdf")));
and it worked.
Thanks a lot for your help,
Dennis -
How to send mail attachments using java mail
can any one help how to create mails attachments using java mail
you can do it like this:
Message msg = new MimeMessage(session);
String fileAttachment = "c:/test.txt";
Multipart mp = new MimeMultipart();
BodyPart bp = new MimeBodyPart();
FileDataSource fds = new FileDataSource(fileAttachment);
bp.setDataHandler(new DataHandler(fds));
bp.setFileName(fds.getName());
mp.addBodyPart(bp);
msg.setContent(mp);
... -
Error while sending mail when using Java Mail API
Hi Experts,
I am trying to execute a webdynpro application which uses the Java Mail API to send emails. The exception that I get on executing the application is :
Sending failed; nested exception is: javax.mail.SendFailedException: Invalid Addresses; nested exception is: javax.mail.SendFailedException: 550 5.7.1 Unable to relay for [email protected]
Can anybody please help me sort out the issue.
Regards
AbdullahHi,
Usually one get this error if the SMTP server is configured not to relay mails (a security measure) or the SMTP server need the mail to be sent from a trusted IP or with proper authentication. Some SMTP servers are configured to block junk mails.
Pls check with your mail server administrator.
Regards -
How to access MS Exchange Server Mail and download attachment using Java ??
Hi guys,
I need to develop a program to access my inbox from MS Exchange Server and also download the attachment using Java language !! Any example code or any site which got tutorial on this ? Thanks !!Here is a java file that connects to a users exchange account, reads all messages, and writes the attachment to the file system.
import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class TestNew {
public static void main (String args[]) throws Exception {
// Create empty properties
Properties props = new Properties();
// Get session
Session session = Session.getInstance(props, null);
// Get the store
Store store = session.getStore("imap");
// Connect to store
store.connect(host, username, password);
// Get folder
Folder topFolder = store.getDefaultFolder();
Folder folder = literature.getFolder("newFolder");
folder.open(Folder.READ_WRITE);
Message[] msg = folder.getMessages();
for(int i = 0; i < msg.length; i++){
Address[] from = msg.getFrom();
String subject = msg[i].getSubject();
Object o = msg[i].getContent();
if (o instanceof MimeMultipart) { //attachements available?
MimeMultipart mm = (MimeMultipart) o;
int mmCount = mm.getCount();
for (int m = 0; m < mmCount; m++) { // for each part
Part part = mm.getBodyPart(m);
String disposition = part.getDisposition();
if ((disposition != null) && ((disposition.equals(Part.ATTACHMENT) || disposition.equals(Part.INLINE)))) {
InputStream is = null;
File tempFile = new File("D:\\TEMP\\mailtest\\" + part.getFileName());
FileOutputStream fos = null;
try {
fos = new FileOutputStream(tempFile);
is = part.getInputStream();
int byteCount = 0;
byte[] bytes = new byte[128];
while ( (byteCount = is.read(bytes, 0, bytes.length)) > -1) { //use full read() method for GZIPInputStream to be treated correctly
fos.write(bytes, 0, byteCount);
finally {
try {
if (fos != null)
fos.close();
catch (IOException ioe) {}
try {
if (is != null)
is.close();
catch (IOException ioe) {}
System.out.println("Content: " + o);
System.out.println(from[0].toString());
System.out.println(subject); -
Error of using Java Mail in Web Start
Hi,
I got a problem when using Java Mail to send email. My apps is a stand alone and no problem when it was deployed normally. When I used the Web Start to deploy it, the following error was caught when I tried to send email:
javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed; boundary="----=_Part_0_2824645.1032281188963"
at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:851)
at javax.activation.DataHandler.writeTo(DataHandler.java:305)
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1089)
at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1527)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:321)
at javax.mail.Transport.send0(Transport.java:164)
at javax.mail.Transport.send(Transport.java:81)
at com.mailcom.client.util.EMail.sendMail(EMail.java:180)
Here is the source code:
public class EMail {
public static void sendMail(String host,
String sender,
String recipient,
String subject,
String content,
Vector fileNames) throws MessagingException {
Properties props = new Properties();
props.put("mail.smtp.host",host);
Session session = Session.getDefaultInstance(props,null);
session.setDebug(true);
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(sender));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipient,false));
msg.setSubject(subject);
Multipart mp = new MimeMultipart();
// create and fill the first message part
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setText(content);
mp.addBodyPart(mbp1);
// attach the file to the message
if(fileNames != null && fileNames.size() != 0) {
FileDataSource fds = null;
for(int i = 0; i < fileNames.size(); i++ ) {
String currentFileName = (String)fileNames.elementAt(i);
fds = new FileDataSource(currentFileName);
// create the second message part
MimeBodyPart mbp2 = new MimeBodyPart();
mbp2.setDataHandler(new DataHandler(fds));
mbp2.setFileName(fds.getName());
// create the Multipart and its parts to it
mp.addBodyPart(mbp2);
// add the Multipart to the message
msg.setContent(mp);
msg.setHeader("X-Mailer",MAILER);
// set the Date: header
msg.setSentDate(new Date());
// send the message
line 180 Transport.send(msg);Yes. All the third party jar files and our application jar are put on the server side. Here is the JNLP file:
<?xml version="1.0" encoding="utf-8"?>
<!-- JNLP File for software-->
<jnlp spec="1.0+" codebase="http://www.software.com/apps" href="client.JNLP">
<information>
<title>client application</title>
<vendor> * </vendor>
<homepage href="docs/help.html"/>
<description>Client</description>
<description kind="short">A tool</description>
<icon href="images/logo.jpg"/>
<offline-allowed/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.3"/>
<jar href="lib/client.jar"/>
<jar href="lib/mail.jar"/>
<jar href="lib/smtp.jar"/>
<jar href="lib/activation.jar"/>
</resources>
<application-desc main-class="com.software.client.MainFrame">
<argument>2226</argument>
<argument>www.software.com</argument>
<argument>5351</argument>
</application>
</jnlp> -
Using Java Mail API from Tomcat
Hello,
Purely as an academic exercise I have written a JSP page which, upon being requested from the client's browser, should send me a default email using Java Mail Api.
here is the code :
import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class TestMail {
static String msgText1 = "success this time 12";
static String msgText2 = "This is the text in the message attachment.";
public String sendIt() {
String to = "<my email";
String from = "<anything>";
String host = "<my ip address of smtp server>";
boolean debug = false;
Properties props = new Properties();
props.put("mail.smtp.host", host);
Session session = Session.getInstance(props, null);
.....The code works fine as a stand alone app but when called from JSP page it hangs on the Session.getInstance line. I can only guess that this might be a security issue with the container not allowing access to the smtp server ?
Can anyone give me a clue ???Your Tomcat log files should spell out the problem for you.
My Tomcat installation does not come with the Java Mail API. I had to add the mail and activation jar files to the server/common.lib directory (or the server's shared/lib or the WEB-INF/lib of your application.)
HTH. -
How can i access gmail's smtp server using java mail api
i m using java mail api to access gmails pop and smtp service to receive and send mail from ur gmail account. I m able to access gmails pop server using the ssl and port 995 , but i can not use its smtp server to which i m connecting using ssl on 465 port. It requires authentication code.
if anybody can help me in this regard i m thnkful to him/her.
thnks in advance.
jogin desaiHere's an example of using SSL + Authentication
http://onesearch.sun.com/search/onesearch/index.jsp?qt=ssl+authentication&subCat=siteforumid%3Ajava43&site=dev&dftab=siteforumid%3Ajava43&chooseCat=javaall&col=developer-forums -
How to delete message from the fodler of AOL account using Java mail
Hello All,
I am using Java MAil API in my application, i want to delete message from AOL account's folder,
when i set the folder as "Recently Deleted" or "Trash" , i get an exception as "folder does not exist".
when i tested , some times mail is moving into Recently Deleted folder, but not every time.
this is happening in both the interface as AOl Interface or my application.
when i use folder.close(true) after setting the flag of message as DELETED. it completely remove the message from the acount.
but i want to let the message be remained in the Recently Deleted folder. what should i do.
i dont want to remove the message completely from the account.I am using IMAP also.You'll need to figure out what the real name of the "Recently Deleted" folder is on the AOL IMAP server
(assuming it's a real folder and not some sort of "virtual" folder), then copy the message into that folder.
See the folderlist.java demo program as a way to explore the names of all the folders on the server. -
How to send Secured Mail using Java Mail?
I want to send mails with "Send Secure" option using Java Mail. Now mails are being sent using Java Mail connecting to smtp host.
Appreciating your help.
Thanks.There are third party libraries to help with this. Bouncy Castle is very popular.
See the [JavaMail Third Party Products|http://java.sun.com/products/javamail/Third_Party.html] page. -
How to send HTML Format Mail using Java Mail in oracle 9i Forms
Dear All
could you please tell me how to send HTML Format Mail using Java Mail in oracle 9i Forms and how to implement the java mail ?
if it is possible, could you please send me the sample code? please very urgent
Thanks
P.SivaramanHello,
<p>Here is a Form sample.</p>
Francois -
Monitor Unix Mail Queue using java
Hi! ,
I want to monitor unix mail queue using java. how can i proceed..
Please advice..
Thanks..
GaneshGoogle and see if there is an API which lets you monitor it.
Kaj -
Using Java Mail with lotus notes
we are using lotus notes as default mail client and lotus notes server , there is no pop3 or smtp server as far as the intranet mailing goes,
i am developing an application in which i have a form which the users will fill in if they forget their logging in passwords, as soon as they submit the form they will get an autogenerated email which will send them their passwords. considering the above scenario can i use java mail api for thisNo. If you aren't running the pop3 or smtp services then the Java mail API won't help you at all, unless there is a SMTP server somewhere that you can use to deliver mail to your Notes server. If you use Notes for external emails there must be a server somewhere!!??
You can use the Notes Java API to create and send a document if you have the DIIOP service running on the Notes server.
SH -
Problem using Java Mail API with WLS 7.0
Hi All,
I am trying to use the Java Mail API provided by WLS 7.0. I have made the
settings metioned in the WLS 7.0 docs. However when I try to run the program I
am getting the following error:
javax.naming.NoInitialContextException: Need to specify class name in environment
or system property, or as an applet parameter, or in an application resource file:
java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6
46)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:246
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.jav
a:283)
at javax.naming.InitialContext.lookup(InitialContext.java:350)
The code that I have written is as follows
import java.util.*;
import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.naming.*;
import java.io.*;
import java.net.InetAddress;
import java.util.Properties;
import java.util.Date;
public class MailTo {
public static void main(String args[])
try
//Context ic = getInitialContext();
InitialContext ic = new InitialContext();
/* My jndi name is "testSession" */
Session session = (Session) ic.lookup("testSession"); /* THE PROBLEM IS SHOWN
IN THIS LINE */
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", "XX.XX.XX.XX");
/* For security reasons I have written the ip add in this format */
props.put("mail.from", "[email protected]"); /* for security reasons i have
changed the mail address */
Session session2 = session.getInstance(props);
Message msg = new MimeMessage(session2);
msg.setFrom();
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]",
false));
msg.setSubject("Test Message");
msg.setSentDate(new Date());
MimeBodyPart mbp = new MimeBodyPart();
mbp.setText("This is a mail sent to you using JAVA Mail API and Weblogic Server");
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp);
msg.setContent(mp);
Transport.send(msg);
catch(Exception e)
e.printStackTrace();
}//end of main
public static Context getInitialContext()
throws NamingException
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
p.put(Context.PROVIDER_URL, "t3://localhost:7501/testWebApp");
p.put(Context.SECURITY_PRINCIPAL, "weblogic");
p.put(Context.SECURITY_CREDENTIALS, "weblogic");
return new InitialContext(p);
}//end of class
Can anyone please tell me what is the problem. I thought that we cannot directly
do
InitialContext ic = new InitialContext();
So I had written a method getInitialContext() as shown in the above piece of code,
but that too did not work.
Eagerly awaiting a response.
Jimmy ShahYou can use InitialContext ic = new InitialContext() only if you are using a startup class, servlet or a JSP i.e
server side code.
If you are using a java client you need to use Context ic = getInitialContext();
Try this code
import java.util.*;
import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.naming.*;
import java.io.*;
import java.net.InetAddress;
import java.util.Properties;
import java.util.Date;
public class MailTo {
public static void main(String args[])
try {
Properties h = new Properties();
h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
h.put(Context.PROVIDER_URL, "t3://localhost:7001");
Context ic = new InitialContext(h);
Session session = (Session) ic.lookup("testSession");
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", "XX.XX.XX.XX");
props.put("mail.from", "[email protected]");
Session session2 = session.getInstance(props);
Message msg = new MimeMessage(session2);
msg.setFrom();
msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse("[email protected]",false));
msg.setSubject("Test Message");
msg.setSentDate(new Date());
MimeBodyPart mbp = new MimeBodyPart();
mbp.setText("This is a mail sent to you using JAVA Mail API and Weblogic Server");
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp);
msg.setContent(mp);
Transport.send(msg);
catch(Exception e)
e.printStackTrace();
}//end of main
}//end of class
We have shipped a javamail example in the samples\server\src\examples\javamail folder.
Jimmy Shah wrote:
Hi All,
I am trying to use the Java Mail API provided by WLS 7.0. I have made the
settings metioned in the WLS 7.0 docs. However when I try to run the program I
am getting the following error:
javax.naming.NoInitialContextException: Need to specify class name in environment
or system property, or as an applet parameter, or in an application resource file:
java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6
46)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:246
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.jav
a:283)
at javax.naming.InitialContext.lookup(InitialContext.java:350)
The code that I have written is as follows
import java.util.*;
import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.naming.*;
import java.io.*;
import java.net.InetAddress;
import java.util.Properties;
import java.util.Date;
public class MailTo {
public static void main(String args[])
try
//Context ic = getInitialContext();
InitialContext ic = new InitialContext();
/* My jndi name is "testSession" */
Session session = (Session) ic.lookup("testSession"); /* THE PROBLEM IS SHOWN
IN THIS LINE */
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", "XX.XX.XX.XX");
/* For security reasons I have written the ip add in this format */
props.put("mail.from", "[email protected]"); /* for security reasons i have
changed the mail address */
Session session2 = session.getInstance(props);
Message msg = new MimeMessage(session2);
msg.setFrom();
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]",
false));
msg.setSubject("Test Message");
msg.setSentDate(new Date());
MimeBodyPart mbp = new MimeBodyPart();
mbp.setText("This is a mail sent to you using JAVA Mail API and Weblogic Server");
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp);
msg.setContent(mp);
Transport.send(msg);
catch(Exception e)
e.printStackTrace();
}//end of main
public static Context getInitialContext()
throws NamingException
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
p.put(Context.PROVIDER_URL, "t3://localhost:7501/testWebApp");
p.put(Context.SECURITY_PRINCIPAL, "weblogic");
p.put(Context.SECURITY_CREDENTIALS, "weblogic");
return new InitialContext(p);
}//end of class
Can anyone please tell me what is the problem. I thought that we cannot directly
do
InitialContext ic = new InitialContext();
So I had written a method getInitialContext() as shown in the above piece of code,
but that too did not work.
Eagerly awaiting a response.
Jimmy Shah--
Rajesh Mirchandani
Developer Relations Engineer
BEA Support
Maybe you are looking for
-
Page History in Sharepoint Foundation 2013
I am using sharepoint 2013 foundation version. Earlier I was using sharepoint 2010 server edition. My question is how to get the Red color for Deleted Texts and Green Color for Added Texts( I used to get the color differentiator in the server editio
-
How do I download my MAC contacts to my new gmail acct.?
How do I download my contacts on my MAC osx to my new gmail acct.? I need to send an email to all my contacts using gmail. Thank you for your help.
-
RAC 11R2 Private Interconnect Issue
Friends We had setup our Oracle Clusterware on Solaris Sparc with a version 11.2.0.3 PSU 2 patch sets. Some changes happen at the OS level and the private Interconnect IPs were picked wrong by our Oracle Clusterware registry. The clusterware is down.
-
How to update image in adobe form
Good Day I am trying to update image in adobeform. i used object library->image->and double clicked it and i got a popup and given the path. i got my image there but when i am running my adobeform in url I am unable to see the image on it. is it b
-
Update attachment file example
Hi There, Does anybody have an example Livecycle PDF form which allows you to update the contents of an attachment? I'm trying the following code, but nothing seems to be happening (i.e. the file is not updated)... the doco does not say this is a se