webForumDet fria alternativet

Html-mail encoding(?)

32 svar · 1 028 visningar · startad av Brimba

BrimbaMedlem sedan dec. 19995 875 inlägg
#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.

renholmMedlem 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.

NickemannenMedlem 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.

BrimbaMedlem sedan dec. 19995 875 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");
BrimbaMedlem sedan dec. 19995 875 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();
renholmMedlem 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.

NickemannenMedlem sedan aug. 20003 575 inlägg
#7

Skicka mailet och mailhuvudet i oformaterat

BrimbaMedlem sedan dec. 19995 875 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.

NickemannenMedlem sedan aug. 20003 575 inlägg
#9

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

BrimbaMedlem sedan dec. 19995 875 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.

NickemannenMedlem 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.

BrimbaMedlem sedan dec. 19995 875 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.

BrimbaMedlem sedan dec. 19995 875 inlägg
#13

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

NickemannenMedlem 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)

NickemannenMedlem 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

BrimbaMedlem sedan dec. 19995 875 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).

NickemannenMedlem 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.

BrimbaMedlem sedan dec. 19995 875 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

renholmMedlem 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.

BrimbaMedlem sedan dec. 19995 875 inlägg
#20

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

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)