Groups | Blog | Home
all groups > dotnet sdk > february 2007 >

dotnet sdk : MailMessage.AlternateViews.Add() - 2 problems


David Thielen
2/10/2007 4:38:00 PM
Hi;

First problem - this works:
// MemoryStream html ... is created and is 11004 bytes long, buffer is 16K
string htmlMsg = enc.GetString((html.GetReport()).GetBuffer(), 0,
(int)html.GetReport().Length);
htmlMsg = htmlMsg.Substring(3);
MailMessage mail = new MailMessage(from, to, subject, txtMsg);
mail.AlternateViews.Add(new AlternateView(new
MemoryStream(enc.GetBytes(htmlMsg)), MediaTypeNames.Text.Html));

This does not:
// MemoryStream html ... is created and is 11004 bytes long, buffer is 16K
MailMessage mail = new MailMessage(from, to, subject, txtMsg);
mail.AlternateViews.Add(new AlternateView(html.GetReport(),
MediaTypeNames.Text.Html));

Why does the second approach fail?

Problem two - if I do not remove the first 3 bytes of the html text - the
signature that is inserted at the begining of html files, then the mail
message will have ??? as it's first line.

Why does it not recognize this?

--
thanks - dave
david_at_windward_dot_net
http://www.windwardreports.com

Cubicle Wars - http://www.windwardreports.com/film.htm

wawang NO[at]SPAM online.microsoft.com
2/12/2007 6:04:30 AM
Hi Dave,

This issue seems related to how your "html.GetReport()" returns the Stream.

Would you please describe more about the GetReport() method? For example,
if you're opening a UTF-8 encoded file with BOM (byte order mark:
http://unicode.org/unicode/faq/utf_bom.html#22), the first three bytes are
EF BB BF. The correct way to read such file is to read it as UTF-8 encoded
text file instead of binary.

Please also note that files created using default StreamWriter settings
will have this BOM in the file.
http://msdn2.microsoft.com/en-us/library/system.io.streamwriter.aspx



Sincerely,
Walter Wang (wawang@online.microsoft.com, remove 'online.')
Microsoft Online Community Support

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications. If you are using Outlook Express, please make sure you clear the
check box "Tools/Options/Read: Get 300 headers at a time" to see your reply
promptly.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================

This posting is provided "AS IS" with no warranties, and confers no rights.
David Thielen
2/12/2007 1:50:02 PM
Yes, it is a MemoryStream that contains a byte[] that is UTF-8. What should I
do different?

--
thanks - dave
david_at_windward_dot_net
http://www.windwardreports.com

Cubicle Wars - http://www.windwardreports.com/film.htm




[quoted text, click to view]
wawang NO[at]SPAM online.microsoft.com
2/13/2007 2:49:05 AM
My suggestion is not to read the UTF-8 file (with BOM) into MemoryStream
directly, you should use a StreamReader with Encoding.UTF8 to read it then
pass the StreamReader.BaseStream to AlternateView's constructor:

using (FileStream fs = new FileStream(@"c:\temp\1.txt", FileMode.Create,
FileAccess.Write))
{
using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8))
{
sw.Write("<h1>hello</h1>");
}
}

// the file will have UTF-8 BOM

using (FileStream fs = new FileStream(@"c:\temp\1.txt", FileMode.Open,
FileAccess.Read))
{
using (StreamReader sr = new StreamReader(fs, Encoding.UTF8))
{
MailMessage mail = new MailMessage();
mail.From = new MailAddress(...);
mail.To.Add(...);
mail.Subject = "Test AlternateView";
mail.Body = "hello";

mail.AlternateViews.Add(new AlternateView(sr.BaseStream,
MediaTypeNames.Text.Html));

SmtpClient smtp = new SmtpClient(...);
// smtp.Credentials = ...
smtp.Send(mail);
}
}


Regards,
Walter Wang (wawang@online.microsoft.com, remove 'online.')
Microsoft Online Community Support

==================================================
When responding to posts, please "Reply to Group" via your newsreader so
that others may learn and benefit from your issue.
==================================================

This posting is provided "AS IS" with no warranties, and confers no rights.
David Thielen
2/20/2007 7:44:05 PM
great approach - thanks - dave

--
thanks - dave
david_at_windward_dot_net
http://www.windwardreports.com

Cubicle Wars - http://www.windwardreports.com/film.htm




[quoted text, click to view]
AddThis Social Bookmark Button