How? Send Same Email as HTML *or* Plain Text

J

J. Alan Rueckgauer

Hello. I'm looking for a simple way to do the following:

We have a database that serves-up content to a website. Some of those items
are events, some are news articles. They're stored in the DB as formatted
HTML so ASP just drops them right into a page shell.

Now, we want to send out a newsletter email containing some of those items.
No problem sending as HTML. However, some of the members want just plain
text. Is there some magic method in CDO that can automatically convert HTML
to plain text? Or, is there some existing VBScript code out there that can
do this?

BTW, the environment is IIS 5.x (Windows 2000), Classic ASP, and CDO.

Thanks...
 
A

Aaron [SQL Server MVP]

I don't think any company knows how to do this right. All the crap I get
looks horrible (Outlook is set to force all content to plain text).

I think the cleanest way to do it would be to store the content twice, or
store plain text and apply HTML to it after the fact.
 
S

StephenMcC

If ur using CDO-NTS maybe have a look at HTMLText/Text properties of the Message object, using which depending on how recipient wishes to receive emails!?
 
A

Aaron [SQL Server MVP]

If ur using CDO-NTS maybe have a look at HTMLText/Text properties of the
Message object, using which depending on how recipient wishes to receive
emails!?

Yes, CDO can use either plain text or HTML, and can even send both.
However, the plain text readers don't want to be bothered with getting both.
And I suspect the problem isn't a technical one in sending the mail in the
correct format... it's making the HTML content look good in plain text (or
vice versa).
 
J

J. Alan Rueckgauer

Aaron said:
I don't think any company knows how to do this right. All the crap I get
looks horrible (Outlook is set to force all content to plain text).

I think the cleanest way to do it would be to store the content twice, or
store plain text and apply HTML to it after the fact.
[snip]

Aaron --

The database contains just about all of the site's content, and they won't
go for having to maintain two separate versions of everything. (The end
users have enough trouble fathoming how a website works as it is.) OTOH, I
don't particularly relish writing a script from scratch to
search-and-destroy the HTML tags and preserve paragraphs. Do you happen to
know of one that's already out there that I can grab?

Thanks,
Alan
 
J

J. Alan Rueckgauer

StephenMcC said:
If ur using CDO-NTS maybe have a look at HTMLText/Text properties of the
Message object, using which depending on how recipient wishes to receive
emails!?[snip]

The problem is creating the .TextBody. The source text is stored as HTML,
so wrapping <html><body> around it and plopping it in .HtmlBody is a
no-brainer. You can't just reassign the string for .HtmlBody to .TextBody:
it doesn't remove the HTML tags, so you get a text message that looks like
"<html><body><h1>This Week's News</h1></body></html>" which is absolutely
not what is wanted.
 
R

Roland Hall

in message

: : > If ur using CDO-NTS maybe have a look at HTMLText/Text properties of the
: Message object, using which depending on how recipient wishes to receive
: emails!?
: >
: [snip]
:
: The problem is creating the .TextBody. The source text is stored as HTML,
: so wrapping <html><body> around it and plopping it in .HtmlBody is a
: no-brainer. You can't just reassign the string for .HtmlBody to
..TextBody:
: it doesn't remove the HTML tags, so you get a text message that looks like
: "<html><body><h1>This Week's News</h1></body></html>" which is absolutely
: not what is wanted.

You would probably need to take 3 passes at it or have a more complex
Regular Expression but you could replace </p> with 2 vbCrLf, <br> or <br />
with 1 vbCrLf and then use a regexp to remove all HTML tags. Actually any
block elements should be replaced with vbCrLf.

Something like this...

<%@ Language=VBScript %>
<%
Option Explicit
Response.Buffer = True

' converts HTML email to plain text

dim re, str, r
str = lcase("<HTML><HEAD><TITLE></TITLE></HEAD><BODY><p>Heading</p>line 1<br
/>line 2<br />line 3</BODY></HTML>")
str = replace(str,"<br />",vbCrLf)
str = replace(str,"</p>",vbCrLf & vbCrLf)
set re = new RegExp
re.Pattern = "<[^>]*>"
re.Global = true
re.IgnoreCase = true
r = re.replace(str,"")
Response.Write(r)
set re = nothing
%>

You can see it here but you need to view the source to see how it would turn
out in an email.
http://kiddanger.com/lab/htmlx.asp

FYI.. My email is set to plain text. I get plain text but if it is HTML
formatted, then the HTML version is an attachment. I never see the HTML
code in my plain text message body.

HTH...

--
Roland Hall
/* This information is distributed in the hope that it will be useful, but
without any warranty; without even the implied warranty of merchantability
or fitness for a particular purpose. */
Technet Script Center - http://www.microsoft.com/technet/scriptcenter/
WSH 5.6 Documentation - http://msdn.microsoft.com/downloads/list/webdev.asp
MSDN Library - http://msdn.microsoft.com/library/default.asp
 
A

Aaron [SQL Server MVP]

I think you might need some conditionals in there, e.g. you might not want
to discard the HTML tag completely, for something like this:

<a href=http://www.mysite.com/>click here!</a>
 
N

Nick

I am working on a vbscript subroutine that does just this. I am not
using CDO, so that would be something of a hack for me to use.

I don't think it is enough to remove the tags, and probably if the CDO
thing does work, it removes more than just the tags.

You should also remove the entire contents of the header, and probably
remove much of the white space you get after removing tags.
 
D

Devdex Developer

CDO have such option which give u a choice to send either Text base or
html contents.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,045
Latest member
DRCM

Latest Threads

Top