Enviando um e-mail através da aplicação java com o arquivo excel anexado – não funcionando

Eu estou tentando enviar um email através de aplicativo Java com o arquivo excel como anexo sem realmente criar o arquivo.Os dados no arquivo excel vem do database. Eu sou capaz de enviar o email com anexo, mas o arquivo está no formato de texto (delimitado por tabulação). Mas eu quero que o arquivo esteja apenas no formato Excel.

Por favor ajude….

A seguir está o código:

//Here goes my DBConnection and Query code while(rs.next()) { for(int i=1;i<13;i++) { //tab for each column exceldata = exceldata+""+"\t"; } // new line for end of eachrow exceldata = exceldata+"\n"; } String data = exceldata; String filename="example"; MimeMessage msg = new MimeMessage(session); //TO,From and all the mail details goes here DataSource fds = new ByteArrayDataSource(data,"application/vnd.ms-excel"); MimeBodyPart mbp1 = new MimeBodyPart(); mbp1.setText("Hi"); MimeBodyPart mbp2 = new MimeBodyPart(); mbp2.setDataHandler(new DataHandler(fds)); mbp2.setFileName(filename); Multipart mp = new MimeMultipart(); mp.addBodyPart(mbp1); mp.addBodyPart(mbp2); msg.setContent(mp); msg.saveChanges(); // Set the Date: header msg.setSentDate(new java.util.Date()); Transport.send(msg); 

Você precisa produzir seus dados limitados guia em um arquivo do excel. Apenas tweaking o tipo MIME não faria o Excel perceber seu arquivo de texto limitado guia como um documento do excel.

Qualquer arquivo de planilha tem uma estrutura binária diferente. Ele precisa ter uma Workbook , Worksheets e Rows de dados de Cell dentro; e eles estão claramente ausentes do seu arquivo de texto. É por isso que não funciona da maneira que você espera.

Veja como você pode usar o Apache POI para criar um arquivo de Excel temporário para ser posteriormente usado como anexo de email.

 Workbook xlsFile = new HSSFWorkbook(); // create a workbook CreationHelper helper = xlsFile.getCreationHelper(); Sheet sheet1 = xlsFile.createSheet("Sheet #1"); // add a sheet to your workbook while(rs.next()) { Row row = sheet1.createRow((short)0); // create a new row in your sheet for(int i = 0; i < 12; i++) { row.createCell(i).setCellValue( helper.createRichTextString(exceldata)); // add cells to the row } } // Write the output to a temporary excel file FileOutputStream fos = new FileOutputStream("temp.xls"); xlsFile.write(fos); fos.close(); // Switch to using a `FileDataSource` (instead of ByteArrayDataSource) DataSource fds = new FileDataSource("temp.xls"); 

Se você não quer criar um arquivo de Excel temporário para o despejo os dados aqui é como conseguir o mesmo

 ByteArrayOutputStream bos = new ByteArrayOutputStream(); xlsFile.write(bos); // write excel data to a byte array fos.close(); // Now use your ByteArrayDataSource as DataSource fds = new ByteArrayDataSource(bos.toByteArray(), "application/vnd.ms-excel"); 

Se você escrever um arquivo txt você obter um arquivo de texto, alterando seu contenttype para excel não irá automaticamente converter um arquivo de texto baseado em guia para um arquivo do excel.

Mas felizmente existem truques. Certifique-se de que seu nome de arquivo termine em .xls. A maioria dos programas de e-mail tentará abri-lo como um arquivo excel, embora ainda seja um arquivo de texto delimitado por tabulações.

o mesmo funciona com nomear it.csv e using; como delimitadores.

A única maneira de ter um arquivo de Excel real é usar ferramentas que criam arquivos do Excel, como o Apache POI Prject e várias outras ferramentas.

tente isso.este código funciona bem para anexos.

  public void sendMail(String receiverId) { try { // this below commented line for the HTML body text // MultiPartEmail htmlEmail = new HtmlEmail(); // OR // HtmlEmail email = new HtmlEmail(); MultiPartEmail email = new MultiPartEmail(); // setting the port number email.setSmtpPort(getPortNumber()); // authenticating the user email.setAuthenticator(new DefaultAuthenticator(getSenderID(), getSenderPassword())); // email.setDebug(true); email.setSSL(true); // setting the host name email.setHostName(getHostName()); // setting the rciever id email.addTo(receiverId); // check for user enterd cc or not if (getCc() != null) { // add the cc email.addCc(getCc()); } // check for user enterd bcc or not if (getBcc() != null) { // add the bcc email.addBcc(getBcc()); } // setting the sender id email.setFrom(getSenderID()); // setting the subject of mail email.setSubject(getSubject()); // setting message body email.setMsg(getBody()); // email.setHtmlMsg("

"+getBody()+"

"); // checking for attachment attachment if (getAttachmentPath() != null) { // add the attachment EmailAttachment attachment = new EmailAttachment(); attachment.setPath(getAttachmentPath()); attachment.setDisposition(EmailAttachment.ATTACHMENT); email.attach(attachment); } // send the email email.send(); // System.out.println("Mail sent!"); } catch (Exception e) { // System.out.println("Exception :: " + e); e.printStackTrace(); // gl.writeWarning("Error occured in SendMail.java of sendMailWithAttachment() "); // gl.writeError(e); } }// sendmail()

Você pode usar o seguinte código para enviar e-mail através do seu aplicativo java com o anexo do arquivo excel. Uma coisa, uma vez que você escreve todo o conteúdo do database para o arquivo, fecha o leitor de arquivos e verifica onde o arquivo sai naquele local.

  // Define message Message message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject("Hello JavaMail Attachment"); // Create the message part BodyPart messageBodyPart = new MimeBodyPart(); // Fill the message messageBodyPart.setText("Pardon Ideas"); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); // Part two is attachment messageBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource(filename); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(filename); multipart.addBodyPart(messageBodyPart); // Put parts in message message.setContent(multipart); // Send the message Transport.send(message); 

Tente isso

 Multipart multipart = new MimeMultipart(); multipart.addBodyPart("some text"); // Part two is attachment messageBodyPart = new MimeBodyPart(); String filePath = "your file path"; File f1 = new File(filePath); DataSource source = new FileDataSource(filePath); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(f1.getName()); multipart.addBodyPart(messageBodyPart); // Put parts in message m.setContent(multipart); //String msg="Hello Prabhakar"; //m.setContent(msg,"text/html"); transport.sendMessage(m,m.getAllRecipients()); transport.close(); 
Intereting Posts