читать электронную почту outlook в C# используя pop3 (на корейском) - PullRequest
0 голосов
/ 26 февраля 2020

Я хочу прочитать электронную почту outlook в C#, используя pop3. когда я получаю сообщение из своего почтового ящика, возникает исключение кодирования, потому что я читаю корейскую электронную почту. как я могу прочитать корейскую электронную почту? И могу ли я установить почтовый ящик, который я хочу прочитать? пожалуйста, помогите мне

    class Program
    {
        static Pop3Client client = new Pop3Client();
        static StringBuilder builder = new StringBuilder(); 
        static void Main(string[] args)
        {

            client.Connect("outlook.office365.com", 995, true);
            client.Authenticate("blahblahblah", "blahblahblah");//로그인

            Console.WriteLine("Checking Inbox");
            DataTable table = new DataTable();
            var count = client.GetMessageCount();//몇개의 메세지가 있는지
            Console.WriteLine(count);

            for (int i=count;i>=1;i--)
            {
                var message = client.GetMessage(i);
                var fromAddress = message.Headers.From.Address;
                var subject = message.Headers.Subject;
                var messageBody = String.Empty;

                var plainText = message.FindFirstPlainTextVersion();

                if (plainText == null)
                {
                    var html = message.FindFirstHtmlVersion();
                    messageBody = html.GetBodyAsText();
                }
                else
                {
                    messageBody = plainText.GetBodyAsText();
                }
                table.Rows.Add(i,subject, fromAddress, messageBody);
            }

        }
    }

1 Ответ

1 голос
/ 26 февраля 2020

Привет и добро пожаловать в Stack Overflow. Насколько я понимаю, вы используете библиотеку OpenPop. NET.

OpenPop. NET использует класс EncodingFinder для поиска правильной кодировки. По умолчанию он поддерживает только utf8 и ascii (по крайней мере, чтение кода библиотеки на github). Согласно этой странице: http://hpop.sourceforge.net/exampleChangeCharacterSetMapping.php вы можете добавить свою кодировку в EncodingFinder. В вашем случае все, что вам нужно сделать, это:

static void Main(string[] args)
{
   EncodingFinder.AddMapping("ks_c_5601-1987", Encoding.GetEncoding(949));
   // rest of the application

Обратите внимание, что это будет работать только на. NET Framework, а не на. NET Core, так как последний поддерживает действительно ограниченное количество кодировки (https://docs.microsoft.com/en-us/dotnet/api/system.text.encodinginfo.getencoding?view=netcore-3.1).

У меня нет корейского pop3 для тестирования этого решения, но я надеюсь, что оно будет работать. Удачи!

Редактировать после некоторого поиска Должна быть возможность работать с корейской кодировкой в. NET Кроме того, Core немного сложнее:

static void Main(string[] args)
{
   Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
   EncodingFinder.AddMapping("ks_c_5601-1987", Encoding.GetEncoding(949));
   // rest of application

Попробуйте, если вы работаете с. NET Core.

...