2012-07-12 30 views
17

Tôi muốn gửi email thông qua đơn đăng ký của mình. Tôi cần gửi email dựa trên HTML chỉ qua G-Mail. Tôi tìm thấy các giải pháp sau đây mà mỗi người trong số họ có ưu và khuyết điểm.Android, Cách gửi email HTML và buộc Android gửi qua G-Mail chứ không phải các ứng dụng khác?

1) Sử dụng Intent (Intent.ACTION_SEND). Đây là cách rất đơn giản và tôi có thể thấy cơ thể của mình ở định dạng HTML nhưng vấn đề là khi tôi nhấp vào nút "Gửi email", rất nhiều ứng dụng như Facebook và Google+ bật lên vô ích và tôi không nên hiển thị nó trong danh sách đó . Đây là mã của nó:

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) Sử dụng Intent (Intent.ACTION_SENDTO). Bằng cách này, lọc các ứng dụng vô ích và chỉ cho tôi các ứng dụng thư khách. Nhưng nó không hiển thị email của tôi ở định dạng HTML trong ứng dụng khách gmail. Khi tôi gửi email, một số khách hàng hiển thị nội dung ở định dạng HTML trong khi những người khác không xác định HTML và liên kết của tôi hoạt động giống như văn bản thuần túy. Mã này cũng giống như:

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) Gửi mail bằng cách sử JavaMail API mà thêm rất nhiều phức tạp cho ứng dụng và tôi đã không kiểm tra nó cho đến nay.

Đề xuất của bạn là gì? Tôi cần một cách để có lợi thế về cách thứ nhất và thứ hai. Tôi cần khi người dùng nhấp vào nút nó cho thấy khách hàng Gmail và tôi có thể hiển thị cho anh ta/cô ấy nội dung html trong phần cơ thể của khách hàng.

mọi đề xuất sẽ được đánh giá cao. Cảm ơn

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

Cập nhật

Something về mã 2 là sai. Mã này là như thế này:

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)? Nó có hoạt động không? – Merve

+0

Như bạn có thể thấy trong ảnh chụp màn hình cuối cùng của tôi, nó xóa tất cả các thẻ HTML nhưng liên kết (dòng đầu tiên) được hiển thị dưới dạng văn bản thuần túy. so sánh nó với hình ảnh thứ hai xin vui lòng. Cảm ơn. – Hesam

+0

@Hesam Tôi không thể đạt được giải nhất.Tôi đã thử dán mã hoàn chỉnh của bạn (mã đầu tiên) và các liên kết được hiển thị dưới dạng văn bản thuần túy. Có suy nghĩ gì không? – SKP

Trả lời

2

Nếu bạn muốn chỉ có một ứng dụng để xử lý các ý định của bạn thì bạn cần phải loại bỏ Intent.createChooser(), thay vì sử dụng JST startActivity() ---> nó gửi qua đường bưu điện sử dụng ứng dụng email mặc định, nếu không được thiết lập sau đó sẽ yêu cầu để làm như vậy ... tat có thể thay đổi bất cứ lúc nào

+0

Cảm ơn, tôi đã thử đề xuất của bạn. Mặc dù nó mở ứng dụng thư khách, nhưng nó không có dữ liệu được gán của tôi như là cơ thể. cả hai đều sạch sẽ. – Hesam

2

Hãy thử mã này: Nó sẽ chỉ lựa chọn các nhà cung cấp email, không facebook vv

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

Cảm ơn Manikandan thân yêu, tôi đã kiểm tra mã của bạn. Mặc dù nó đã loại bỏ rất nhiều ứng dụng vô dụng, như bạn đã nói, nó vẫn có Bluetooth, Drive, Skype và Wi-Fi Direct trong danh sách. Cảm ơn đề xuất của bạn. – Hesam

5

Hãy thử như sau -

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

này sẽ chỉ ứng dụng email hiện tại.

+0

Tôi thấy giải pháp này không hoạt động, mặc dù nó lọc các ứng dụng chỉ với các loại email, nhưng nó kết thúc với cùng một vấn đề ban đầu được nêu, Gmail không định dạng đúng văn bản thành html. – gnichola

2

Để có được chỉ các ứng dụng thư điện tử, sử dụng Intent.setType ("Thông điệp/RFC822")

Các vấn đề liên quan