2017-10-14 2 views
0

私はJavaメールAPIの新しいユーザーです。私は異なる電子メールIDに別のPDFを送信しようとしています。 ここでemail-idとファイルパスは クラスから返されたArrayListを使用してExcelファイルから取得した です。しかし、添付ファイルは受信者のメールで破損しています。 I は、この問題に関連するフローオーバーフローに関するすべての質問と回答を確認しましたが、何も問題はありません。私を助けてください。私は書いた 与えられたプログラムを持っています。私を助けてください。私は受信者のメールで破損している、JavaメールAPIを使用してExcelファイルから別の異なるPDFに異なるメールを送信していますか?

package emailsending; 

import java.util.ArrayList; 
import java.util.Properties; 
import javax.activation.DataHandler; 
import javax.activation.DataSource; 
import javax.activation.FileDataSource; 
import javax.mail.Message; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeBodyPart; 
import javax.mail.internet.MimeMessage; 
import javax.mail.internet.MimeMultipart; 

public class Email { 

    String username; 
    String password; 
    String excelFileName; 
    String result = null; 
    String filename, status; 
    ArrayList email; 

    byte[] buf = {}; 
    ArrayList list_filename; 
    public Email(String username, String password, String excelFileName) { 
     this.username = username; 
     this.password = password; 
     this.excelFileName = excelFileName; 
     excelReading er = new excelReading(excelFileName); 
     ArrayList li = er.email_file(); 
     email = (ArrayList) li.get(0); 
     list_filename = (ArrayList) li.get(1); 
    } 

    public Email() { 

    } 

    public String sendToAll() { 
     try { 
      Properties props = System.getProperties(); 
      props.put("mail.smtp.starttls.enable", "true"); 
      props.setProperty("mail.transport.protocol", "smtp"); 
      props.setProperty("mail.host", "smtp.gmail.com"); 
      props.put("mail.smtp.port", "465"); 
      props.put("mail.smtp.SocketFactory.port", "465"); 
      props.put("mail.smtp.SocketFactory.class", "javax.net.ssl.ssLSocketFactory"); 
      System.err.println("Properties set----"); 

      Session session = Session.getDefaultInstance(props); 
      session.setDebug(false); 

      MimeMessage message = new MimeMessage(session); 
      message.setFrom(new InternetAddress(username)); 
      message.setSubject("Client Receipt"); 
      //1. First body part 
      MimeBodyPart messageBodyPart = new MimeBodyPart(); 
      messageBodyPart.setText("This is your receipt"); 

      MimeMultipart multipart = new MimeMultipart(); 

      MimeBodyPart fileBodyPart = new MimeBodyPart(); 
      for (int i = 0; i < email.size(); i++) { 
       status = "Sending first mail:-" + email.get(i); 
       System.err.println(status); 
       message.setRecipients(Message.RecipientType.TO, 
         InternetAddress.parse(((String) email.get(i)).trim())); 
       filename = ((String) list_filename.get(i)).trim(); 
       DataSource source = new FileDataSource(filename); 
       DataHandler lDataHandler = new DataHandler(source); 

       fileBodyPart.setDataHandler(lDataHandler); 
       fileBodyPart.setFileName(filename); 

       multipart.addBodyPart(fileBodyPart); 
       multipart.addBodyPart(messageBodyPart); 

       message.setContent(multipart); 

       Transport transport = session.getTransport("smtps"); 
       transport.connect("smtp.gmail.com", username, password); 
       transport.sendMessage(message, message.getAllRecipients()); 
       result = "Sucessfully sent Email"; 
      } 
     } catch (Exception ex) { 
      result = "Unable to send Email" + ex.getMessage(); 
      System.out.print(ex); 
     } 
     return result; 
    } 
} 

答えて

0

のJavaMailは、添付の内容に基づいて、添付ファイルの正しい符号を選択​​しようとします。まれに、PDFファイルなどの一部のファイルはプレーンテキストファイルのように見えますが、実際にはバイナリデータが含まれているため、JavaMailで間違ったエンコーディングを選択することがあります。 MimeBodyPart method that allows you to specify the encodingを試し、 "base64"エンコーディングを使用してください。それでも問題が解決しない場合は、受信したファイルがどのように「破損している」かについての詳細が必要です。

+0

私はすでにあなたの提案を試みましたが、それでも動作していません。すでに試したヘッダ: ** fileBodyPart.setDataHandler(lDataHandler); fileBodyPart.setFileName(lDataHandler.getName()); fileBodyPart.setHeader( "Content-Type"、 "multipart/mixed");fileBodyPart.setHeader( "Content-Transfer-Encoding"、 "base64"); multipart.addBodyPart(fileBodyPart); multipart.addBodyPart(messageBodyPart); ** –

+0

これらのヘッダーをすべて追加しましたか、または私が提案したことをしましたか?それでも機能しない場合は、詳細が必要です。 –

関連する問題