Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

ENCODING ΕΛΛΗΝΙΚΩΝ ΧΑΡΑΚΤΗΡΩΝ ΚΑΤΑ ΤΗΝ ΑΠΟΣΤΟΛΗ EMAIL ΜΕ C#

Îåêßíçóå áðü ôï ìÝëïò vtops. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 04-05-2011, 20:19. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  04-05-2011, 19:06 65553

    ENCODING ΕΛΛΗΝΙΚΩΝ ΧΑΡΑΚΤΗΡΩΝ ΚΑΤΑ ΤΗΝ ΑΠΟΣΤΟΛΗ EMAIL ΜΕ C#

    Καλησπέρα σε όλους και Χρόνια Πολλά,

    Προσπαθώ να στείλω email με HTML κώδικα και αντιμετωπίζω πρόβλημα με τους Ελληνικούς χαρακτήρες.

    Εδώ έχω το κυρίως κορμό του κώδικα που προσπαθώ να εκτελέσω

    MailMessage mail = new MailMessage();

    mail.From = new MailAddress(this.txtsender.Text);

    mail.Subject = this.txtsubject.Text;

    mail.IsBodyHtml = true;

    mail.Body = "HTML CODE που περιέχει και ελληνικούς χαρακτήρες";

    μετά δηλώνω τα login στοιχεία και το κάνω send

     

    Το  email φτάνει στον παραλήπτη αλλά βγαίνει με αλαμπουρνέζικα.

    δοκίμασα και το 

    mail.BodyEncoding = Encoding.GetEncoding(1253);

    αλλά δεν άλλαξε κάτι.

    Επίσης ο HTML κώδικας μου περιέχει το:

    <META http-equiv=Content-Type content="text/html; charset=Windows-1253">

    Έχει κανείς καμιά ιδέα;

    Ευχαριστώ!


    Best Regards
  •  04-05-2011, 19:45 65555 σε απάντηση της 65553

    Απ: ENCODING ΕΛΛΗΝΙΚΩΝ ΧΑΡΑΚΤΗΡΩΝ ΚΑΤΑ ΤΗΝ ΑΠΟΣΤΟΛΗ EMAIL ΜΕ C#

    Όλα τα string στo .ΝΕΤ είναι unicode και συνεπώς οποιοδήποτε ascii encoding (όπως το 1253 ή το default 'us-ascii') θα προκαλέσει πρόβλημα. Αν δεις το παράδειγμα στο documentation του BodyEncoding το μόνο που έχεις να κάνεις είναι να χρησιμοποιήσεις το UTF8 (Encoding.UTF8) για να μεταφερθεί σωστά το κείμενο. Όπως λέει και το documentation, το κείμενο σου θα μετατραπεί σε BASE64 σε αυτή την περίπτωση για τη μεταφορά. Αυτό δεν πρέπει να σε απασχολεί γιατί όλοι οι clients καταλαβαίνουν το base64 encoding.

    Για παράδειγμα, το παρακάτω στέλειν σωστά τα ελληνικά:

                string to = "[email protected]";
                string from = "[email protected]";
                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
  •  04-05-2011, 19:59 65556 σε απάντηση της 65555

    Απ: ENCODING ΕΛΛΗΝΙΚΩΝ ΧΑΡΑΚΤΗΡΩΝ ΚΑΤΑ ΤΗΝ ΑΠΟΣΤΟΛΗ EMAIL ΜΕ C#

    Φίλε Παναγιώτη Καλησπέρα και Ευχαριστώ για την άμεση ανταπόκριση,

    Ψάχνοντας και εγώ κατάλαβα πως είχα κάνει το εξής λάθος

    To σημείο που φόρτωνα τον html κώδικα το έκανα μέσω ενός StreamReader και το έβαζα γράμμη γραμμή γιατί ήθελα να κάνω κάποια επεξεργασία στο html πριν το απόδωσω πάνω στο mail.body

    Δήλωσα λοιπό πάνω στον StreamReader που διάβασε το HTML αρχείο encoding 1253,  και το πρόβλημα λύθηκε από ότι φαίνεται

    Δεν ξέρω αν θα με επηρεάσει κάπου, ποια είναι η γνώμη σου;

     

     

     

    Ευχαριστώ και πάλι


    Best Regards
  •  04-05-2011, 20:19 65557 σε απάντηση της 65556

    Απ: ENCODING ΕΛΛΗΝΙΚΩΝ ΧΑΡΑΚΤΗΡΩΝ ΚΑΤΑ ΤΗΝ ΑΠΟΣΤΟΛΗ EMAIL ΜΕ C#

    Ότι θα έχεις πρόβλημα αν χρειαστεί ποτέ να χρησιμοποιήσεις και κάποιο άλλο codepage, όπως κάποιο κυριλλικό, ή αν ποτέ ξεχάσεις ποιό codepage έχεις ρυθμίσει πού. Γιατί να καρφώσεις το codepage όταν όλο το .NET δουλεύει με Unicode? Δεν γλυτώνεις καν χώρο, καθώς είτε ελληνικά είτε unicode στείλεις, το email θα είναι encoded με τον ένα ή τον άλλο τρόπο. 
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems