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 = "å ää ööö ÅÅÅ ÄÄ Ö香 港 剛";
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);
}