sending html mail if app allows - android

I want to send a html mail from my application.
I know that not all mail clients allow html tags.
But I found the constant Intent.EXTRA_HTML_TEXT in the API (http://developer.android.com/reference/android/content/Intent.html#EXTRA_HTML_TEXT).
My code looks like this, but it shows always just the text and not the html formatted text whatever mail client I use:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, "Hello World");
intent.putExtra(Intent.EXTRA_HTML_TEXT, "<html><body><h1>Hello World</h1></body><html>");
intent.setType("text/html"); // intent.setType("plain/text");
startActivity(Intent.createChooser(intent, "Choose Email Client:"));
So where is the mistake?

Sorry, not a positive answer because it doesn't seem to work, at least not in a way that's really universal and reliable. Some mailers are happy with this:
String body = "<html>something</html>";
intent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(body));
Note that you don't need the new EXTRA_HTML_TEXT, it works with the older one as well. If this covers all you need then you might be OK. But if you also want to address many other possible intent receivers like Facebook, Skype or even apps like Drive or Keep, unfortunately, I couldn't find a perfect solution but I'd very much like to be proven wrong.
Basically, we have three different formats:
String body = "<html>something</html>";
Spanned html = Html.fromHtml(body);
String stripped = html.toString();
and two possible recipients:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
intent.putExtra(Intent.EXTRA_HTML_TEXT, ???);
intent.putExtra(Intent.EXTRA_TEXT, ???);
I tried all possible combinations but in any of those, there will be some well known and widely used app that doesn't want to play nicely. Either we get HTML tags embedded, or no formatting, or even no text at all...

Related

CSS not working while Sending HTML email via Intent in android

I want to send Html via mail app, problem is with CSS is not working when I am using Gmail to compose/send mail
And here is the intent spinet
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_SUBJECT, "Summary");
intent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml("<div style='background: red;'>TEST</div>"));
intent.putExtra(Intent.EXTRA_HTML_TEXT, "<div style='background: red;'>TEST</div>");
intent.setType("text/html");
startActivity(Intent.createChooser(intent, "Send mail"));
Even I applied inline CSS its not working, Can Any help what's wrong am I doing
Gmail cuts off the head, so the CSS gets lost. For HTML Emails, you should always use inline styles.
Edit:
The general rule to use inline styles is still true, but in your specific case, it seems to be an issue with sending a HTML Mail with an Intent. I found in another answer on SO, that this may isn't possible.

How to share a link which is not visible to user

In my android app i want to share a Link to my website using intent but i dont want it to be visible to other user
example i want to share "smoe website link"
But to user it should look like "Click me to see it".
I tried this but wasnt successfull it just shows the simple text and was not clickable
<string name="app_link">Click me!</string>
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra("PostID", postID);
intent.putExtra("UserID", userID);
intent.putExtra(android.content.Intent.EXTRA_TEXT,activity.getString(R.string.app_link);
activity.startActivity(Intent.createChooser(intent, "Share"));
Any help will be really appreciated.
What you want is not realistically possible right now.
EXTRA_TEXT must always be interpreted as plain text by the receiving app. You could try using EXTRA_HTML_TEXT which was added with API 16. But many apps don't support HTML and will simply use EXTRA_TEXT instead (or not show any text at all if you omit EXTRA_TEXT).

Android share Intent with clickable link

I have looked around the web but have yet to find a solution that fits my specific need. I am looking for a way to share information with a share intent that provides a clickable link, something like:
Check out this news article
via Jimmy's News App
I have successfully set up a share intent in my android app which looks like this:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject Text");
shareIntent.putExtra(Intent.EXTRA_TEXT, "Check out this news article" + "\n\n" + getResources().getText(R.string.shared_via));
shareIntent.setType("text/plain");
startActivity(Intent.createChooser(shareIntent, "Share this article with..."));
My string resource looks like this:
<string name="shared_via">via <a ref="http://google.com">Jimmy's News App</a></string>
The sharing functions as it should however when shared in an Email, Twitter, etc. the link is ignored and the tweet shows only plain text like this:
I tried playing around with the MIME type, but still no cigar. Is there anyway to get "Jimmy's News App" clickable when shared? I am more than greatful for any and all help and or tips.
Thanks in advance!
First, I wouldn't have expected your project to even build, as string resources do not support arbitrary HTML tags. The only documented ones are <b>, <i>, and <u>.
Second, even if it does support arbitrary HTML tags, you are converting it back from a Spanned (getText()) into a plain string, which will remove that formatting.
To overcome both problems, either move that string into Java (after all, it's not like you have i18n going, with hardcoded English elsewhere in your code snippet), or wrap the string content in a CDATA (while also fixing your broken HTML, to use href for the <a> attribute):
<string name="shared_via"><![CDATA[via Jimmy's News App]]></string>
At this point, if you look at your concatenated string, it should look like quasi-HTML source:
Check out this news article
via Jimmy's News App
Next, while you are sending over HTML, you are declaring it as plain text. Many apps will therefore treat it as plain text, and may do anything from ignoring the tag to showing the raw HTML. You are welcome to try text/html as a MIME type and see if you get better results.
Finally, there is no requirement that any app actually honor your links. ACTION_SEND is a request, not a command. There are no rules for how third-party apps use the HTML that you send over, and so you are going to get varying results from varying apps.

A simple HTML Anchor Link does not show-up as a link in a received email in gmail

Thanks in advance for your help.
I am developing an Android App that, as part of its core functionality, needs to send emails between users (peer-to-peer emails, not spam). These emails need to contain a link that will open the Android App upon a user-click
The problem I am having is: when I send these emails to gmail acounts, links appear as normal text rather than as links.
Here is my code
private void sendEmail(String recepientName, String recipientEmail) {
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
String aEmailList[] = { recipientEmail };
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, aEmailList);
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "My Title");
emailIntent.setType("text/html");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, Html.fromHtml(
"<!DOCTYPE html><html><body>" +
"<br>Dear " + recepientName + ",<br>" +
"Please <font>click here</font></body></html>"));
startActivityForResult(emailIntent, EMAIL_REQUEST);
}
What should I do to make these link work in received emailsin gmail ?
Again Thanks
What I discovered was that somehow (probably with great talent) I got into Google's black list.
this means that Google stripped the link out of my code and the users saw it as regular text
HERE IS THE REASONING:
My link looked like this: myAppName://parameter1/parameter2/Parameter3
The prefix ("myAppName://") allows Android to identify my App and launch it as you click on the link.
HOWEVER:
When this link was sent to a gmail account, Google's servers were able to identify that this was an invalid link (pretty cool that they check that ha!!) and they stripped the link out.
The solution was to use a real URL for App identification and Launch:
Something like: http://myhost.com/parameter1/parameter2/Parameter3
Hope that helps
android:scheme="http" and the appropriate android:host

How to send HTML email

i found a way to send plain text email using intent:
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("text/plain");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new
String[]{"example#mail.com"});
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Test");
But I need to send HTML formatted text.
Trying to setType("text/html") doesn't work.
You can pass Spanned text in your extra. To ensure that the intent resolves only to activities that handle email (e.g. Gmail and Email apps), you can use ACTION_SENDTO with a Uri beginning with the mailto scheme. This will also work if you don't know the recipient beforehand:
final Intent shareIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"));
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "The Subject");
shareIntent.putExtra(
Intent.EXTRA_TEXT,
Html.fromHtml(new StringBuilder()
.append("<p><b>Some Content</b></p>")
.append("<small><p>More content</p></small>")
.toString())
);
Been trying to send html via gmail app for a while, so decided to leave some insight on what I found, just in case someone else is having similar issues.
Seems like no matter what I did, I couldn't get the html to have bold text in it.
Then I've tried switching to outlook client and to my surprise it was working just fine.
Html markup was also working on other older devices, but not on mine (galaxy s7 API 26), so I figured, that gmail app seems to have dropped support for html syntax that comes from intent or maybe now you're required to provide it in some very specific way which is not clearly documented.
Last gmail version that worked for me was version 6.9.25... on Nexus 5X API 25 emulator (Nougat)
And it stopped working starting version 7.5.21... On Nexus 5x API 26 emulator (Oreo)
This was very helpful to me for the HTML, but the ACTION_SENDTO didn't quite work for me as is - I got an "action not supported" message. I found a variant here which does:
http://www.coderanch.com/t/520651/Android/Mobile/no-application-perform-action-when
And here's my code which combines the two together:
String mailId="yourmail#gmail.com";
Intent emailIntent = new Intent(Intent.ACTION_SENDTO,
Uri.fromParts("mailto",mailId, null));
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject text here");
// you can use simple text like this
// emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,"Body text here");
// or get fancy with HTML like this
emailIntent.putExtra(
Intent.EXTRA_TEXT,
Html.fromHtml(new StringBuilder()
.append("<p><b>Some Content</b></p>")
.append("<a>http://www.google.com</a>")
.append("<small><p>More content</p></small>")
.toString())
);
startActivity(Intent.createChooser(emailIntent, "Send email..."));
I haven't (yet) started Android development, but the documentation for the intent says that if you use EXTRA_TEXT, the MIME type should be text/plain. Seems like if you want to see HTML, you'd have to use EXTRA_STREAM instead...
You must to change "EXTRA_TEXT" for "EXTRA_HTML_TEXT"
https://developer.android.com/reference/android/content/Intent.html#EXTRA_HTML_TEXT
What about just trying to add some html in the text area?
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "<strong>Test</strong>");

Categories

Resources