2012-07-12 9 views
17

Desidero inviare e-mail tramite la mia domanda. Ho bisogno di inviare email basate su HTML solo tramite G-Mail. Ho trovato le seguenti soluzioni che ognuna di esse ha vantaggi e svantaggi.Android, Come inviare e-mail HTML e forzare Android a inviarlo tramite G-Mail non altre applicazioni?

1) Utilizzo di Intento (Intent.ACTION_SEND). Questo è un modo molto semplice e posso vedere il mio corpo in formato HTML ma il problema è quando clicco sul pulsante "Invia email", così tante applicazioni come Facebook e Google+ appaiono inutili e non dovrei mostrarlo in quella lista . Questo è il suo codice:

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) Uso di intenti (Intent.ACTION_SENDTO). In questo modo filtri le applicazioni inutili e mi mostra solo i client di posta. Ma non mostra la mia email in formato HTML nel client gmail. Quando invio l'e-mail alcuni client mostrano il corpo in formato HTML mentre altri non identificano l'HTML e il mio collegamento si comporta come testo normale. Questo codice è simile:

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) Invio di posta tramite JavaMail API che aggiunge così tanto la complessità dell'applicazione e non ho la prova finora.

Qual è il tuo suggerimento? Ho bisogno di un modo per avere vantaggi di primo e secondo modo. Mi serve quando l'utente fa clic sul pulsante che mostra il client Gmail e posso mostrargli il contenuto html nella parte del corpo del client.

qualsiasi suggerimento sarebbe apprezzato. Grazie

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

Aggiornamento

Qualcosa su di codice 2 è sbagliato. Il codice è simile a questo:

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

+0

Html.fromHtml (html)? Funziona? – Merve

+0

Come puoi vedere nella mia ultima schermata, rimuove tutti i tag HTML ma il link (prima riga) viene visualizzato come testo normale. confrontalo con la seconda immagine per favore. Grazie. – Hesam

+0

@Hesam Non riesco a raggiungere il primo.Ho provato ad incollare il codice completo (1 °) e i collegamenti sono visualizzati come testo normale. qualche idea? – SKP

risposta

2

Se si desidera una sola applicazione per gestire il vostro intento, allora è necessario rimuovere Intent.createChooser(), piuttosto JST utilizzare startActivity() ---> it inviare la posta elettronica utilizzando il client di posta elettronica predefinito, se non impostato, vi chiederà di farlo ... tat può essere modificata in qualsiasi momento

+0

Grazie, ho provato il tuo suggerimento. Sebbene apra il client di posta, non ha i miei dati assegnati come per il corpo. entrambi sono puliti. – Hesam

2

provare questo codice: sarà selezionare solo provider di posta elettronica, non è facebook, ecc

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:")); 
+0

Grazie caro Manikandan, ho testato il tuo codice. Anche se ha rimosso così tante applicazioni inutili, come hai detto, ha ancora Bluetooth, Drive, Skype e Wi-Fi Direct nell'elenco. Grazie per il tuo suggerimento – Hesam

5

provare il seguente -

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); 

Questo sarà solo presenti applicazioni di posta elettronica.

+0

Ho trovato questa soluzione non funziona, anche se filtra le app solo per i tipi di email, finisce con lo stesso problema originariamente dichiarato, Gmail non formatta correttamente il testo in html. – gnichola

2

di ottenere solo applicazioni e-mail, utilizzare Intent.setType ("message/rfc822")

Problemi correlati