2013-09-02 4 views
1

Я использую This решение.Как отправить больше данных по электронной почте

При i.putExtra(Intent.EXTRA_TEXT , "body of email"); он работает должным образом. Если "body of email" изменен на String с длиной 711098, а не на: он не подходит для выбора клиента электронной почты.

Любые идеи, решения?

+1

Проверите LogCat для сообщений об отказах связующего агента. «Намерение» ограничено ~ 1 МБ, и вы можете превысить его. – CommonsWare

+0

есть, есть сообщение. Как его преодолеть? –

ответ

2

Intent, используемый в операции (например, startActivity()), ограничен величиной ~ 1 МБ.

Как его преодолеть?

Отправить более короткое электронное сообщение.

Или отправьте длинный текст в виде вложения, используя EXTRA_STREAM.

Или отправьте электронное письмо с помощью JavaMail.

Или отправьте электронное письмо, отправив 711098 байт в веб-службу, которую вы используете, которая отправляет письмо от имени вашего приложения.

+0

спасибо, я проверю: отправить длинный текст в виде вложения, используя EXTRA_STREAM –

+0

, не могли бы вы проверить реализацию, чего там нет? –

+0

спасибо за предложение сейчас работает –

0

Вот реализация того, что предложили CommonsWare:

Файл темп сохраняется в папку Downloads, поэтому она доступна для всех приложений. Не забудьте удалить его!

Во время разработки USB-кабель подключен к вашему устройству, и вы смотрите лог-код. Теперь вытащите кабель USB или вы получите исключение, исключенное из разрешения!

Файл data.txt будет отображаться в интерфейсе клиента Gmail, но он не будет отправлен, если вы забудете вытащить кабель и предоставите ОС Android доступ к папке «Загрузки».

public void sendEmail(String emailBody, String emailAddrressTo) { 

     boolean bodyToLong = (emailBody != null && emailBody.length() > 300000); 

     final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
     emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { emailAddrressTo }); 
     emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "data"); 
     if (!bodyToLong) { 
      emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, emailBody); 
     } else {// data file to big: 

      String tmpFileName = "data.txt"; 
      File dirDownloads = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); 
      File fileOut = new File(dirDownloads, tmpFileName); 

      FileOutputStream fos; 
      try { 
       fileOut.createNewFile(); 
       fos = new FileOutputStream(fileOut); 

       FileDescriptor fd = fos.getFD(); 
       BufferedWriter bw = new BufferedWriter(new FileWriter(fd)); 
       bw.write(emailBody); 

       fd.sync(); 
       bw.close(); 

      } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
       String msg = e.getMessage(); 
       if (msg.contains("(Permission denied)")) { 
        Toast.makeText(activity, "PULL THE USB CABLE OUT FROM PHONE!!! Out You have forgot to add android.permission.WRITE_EXTERNAL_STORAGE permission to AndroidManifest.xml", Toast.LENGTH_SHORT).show(); 
       } 

      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "This message has to long data. Please see the attachment!"); 

      Uri uri = Uri.fromFile(fileOut); 
      emailIntent.putExtra(android.content.Intent.EXTRA_STREAM, uri); 
     } 
     emailIntent.setType("message/rfc822"); 

     Intent intentToStart = Intent.createChooser(emailIntent, "Send mail..."); 

     activity.startActivity(intentToStart); 
    }