webForumDet fria alternativet

Html-mail encoding(?)

.NET

32 svar · 1 028 visningar · startad av Brimba

Medlem sedan dec. 19995 874 inlägg
Frågan#1

Någon som har skickat HTML mail med .net? När jag sätter mail.body till htmlkod så ser det perfekt ut, men mailet som kommer har tappat massa tecken, och det är olika om jag kollar i outlook express eller IMail (webmail). Jag har provat att sätta encoding iso-8859-1 och utf-8 på både mailet, streamingen samt html-sidan som jag hämtar från nätet. Någon som har varit ute för samma problem, eller tips på hur tusan man felsöker när det som ligger i mailobjektet är rätt och efter SmtpMail.Send(mail) så ändras uppenbarligen något, alternativt är det så att htmlsidan tolkas fel, men varför i så fall?

Jag har provat att använda både HttpWebRequest och WebClient för att hämta sidan, men det gör ingen skillnad.

Medlem sedan apr. 20012 266 inlägg
#2

Har inte varit med om samma problem men har ett förslag, du kan testa att försöka köra samma encoding för sidan som för mailet, om du märker om enoding sp att det på sidan t.ex var UTF-8 och sedan när du mailar iväg det säger du att det är iso-8859-1 då kan det bli fel.

Medlem sedan aug. 20003 575 inlägg
#3

Om den skickas utan encoding alls som vissa gör så måste det vara iso-8859-1 som tar emot det om det är åäö med. Annars försvinner dessa.

// Redigering

Du kan inte skicka mailet inkluderat mailhuvudet.

Medlem sedan dec. 19995 874 inlägg
#4

Jag har kört samma encoding rätt igenom, både på sidan och encodingen på streamReadern samt encoding på mailMessage.

Exempel:

[b]--asp[/b]
Response.CodePage = "1252"
Response.CharSet = "iso-8859-1"

[b]--stream[/b]
stream = new StreamReader(oResponse.GetResponseStream(),System.Text.Encoding.GetEncoding("iso-8859-1"));

[b]--mail[/b]
mail.BodyEncoding = System.Text.Encoding.GetEncoding("iso-8859-1");
Medlem sedan dec. 19995 874 inlägg
#5

Jag har inga problem med åäö, de syns perfekt, problemet är att tecken försvinner. Det känns ibland som att streamreadern inte hinner läsa all information från sidan, men jag hittar ingen inställning för om den skall kräva att läsa klart som det finns på xml.

Jag använder nedanstående för att läsa strömmen till en sträng.

string sBody = stream.ReadToEnd();
Medlem sedan apr. 20012 266 inlägg
#6

Du kanske kan testa och läsa den till en memorystream och sedan därefter vidare ner i mailet.

Medlem sedan aug. 20003 575 inlägg
#7

Skicka mailet och mailhuvudet i oformaterat

Medlem sedan dec. 19995 874 inlägg
#8

Jag testade nu att skicka mailet oformaterat och därmed skickas det som text.

När jag valde att inte sätta någon encoding på streamern så kom alla tecken med förutom att åäö inte fanns. Men den tog i alla fall inte bort något förutom det.

Medlem sedan aug. 20003 575 inlägg
#9

Vad knepigt.
Testa att använda TcpClient() istället när du skall ta emot.

Medlem sedan dec. 19995 874 inlägg
#10

FEL!

Det försvann visst tecken, men nu inte på samma ställe.
Det verkar som att den läser ett visst antal tecken och sedan missbedömer den var den skall börja nästa gång.

Medlem sedan aug. 20003 575 inlägg
#11

Hur gör du från första början ?
Förklara tills du kommer till att du skall ta emot mailet.

Medlem sedan dec. 19995 874 inlägg
#12
HttpWebRequest oReq = (HttpWebRequest)WebRequest.Create("http://localhost/mp/mypage.asp");
WebResponse oResponse = oReq.GetResponse();
stream = new StreamReader(oResponse.GetResponseStream(),System.Text.Encoding.UTF8);
string sBody = stream.ReadToEnd();
stream.Close();

Det är sBody jag skickar in i mailet sedan.

Medlem sedan dec. 19995 874 inlägg
#13

Och sBody innehåller all information, men efter att jag skickat det så innehåller det alltså inte all information.

Medlem sedan aug. 20003 575 inlägg
#14

Aha,
Men då behöver det väl inte vara fel på själva mailet utan HttpWebRequest. (Kanske det ni kommit fram till)

Medlem sedan aug. 20003 575 inlägg
#15

Testa att ta bort Encodingen på alla ställen utom där du tar emot det från HttpRequest

Medlem sedan dec. 19995 874 inlägg
#16

Varför skulle det vara fel på HttpWebRequest?

Såhär är det:

MailMessage mail = new MailMessage();
mail.To = "to@me.se";
mail.From = "to@me.se";
mail.Subject = "subject!";
mail.Body = sBody;
			
SmtpMail.SmtpServer = "mail.domain.se";
SmtpMail.Send(mail);

När jag debuggar och kollar sBody så innehåller den all information som skall skickas, men när jag sedan läser mailet som text (eftersom jag inte satt bodyFormat till HTML) så ser jag att det saknas massa kod (det som fanns i sBody vid debuggningen). Så frågan är var problemet ligger, det verkar ju inte vara encoding eftersom det inte är problem med åäö eller så utan snarare att det försvinner massa kod. Det är inte bara sist utan det kan försvinna tecken mitt i koden osv, men det är alltid på samma ställe (dock olika ställen om man byter encoding).

Medlem sedan aug. 20003 575 inlägg
#17

Jo, men testa att inte sätt någon encoding på sidan. Eller när du skall skicka iväg det med MailMessage.

Medlem sedan dec. 19995 874 inlägg
#18

Nickemannen skrev:

Testa att ta bort Encodingen på alla ställen utom där du tar emot det från HttpRequest

och

Jo, men testa att inte sätt någon encoding på sidan. Eller när du skall skicka iväg det med MailMessage.

Ingen skillnad

Medlem sedan apr. 20012 266 inlägg
#19

skulle du kunna visa ett utdrag ur hur mailet ser ut när du får det samt hur ursprungstexten är så kanske man kan komma fram till problemet.

Medlem sedan dec. 19995 874 inlägg
#20

Jag skall se om problemet består med med dummykod.

273 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)