pop3 проблема с попыткой загрузить вложения -C#
Некоторое время я искал высокий и низкий уровень, чтобы иметь простой в использовании фрагмент кода, чтобы мой проект C# загружал вложение текстового файла на электронное письмо из gmail. Я взглянул на openpop.net lib, единственную библиотеку, которая мне кажется многообещающей! Может кто-нибудь показать мне какой-нибудь код, который выполняет свою работу? Я смотрел на примеры других людей с openpop, но API был другим в их примере, может быть, более старая версия? Заранее благодарю за помощь!
1 ответ
Вот как вы могли бы сделать это, используя мою библиотеку MailKit, которая гораздо более эффективна, чем OpenPOP.NET:
using System;
using System.Linq;
using MailKit.Net.Pop3;
using MailKit;
using MimeKit;
namespace TestClient {
class Program
{
public static void Main (string[] args)
{
using (var client = new Pop3Client ()) {
client.Connect ("pop.gmail.com", 995, true);
// Note: since we don't have an OAuth2 token, disable
// the XOAUTH2 authentication mechanism.
client.AuthenticationMechanisms.Remove ("XOAUTH2");
client.Authenticate ("joey@gmail.com", "password");
int count = client.GetMessageCount ();
int unknown = 0;
for (int i = 0; i < count; i++) {
var message = client.GetMessage (i);
foreach (var attachment in message.Attachments.OfType<TextPart> ()) {
var fileName = attachment.FileName ?? string.Format ("unknown{0}.txt", ++unknown);
// Save the content of the attachment in whatever
// charset it is in.
using (var stream = File.Create (fileName))
attachment.ContentObject.DecodeTo (stream);
}
}
client.Disconnect (true);
}
}
}
}
Если у вас много сообщений в вашей учетной записи GMail и / или вы просто хотите загружать сообщения с еще большей эффективностью, GMail поддерживает расширение PIPELINING, которым MailKit может воспользоваться.
Вместо загрузки одного сообщения за раз, вы можете использовать GetMessages()
Пакетный запрос ряда сообщений, которые будут использовать расширение PIPELINING, которое значительно уменьшает задержку и, таким образом, может значительно сократить время загрузки.