web-dev-qa-db-ja.com

Android、HTMLメールを送信し、Android他のアプリケーションではなくG-Mail経由で送信するように強制する方法は?

アプリケーションを介してメールを送信したい。 G-MailだけでHTMLベースのメールを送信する必要があります。私は、それぞれに長所と短所がある次の解決策を見つけました。

1)インテント(Intent.ACTION_SEND)を使用します。これは非常に簡単な方法で、自分の体をHTML形式で見ることができますが、問題は[メールを送信]ボタンをクリックすると問題になります。FacebookやGoogle+などの多くのアプリケーションがポップアップし、役に立たないため、リストに表示しないでください。 。これはそのコードです:

String html = "<!DOCTYPE html><html><body><a href=\"http://www.w3schools.com\" target=\"_blank\">Visit W3Schools.com!</a>" + "<p>If you set the target attribute to \"_blank\", the link will open in a new browser window/tab.</p></body></html>";

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"MY EMAIL ADDRESS"});
intent.putExtra(Intent.EXTRA_SUBJECT, "subject here");
intent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(html));
startActivity(Intent.createChooser(intent, "Send email..."));

enter image description hereenter image description here

2)インテント(Intent.ACTION_SENDTO)を使用します。このようにして、役に立たないアプリケーションをフィルタリングし、メールクライアントだけを表示します。しかし、GmailクライアントでHTML形式のメールが表示されません。メールを送信すると、一部のクライアントは本文をHTML形式で表示しますが、他のクライアントはHTMLを識別せず、リンクはプレーンテキストのように動作します。このコードは次のようなものです。

String html = "<!DOCTYPE html><html><body><a href=\"http://www.w3schools.com\" target=\"_blank\">Visit W3Schools.com!</a>" + "<p>If you set the target attribute to \"_blank\", the link will open in a new browser window/tab.</p></body></html>";
Intent send = new Intent(Intent.ACTION_SENDTO);
String uriText = "mailto:MY EMAIL ADDRESS" + "?subject=subject here" + "&body=" + html;
uriText = uriText.replace(" ", "%20");
Uri uri = Uri.parse(uriText);
send.setData(uri);
startActivity(Intent.createChooser(send, "Send mail..."));

enter image description hereenter image description here

3) JavaMail API を使用してメールを送信すると、アプリケーションが非常に複雑になり、これまでテストしていません。

あなたの提案は何ですか?私は第一と第二の方法の利点を持つ方法が必要です。ユーザーがボタンをクリックすると、Gmailクライアントが表示され、クライアントの本体部分にHTMLコンテンツを表示できます。

任意の提案をいただければ幸いです。ありがとう

======================

更新

コード2に関する何かが間違っています。コードは次のようになります。

String html = "<!DOCTYPE html><html><body><a href=\"http://www.w3schools.com\" target=\"_blank\">Visit W3Schools.com!</a>" + "<p>If you set the target attribute to \"_blank\", the link will open in a new browser window/tab.</p></body></html>";
Intent send = new Intent(Intent.ACTION_SENDTO);
String uriText = "mailto:MY EMAIL ADDRESS" + "?subject=subject here" + "&body=" + Html.fromHtml(html);
uriText = uriText.replace(" ", "%20");
Uri uri = Uri.parse(uriText);
send.setData(uri);
startActivity(Intent.createChooser(send, "Send mail..."));

enter image description here

17
Hesam

次のことを試してください-

Intent shareIntent = new Intent(Intent.ACTION_SENDTO,Uri.parse("mailto:"));
shareIntent.putExtra(Intent.EXTRA_TEXT,Html.fromHtml(body));
shareIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
startActivity(shareIntent);

これは、電子メールアプリケーションのみを表示します。

5
Lee

電子メールアプリケーションのみを取得するには、Intent.setType( "message/rfc822")を使用します

2
pareshgoel

インテントを処理するアプリケーションを1つだけにする場合は、Intent.createChooser()を削除する必要があります。代わりに、startActivity()を使用します--->デフォルトの電子メールクライアントを使用してメールを送信します。設定されていない場合は、そうするように求められます。 ..tatはいつでも変更できます

2
user987171

このコードを試してください:Facebookなどではなく、電子メールプロバイダーのみが選択されます。

 String body="<!DOCTYPE html><html><body><a href=\"http://www.w3schools.com\" target=\"_blank\">Visit W3Schools.com!</a>" +
                      "<p>If you set the target attribute to \"_blank\", the link will open in a new browser window/tab.</p></body></html>";
            final Intent emailIntent = new Intent(Android.content.Intent.ACTION_SEND);
            emailIntent.setType("text/html");           
            emailIntent.putExtra(Android.content.Intent.EXTRA_SUBJECT, subject);    
            emailIntent.putExtra(Android.content.Intent.EXTRA_TEXT, Html.fromHtml(body));
            startActivity(Intent.createChooser(emailIntent, "Email:"));
2
Manikandan