Όλα τα string στo .ΝΕΤ είναι unicode και συνεπώς οποιοδήποτε ascii encoding (όπως το 1253 ή το default 'us-ascii') θα προκαλέσει πρόβλημα. Αν δεις το παράδειγμα στο documentation του
BodyEncoding το μόνο που έχεις να κάνεις είναι να χρησιμοποιήσεις το UTF8 (Encoding.UTF8) για να μεταφερθεί σωστά το κείμενο. Όπως λέει και το documentation, το κείμενο σου θα μετατραπεί σε BASE64 σε αυτή την περίπτωση για τη μεταφορά. Αυτό δεν πρέπει να σε απασχολεί γιατί όλοι οι clients καταλαβαίνουν το base64 encoding.
Για παράδειγμα, το παρακάτω στέλειν σωστά τα ελληνικά:
string to = "somemail@gmail.com";
string from = "someotheremail@gmail.com";
MailMessage message = new MailMessage(from, to);
message.Subject = "Unicode test.";
message.Body = "ΘΟΥ ΒΟΥ Φαλακρός Πράκτωρ";
message.BodyEncoding = Encoding.UTF8;
SmtpClient client = new SmtpClient("smtp.gmail.com");
client.UseDefaultCredentials = false;
client.Credentials=new NetworkCredential(XXXXXX,YYYYYYYY);
client.EnableSsl = true;
try
{
client.Send(message);
}
catch (Exception ex)
{
Console.WriteLine("Exception caught : {0}",
ex.ToString());
}
Αν για κάποιο λόγο δεν θέλεις να χρησιμοποιήσεις το Base64, θα πρέπει πρώτα να μετατρέψεις το string στο κατάλληλο codepage και να δώσεις αυτό το codepage στο BodyEncoding όπως παρακάτω
var greekEncoding = Encoding.GetEncoding(1253);
var msgBytes = greekEncoding.GetBytes("ΘΟΥ ΒΟΥ Φαλακρός Πράκτωρ");
message.Body = greekEncoding.GetString(msgBytes);
message.BodyEncoding = greekEncoding;
Εδώ πρώτα μετατρέπω το string στα αντίστοιχα bytes σε 1253 και μετά τα μετατρέπω ξανά σε string, πάντα σε 1253.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos