webForumDet fria alternativet

MailMessage.Subject som UTF-8

.NETur .NET

1 svar · 989 visningar · startad av Dino

DinoMedlem sedan sep. 20011 914 inlägg
#1

När jag genom System.Net.Mail skickar epost och dess MailMessage.Subject innehåller andra tecken än ASCII (tex åäö), så blir dessa istället symboliserade av ett frågetecken(?).

Hittade då en specifikation, MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text, som beskriver hur man skall göra för att få epostprogrammet att tolka tecknen som annat än ASCII, tex UTF-8.

Har då fått ihop nedan kod, och den fungerar bra så länge Subject endast är ett ord, tex åäöÅÄÖ, men fungerar ej med en sträng som å ää ööö ÅÅÅ ÄÄ Ö.

Så jag undrar om någon har erfarenhet av detta eller lätt kan sätta sig in i det hela och se vari felet ligger.

        private string BuildEmailSubject(string subject)
        {
            string[] wordcol = subject.Trim().Split(new char[] { ' ' });
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < wordcol.Length; i++)
            {
                if (i > 0)
                    sb.Append("=?ISO-8859-1?Q?=20?= ");

                byte[] bytecol = Encoding.UTF8.GetBytes(wordcol[i]);
                string base64 = Convert.ToBase64String(bytecol);
                List<string> partcol = new List<string>();

                for (int i1 = 0; i1 < base64.Length; i1 += 30)
                    partcol.Add(base64.Substring(i1, Math.Min(30, base64.Length - i1)));

                for (int i2 = 0; i2 < partcol.Count; i2++)
                    sb.Append(string.Format(@"=?utf-8?B?{0}{1}?= ", partcol[i2], (partcol.Count - 1) == i2 ? "=" : ""));

                Response.Write("base64: " + base64);
                Response.Write("<br/>subject: " + sb.ToString().Trim());
                Response.Write("<hr/>");
            }
            return sb.ToString().Trim();
        }

        protected void btSend_Click(object sender, EventArgs e)
        {
            string from = "aaa@aaa.se";
            string to = "bbb@bbb.se";
            string subject1 = "å ää ööö ÅÅÅ ÄÄ Ö&#39321; &#28207; &#21083;";
            string subject2 = BuildEmailSubject(subject1);
            string body = "Test";
            bool htmlmode = false;

            MailMessage mail = new MailMessage(from, to);
            mail.SubjectEncoding = Encoding.UTF8;
            mail.Subject = subject2;
            mail.BodyEncoding = Encoding.UTF8;
            mail.Body = body;
            mail.IsBodyHtml = htmlmode;
            mail.Headers.Add("subject", subject2);

            SmtpClient smtp = new SmtpClient();
            smtp.Send(mail);
        }
CatZMedlem sedan jan. 20022 440 inlägg
#2

Felet är inte mailets i ditt fall. Felet är mottagarens inställningar. Vilka domäner har du skickat till? Jag hade väldigt mycket problem med Yahoo mail som helt enkelt vägrade autoställa in på utf-8. Alla mail till yahoo blev muppade oavsett vem som var avsändare när det var via tex mina egna sidor eller binero.

Jag blev så lack att jag sa upp skiten. Hade inga problem med varken hotmail eller min egen domän. Har du kollat att det inte är något sånt?

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