使用 pop3 在 C# 中读取 outlook 电子邮件(韩语)
read outlook email in C# using pop3 (in korean)
我想使用 pop3 在 C# 中阅读 outlook 电子邮件。
当我从我的邮箱收到邮件时,有编码异常,因为我读的是韩文电子邮件。
我怎样才能阅读韩语电子邮件?
我可以设置我想阅读的邮箱吗?
请帮助我
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);
}
}
}
您好,欢迎来到 Stack Overflow。
据我了解,您正在使用 OpenPop.NET 库。
OpenPop.NET 使用 EncodingFinder class 找到正确的编码。默认情况下,它仅支持 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,请尝试一下。
我想使用 pop3 在 C# 中阅读 outlook 电子邮件。 当我从我的邮箱收到邮件时,有编码异常,因为我读的是韩文电子邮件。 我怎样才能阅读韩语电子邮件? 我可以设置我想阅读的邮箱吗? 请帮助我
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);
}
}
}
您好,欢迎来到 Stack Overflow。 据我了解,您正在使用 OpenPop.NET 库。
OpenPop.NET 使用 EncodingFinder class 找到正确的编码。默认情况下,它仅支持 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,请尝试一下。