2012-04-02 28 views
36

メールに.vcfファイルを添付してメールで送信します。しかし、メールは添付ファイルなしのアドレスで受信されます。私は以下のコードを使用しましたが、このコードと私はどこが間違っているのか分かりません。Androidで添付ファイル付きのメールを送信する方法

try {  
    String filelocation="/mnt/sdcard/contacts_sid.vcf";  
    Intent intent = new Intent(Intent.ACTION_SENDTO);  
    intent.setType("text/plain");  
    intent.putExtra(Intent.EXTRA_SUBJECT, "");  
    intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+filelocation));  
    intent.putExtra(Intent.EXTRA_TEXT, message);   
    intent.setData(Uri.parse("mailto:"));   
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

    activity.startActivity(intent); 
    activity.finish(); 
    } catch(Exception e) { 
    System.out.println("is exception raises during sending mail"+e); 
} 

答えて

69

私のために働いた公式Android site

String filename="contacts_sid.vcf"; 
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[] = {"[email protected]"}; 
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...")); 
+0

私の質問に1人のずつ見て...のhttp://stackoverflow.com/questions/12798001/android-how-to-send-multiple-contacts-are-attached-in-single-vcf-file- and-send – NagarjunaReddy

+3

「ハードコードされた」パスは、デバイスによって異なる場合があるので、使用しないでください。ファイル位置の定義を次のように変更することをお勧めします。 ファイルfilelocation = new File(Environment.getExternalStorageDirectory()。getAbsolutePath()、filename); 次に、次のように定義します。 Uri path = Uri.fromFile(filelocation);あなたの意図に入れてください: emailIntent .putExtra(Intent.EXTRA_STREAM、path); –

+1

emailIntent.putExtra(Intent.EXTRA_STREAM、filelocation)は私のためにファイルを添付しませんでしたが、emailIntent.putExtra(Intent.EXTRA_STREAM、Uri.parse( "file://" + filelocation))を使用していました。 – andytrombone

4

例を、メールを送っするために、次のコードを使用してください。 Agarwalさんの答え

+0

私の場合はメールクライアントになりますが、添付ファイルはありません。表示されたトーストは "cant send empty file"です。私のファイルは '/ data/data/com.example.app/files/temp.txt'に保存され、' emailIntent.putExtra(Intent.EXTRA_STREAM、Uri.parse( "content:/" + filePath )); // filePathは/data/com.example.app/files/temp.txt – kAmol

+0

ファイルはアプリのキャッシュディレクトリにあるため送信できません。アプリケーションだけがそのディレクトリから読み取ることができます。 Environment.getExternalStorageDirectory()のような別のディレクトリを使用する必要があります。 – Borzh

+0

使用されたEnvironment.getExternalStorageDirectory()は、そのパスが有効であり、そのファイルが良好なデータを持っていることを確認しました....しかし、同じエラーメッセージ(?)を受け取ります。 – CESDewar

4

FOLDER_NAMEに行われるよう

startActivity(Intent.createChooser(emailIntent , "Send email...")); 

を追加することを必要としているものはすべて、あなたの携帯電話のあなたの内部ストレージ内のファイルの名前です。 (実際にはEXTERNAL_STORAGE)。 file_nameは、送信するファイルの名前です。

private void ShareViaEmail(String folder_name, String file_name) { 
    try { 
     File Root= Environment.getExternalStorageDirectory(); 
     String filelocation=Root.getAbsolutePath() + folder_name + "/" + file_name; 
     Intent intent = new Intent(Intent.ACTION_SENDTO); 
     intent.setType("text/plain"); 
     String message="File to be shared is " + file_name + "."; 
     intent.putExtra(Intent.EXTRA_SUBJECT, "Subject"); 
     intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+filelocation)); 
     intent.putExtra(Intent.EXTRA_TEXT, message); 
     intent.setData(Uri.parse("mailto:[email protected]")); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

     startActivity(intent); 
    } catch(Exception e) { 
     System.out.println("is exception raises during sending mail"+e); 
    } 
} 
1

SENDTO doesntサポート付き。私は、ファイル情報を読むためにプロバイダを使用して私の答えを追加しました。それはKotlinで。

fun shareFile(context: Context, filePath: File?, fileShareInfo: FileShareInfo) { 

    val intentFileShare = Intent(Intent.ACTION_SEND) 

    if (filePath!!.exists()) { 
     intentFileShare.type = fileShareInfo.fileType 
     val uri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", filePath) 
     intentFileShare.putExtra(Intent.EXTRA_STREAM, uri) 
     fileShareInfo.recipients?.let { 
      intentFileShare.putExtra(Intent.EXTRA_EMAIL, fileShareInfo.recipients) 
     } 
     intentFileShare.putExtra(Intent.EXTRA_SUBJECT, fileShareInfo.shareSubjectText) 
     fileShareInfo.shareExtraText?.let { 
      intentFileShare.putExtra(Intent.EXTRA_TEXT, AppViewUtil.fromHtml(fileShareInfo.shareExtraText!!)) 
     } 
     try { 
      ContextCompat.startActivity(context, Intent.createChooser(intentFileShare, fileShareInfo.shareTitle), null) 
     } catch (e: ActivityNotFoundException) { 
      Toast.makeText(context, context.getString(R.string.sharing_no_app_found), Toast.LENGTH_LONG).show() 
     } 

    } 
} 
関連する問題