【问题标题】:Android send mail with attachment from stringAndroid从字符串发送带有附件的邮件
【发布时间】:2014-03-30 17:45:18
【问题描述】:

我有一个 HTML 字符串,我想将它作为文件附加到邮件中。我可以将此字符串保存到文件中并附加它,但我想这样做而不将其保存到文件中。我认为这应该是可能的,但我不知道该怎么做。这是我的代码:

String html = "<html><body><b><bold</b><u>underline</u></body></html>";
Intent intent = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
intent.setType("text/html");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(html));

// this is where I want to create attachment
intent.putExtra(Intent.EXTRA_STREAM, Html.fromHtml(html));

startActivity(Intent.createChooser(intent, "Send Email"));

如何将字符串作为文件附加到邮件中?

【问题讨论】:

  • 附件不是内联内容。根据定义,它们是文件。

标签: android string email attachment


【解决方案1】:
String pathname= Environment.getExternalStorageDirectory().getAbsolutePath();
String filename="/MyFiles/mysdfile.txt";
File file=new File(pathname, filename);
Intent i = new Intent(Intent.ACTION_SEND);
i.putExtra(Intent.EXTRA_SUBJECT, "Title");
i.putExtra(Intent.EXTRA_TEXT, "Content");
i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
i.setType("text/plain");
startActivity(Intent.createChooser(i, "Your email id"));

【讨论】:

    【解决方案2】:
    Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
        emailIntent.setType("png/image");
        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] {
                        "mail--id" });
        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, message);
        Uri uri = Uri.fromFile(new File(Environment
                        .getExternalStorageDirectory(), "/saved_images/MyImage.png"));
        emailIntent.putExtra(Intent.EXTRA_STREAM, uri);
        emailIntent.setType("text/plain");
        startActivity(emailIntent);
    

    不要忘记在清单文件中添加以下权限。

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" /
    

    【讨论】:

      【解决方案3】:

      此代码使您免于添加清单使用从外部 sd 卡读取的权限。它在您的应用程序私有目录上的文件目录中创建一个临时文件,然后使用您的字符串内容创建该文件并允许读取权限以便可以访问它。

      String phoneDesc = "content string to send as attachment";
      
      FileOutputStream fos = null;
      try {
              fos = openFileOutput("tempFile", Context.MODE_WORLD_READABLE);
              fos.write(phoneDesc.getBytes(),0,phoneDesc.getBytes().length);
              fos.flush();
              fos.close();
      } catch (IOException ioe) {
          ioe.printStackTrace();
      }
      finally {
          if (fos != null)try {fos.close();} catch (IOException ie) {ie.printStackTrace();}
      }
      File tempFBDataFile  = new File(getFilesDir(),"tempFile");
      Intent emailClient = new Intent(Intent.ACTION_SENDTO, Uri.parse("someone@somewhere.com"));
      emailClient.putExtra(Intent.EXTRA_SUBJECT, "Sample Subject";
      emailClient.putExtra(Intent.EXTRA_TEXT, "Sample mail body content");
      emailClient.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(tempFBDataFile));//attachment
      Intent emailChooser = Intent.createChooser(emailClient, "select email client");
      startActivity(emailChooser);
      

      当您不再需要该文件时,应该调用它。

      File tempData = new File(getFilesDir(),"tempFile");
      if (tempData.exists()) {
          tempData.delete();
      }
      

      【讨论】:

      • 它说“Context.MODE_WORLD_READABLE”由于安全问题已被弃用。
      猜你喜欢
      • 1970-01-01
      • 2012-03-24
      • 2015-07-22
      • 2015-03-14
      • 2013-12-14
      • 2011-06-25
      • 2017-09-13
      • 1970-01-01
      相关资源
      最近更新 更多