当前位置: 首页 > 知识库问答 >
问题:

如何通过电子邮件发送文本文件作为附件-Android?

何博涛
2023-03-14

我在网上看到了很多代码,但它们似乎都遇到了问题。

使用以下功能创建并保存文件:

    private static String filename = "eulerY.txt" ;

    private void saveData() {

      

        FileOutputStream fos_FILE_eulerY = null;

        String message = "hello";
        try {
            fos_FILE_eulerY = openFileOutput(filename , MODE_PRIVATE);
            fos_FILE_eulerY.write(message.getBytes());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fos_FILE_eulerY != null) {
                try {
                    fos_FILE_eulerY.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }


        // export data
        sendEmail ();
    }

然而,当运行下面的代码来发送文件时,我一直遇到问题ClipData。我tem.getUri,并建议使用此链接的所有答案https://stackoverflow.com/questions/48117511/exposed-beyond-app-through-clipdata-item-geturi,当打开Gmail时,它说无法附加文件

    private void sendEmail (){
        File filelocation = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), filename);
        Uri path = Uri.fromFile(filelocation);
        Intent emailIntent = new Intent(Intent.ACTION_SEND);
       // set the type to 'email'
        emailIntent .setType("vnd.android.cursor.dir/email");
        String to[] = {"asd@gmail.com"};
        emailIntent .putExtra(Intent.EXTRA_EMAIL, to);
      // the attachment
        emailIntent .putExtra(Intent.EXTRA_STREAM, path);
      // the mail subject
        emailIntent .putExtra(Intent.EXTRA_SUBJECT, "Subject");
        startActivity(Intent.createChooser(emailIntent , "Send email..."));
    }


如果有任何方法可以发送此文件,我将不胜感激。

共有1个答案

沈子昂
2023-03-14

如果您的targetSdkVersion

第一步:在AndroidManifest中添加下面的代码。xml文件。

        <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>

第二步

res文件夹中创建一个xml文件夹。并创建一个文件,即文件路径。xml因为看看上面的代码里面的

文件路径。xml

<paths>
    <external-path name="external_files" path="."/>
</paths>

第3步现在你可以把文件保存在你的包里。私有的文件夹,您可以将保存在此文件夹中的文件uri作为附件共享给其他应用程序,例如gmailapp。现在,您的方法如下所示:

    private void saveData() {
    String filename = "eulerY.txt" ;
    //FileOutputStream fos_FILE_eulerY = null;
    File externalFilesDirectory = this.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS);
    File textFile = new File(externalFilesDirectory,filename);
    String message = "hello";
    try {
        //fos_FILE_eulerY = openFileOutput(textFile.getAbsolutePath() , MODE_PRIVATE);
        //fos_FILE_eulerY.write(message.getBytes());
        FileWriter writer = new FileWriter(textFile);
        writer.append(message);
        writer.flush();
        writer.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (Exception e){
        e.getLocalizedMessage();
    }


    // export data
    sendEmail (textFile);
}

    private void sendEmail (File file){
    //File filelocation = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), filename);
    //Uri path = Uri.fromFile(filelocation);
    //FileProvider.getUriForFile(it, "${it.packageName}.provider", file)
    Uri fileUri = FileProvider.getUriForFile(this,getPackageName()+".provider",file);
    Intent emailIntent = new Intent(Intent.ACTION_SEND);
    emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    // set the type to 'email'
    emailIntent .setType("vnd.android.cursor.dir/email");
    String[] to = {"asd@gmail.com"};
    emailIntent .putExtra(Intent.EXTRA_EMAIL, to);
    // the attachment
    emailIntent .putExtra(Intent.EXTRA_STREAM, fileUri);
    // the mail subject
    emailIntent .putExtra(Intent.EXTRA_SUBJECT, "Subject");
    startActivity(Intent.createChooser(emailIntent , "Send email..."));
}
 类似资料:
  • 我的目标是:通过SMTP发送带有纯文本、文本/html和附件的事务性电子邮件。 我的代码:用JavaMail实现 我的问题是:它在hotmail或outlook上看起来不错。但在gmail上,如果是一封带有电子邮件地址的邮件,它不会正确显示邮件正文。txt附件(如果附件是图像,则可以正常工作) 任何帮助都将不胜感激。 以下是我的原始SMTP输出: 一些截图 只送了一个。附件。消息正文不显示,附件重

  • 我想用mailto标签发送电子邮件,附带一个pdf文件作为附件。mailto标记使用以下方法打开邮件窗口,其中包含传递的参数,如to和subject: 但是,附件作为一个参数不起作用。请建议如何在手机中发送pdf附件。 谢啦

  • 问题内容: 我在理解如何使用Python通过电子邮件发送附件时遇到问题。我已成功通过电子邮件将简单消息通过电子邮件发送。有人可以在电子邮件中说明如何发送附件。我知道在线上还有其他帖子,但是作为Python初学者,我很难理解它们。 问题答案: 这是另一个:

  • 问题内容: 我正在使用sendgrid发送电子邮件,并且使用以下代码可以正常工作,但没有附件。 但是我需要发送附件,因此我搜索了github源和Web文档API,由于某种原因,没有javadocs,但是有一个示例GitHub sendgrid, 所以我一直在尝试直到它起作用为止,我缩小了一些异常和响应代码,起初我是被禁止的未经授权,最好是响应202,表示有效且已排队(在此处检查),这是我的代码发送

  • 问题内容: 我创建了一个脚本,该脚本每天晚上在Linux服务器上运行,该脚本用于将每个MySQL数据库备份到.sql文件,并将它们打包为压缩的.tar文件。我要完成的下一步是通过电子邮件将该tar文件发送到远程电子邮件服务器以进行保管。我可以通过管道备份文本文件来向正文中的原始脚本发送电子邮件,如下所示: 回显备份文件的文本,该文本将通过收件人的电子邮件地址作为参数传递到程序中。 虽然可以满足我的

  • 我正在使用Azure mobile services后端,我可以通过SendGrid成功地发送电子邮件。但是,每次我尝试添加附件时,它都失败了。我从来没有收到过邮件。经过一点研究,我发现我所需要的只是一个虚拟路径。我修改了路径名,但它仍然不工作。 我想不出为什么会失败。 下面是我的代码: