HTML Email style not working in Outlook - html

I have a css property inserted inline to an HTML Email text-transform:lowercase to a span element. when I send the email it's shows the fonts are in lowercase except outlook. Seems the font styles are not applied in outlook. What is the correct way to insert the style inline which works for outlook as well?
<a><span style="text-transform:lowercase;letter-spacing:4px;">shop now</span></a>
Outlook
Other Email Clients

Since Outlook 2007 Outlook has used Word for its HTML formatting which means that Outlook doesn't allow all standard CSS. One example is text-transform. Someone else posted a link to CampaignMonitor.com which states that text-transform is supported by Outlook, but that is not the case. You can see for yourself on Microsoft's website under the section "Unsupported Cascading Style Sheet Properties Compared with Cascading Style Sheets, Level 1": https://msdn.microsoft.com/en-us/library/aa338201.aspx

Generally Outlook supports text-transform as long as you put it in the right tag. That empty <a> tag could be throwing off outlook.
Try changing your code to this:
<span style="text-transform:lowercase;letter-spacing:4px;">shop now</span>
You can also place the inline styles right in the <a> tag and lose the <span> all together:
shop now

You could try to change the value to lowercase before putting it in the email perhaps like this:
var MyDiv1 = document.getElementById('text');
var MyDiv2 = document.getElementById('second');
var res = MyDiv1.innerHTML.toLowerCase();
MyDiv2.innerHTML = 'changed ' + MyDiv1.innerHTML + ' to ' + res;
MyDiv1.innerHTML = 'Now you can use the variable `res` as a variable in the email';
<span id="text">SHOP NOW</span>
<br />
<span id="second"></span>

Related

Dt and dd inline not work in outlook email body

I want create outlook email by using the html format, but some of the html style can't work in outlook email.
I have a test code like below:
<dl><dt style="float: left">ColumnA: </dt><dd style="padding-left:30px">sahjdhsj; kahdjkshakjdhkasjhdkjshakjhdska; sa dsah ashkdj sadksajhd dksad asdhsahdsahodsad ashkjdhsa asd ipientList, string originalSubject, string recallLink</dd><dt style="float: left">ColumnB:</dt><dd style="Margin-left:30px">lack hot drink gjg daskahdkjahd asd gkashdksahdsakjhdsadsdsad</dd></dl>
When I test it in https://www.w3schools.com/html/tryit.asp?filename=tryhtml_intro, it can work as expected:
P1
but when I use it as the outlook email body, it will show like:
P2
Anyone know what caused the different behavior in outlook email? I just want it show as P1
Outlook uses Word as an email editor. Unfortunately not all CSS properties are supported in Word. For example, the float property is treated like unknown in Word. You can read about supported and unsupported HTML elements, attributes, and cascading style sheets properties in the Word HTML and CSS Rendering Capabilities in Outlook article.
The only way to achieve that layout in Outlook for Windows is to use tables. It recognises dt and dl (https://www.caniemail.com/features/html-lists/) but not changes to display modes or floats (https://www.caniemail.com/features/css-display/ and https://www.caniemail.com/features/css-float/). Therefore, they will always both be stuck in their default display:block modes, that take the whole line.
You could use different code for Outlook on Windows by using their conditional code.

Formatting issues while forwarding html generated email in Outlook

In python, I have a piece of code, something similar to this.
def send_email_report():
message = {Some HTML Syntax with inline styles for building a form}
my_email = MIMEText(message, "html")
my_email["From"] = "XXXX#domain.com"
my_email["To"] = "YYYY#domain.com"
my_email["Subject"] = "Topic : Report Generation"
sender = "xxxx#domain.com"
receivers = ["yyyy#domain.com"]
with SMTP("localhost") as smtp:
smtp.login(sender, "Email-Password")
smtp.sendmail(sender, receivers, my_email.as_string())
I am able to receive the smtp-email in outlook. The formatting looks great, as all the < img > tags are generated perfectly and spacing is awesome.
But when I try to forward the email to another person, the alignments get messed up. Since html tag is built inside the message, only inline CSS is applied.
A few properties such as font color are retained, while majority of the properties like float:right, width of the whole container are not considered. At first, I thought it was because I have mentioned attributes such as width in px so I changed from px to % and rem, and added ! important as well, but of no use.
I also have an idea of converting the entire html assigned in message variable to a image and email that(since forwarding an html form as an image will not affect the styling), but I am not sure if it is feasible.
And also I don't want it as an attachment, I can have an html form or the image of the html form in email body. That's fine.
Any suggestions on how to maintain the style property while forwarding the generated email?
Any Help is appreciated, Thanks in advance.

Overwriting child link style properties inline

I'm making an email template to be used with AWS. In the body text of the email we add a {username} variable which gets replaced by the user's actual username. In our case the username will be an email address and when Amazon works their magic it gets replaced with a mailto: link
e.g:
<p>{username}</p>
will become
<p>example#domain.com</p>
I want to be able to change the style of the link, but don't have access to the format of the <a> tag itself. Also because email clients don't widely recognise style tags I can't use CSS so all solutions must be inline.
I've tried:
<p style="color: #fff !important">example#domain.com</p>
and that has no effect.
Any ideas very welcome!
Fiddle for the sake of testing.

Email html font size in Outlook

<div style="font-family: Arial; font-size: 10px;">TEST</div>
I'm providing the above source as an html email to Outlook 2007, and it's rendering 7.5px font. Any ideas of what hack I need to make this work?
Edit: I'm setting the mail contents with body, like:
new MailMessage
{
IsBodyHtml = true,
Body = "<div style=\"font-family: Arial; font-size: 10px;\">TEST</div>"
};
I don't believe this is related though. Note that if I view source in the generated email the html is as expected. The problem seems to be only that outlook doesn't render it correctly for whatever reason.
The issue is that most email programs understand very little, if any, CSS. Try specifying the font details using the old, non-CSS methods. This method is deprecated, but unfortunately it is what we have to do to style the emails. It also prevents exact sizing of fonts.
new MailMessage
{
IsBodyHtml = true,
Body = "<font face=\"Arial\" size=\"1\">TEST</font>"
};
A few suggestions:
Use the HTMLBody property instead of Body when creating HTML emails.
Do your quotes need to be escaped like that? I've never seen that before, but I'm used to VB where literal quotes are doubled.
Check your read settings, you may be reading emails as plain text.

How to disable an email link?

I am using Ruby on Rails 3 and I would like to disable an email address link in a HTML email.
For example, if in an email I send some raw HTML like
Hi, you email is: <br/>
test#email.com
Gmail autodetects that this is an email address and changes it to
Hi, you email is: <br/>
<a target="_blank" href="mailto:test#email.com">test#email.com</a>
I would like to have this output
# Text without the 'mailto:' link
Hi, you email is:
test#email.com
How can I do that?
I have a more natural suggestion: wrap the email/url in an anchor hyperlink.
<a name="myname">test#email.com</a>
Since the text is already wrapped in a hyperlink, Gmail gives up and leave it alone. :)
(Note: also worked for Apple mail client.)
By 2021, the best for me would be:
<a href='#' style='text-decoration: none; color:#000000' name='myname'>x#somemail.com</a>
Explanation
After trying different services like Gmail, Outlook 365, Mailinator, and MyTrashMail, the results are:
• <a> - wrapping the email into anchor is essential, as raugfer pointed
• href='#' is necessary for Outlook. Linking to a fake anchor disables following the link.
• text-decoration: none, color:#000000 removes underline and changes color from blue link color to natural text color. For those who want not only to disable the link but make its appearance as usual text.
• name='myname' wouldn't harm, however, I haven't noticed its necessity.
Any javascript should be avoided, it won't pass Gmail. E.g. onClick="return false;", <script>...</script>.
If you want to change the cursor to default, cursor: default or cursor: auto won't help. For Gmail only, do without href='#'
Using <span> or <myspan> works for Gmail as Prince Mishra stated, but it doesn't help in all the services (in Outlook, for instance).
Even I had the same problem. Gmail would detect and convert mail addresses and ip addresses to links. I used string.replace to enclose dots (.) and # in blocks. And that works fine for me. sample python code looks like.
text = myname#gmail.com
chars = ['.','#']
encloseIn = 'span'
for char in chars:
text = string.replace(text, char, '<'+encloseIn+'>'+char+'</'+encloseIn+'>')
This is what worked for me in Laravel.
<a style="pointer-events: none; color: inherit">
{{$user->email}}
</a>
You can try
Hi, you email is:<br />
test#email.com
Reading all answers, I tried this in a Joomla article and it worked:
<p><strong>This is the email address: </strong><a name="whatever">youremail&#64domain.com</a></p>
Result:
This is the email address: youremail&#64domain.com
Worked on Chrome and Firefox.
Late reply but i think I have found a way to get over this auto linking issue.
The easiest and fastest way is to add a zero width non joiner between each alphabets. Now that sounded hard so I developed a small script that made things easy for me. Run the code below, add email address (paste or type) and it adds the required code around the email address. Paste the result in your email.
$('#userInput').keyup(function() {
var s = $(this).val().trim();
var text = "";
for ( var i = 0; i < s.length; i++ )
{
text += s[i]+'‌' ;
}
$('p').text( text );
});
#userInput{max-width:400px;width:100%;padding:10px 5px;}
*{outline:none;}
p,#userInput{font-family: 'Roboto', sans-serif;}
p{word-break:break-all;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
<input type="text" id="userInput" />
<p></p>
You just need to add the "zero width space" character, his code in HTML is:
​
This code adds a space in the string where you need.
For a respectable solution you need to complement this method with a <nobr> tag, because with this tag you can prevent from breaking to the next line.
The only way to get around this is to convert the email address into an image and include that in the email. Of course this means the user might choose to not download the image, which would mean they won't get the email address either.
What it really comes down to is that you can't control what Gmail or any other email client does once it receives an email, so there isn't another way around this. It's Gmail's, or any other email client's, choice to do what they want with emails, and that includes hyper-linking email addresses.
If you are very adamant about not converting emails into hyperlinks you can try to do other things to conceal the fact that it's an email, like writing it out instead:
Hi, your email is:
test at email dot com
Of course this is probably more confusing. If I were you, I would simply settle for the fact that Gmail will hyper-link your emails.