Truy cập Imap trong C # [đã đóng]


112

Có phương pháp tích hợp nào để truy cập máy chủ Imap (với SSL) trong C # hay có thư viện miễn phí tốt không?



7
Không. Liên kết bạn đã đăng có liên quan đến IMAP dành riêng cho Gmail. Bài đăng này, tuy nhiên, không phải.

72
Hãy cẩn thận hơn khi nói / đánh dấu các câu hỏi là trùng lặp. Tôi phát ngán khi thấy "trùng lặp: [liên kết] ở khắp mọi nơi. Rất nhiều lần các liên kết khác không trả lời được những gì" Người sao chép "muốn biết, cho dù đó có cùng một câu hỏi hay không!
12,11

7
Câu hỏi đã đóng nên tôi không thể thêm câu này làm câu trả lời: github.com/jstedfast/MailKit có vẻ là một lựa chọn tốt và là một dự án đang hoạt động.
Rory

4
Đánh dấu câu hỏi hữu ích như không mang tính xây dựng thực sự là không mang tính xây dựng ...
Robert J

Câu trả lời:


90

Tôi đã tìm kiếm giải pháp IMAP trong một thời gian và sau khi thử một vài giải pháp, tôi sẽ sử dụng AE.Net.Mail .

Bạn có thể tải xuống mã bằng cách chuyển đến tab Mã và nhấp vào biểu tượng 'Tải xuống' nhỏ. Vì tác giả không cung cấp bất kỳ bản tải xuống được tạo sẵn nào nên bạn phải tự biên dịch. (Tôi tin rằng bạn có thể lấy nó thông qua NuGet). Không còn .dll trong bin / thư mục.

Không có tài liệu nào mà tôi cho là nhược điểm, nhưng tôi đã có thể khắc phục điều này bằng cách xem mã nguồn (đúng là mã nguồn mở!) Và sử dụng Intellisense. Đoạn mã dưới đây kết nối cụ thể với máy chủ IMAP của Gmail:

// Connect to the IMAP server. The 'true' parameter specifies to use SSL
// which is important (for Gmail at least)
ImapClient ic = new ImapClient("imap.gmail.com", "name@gmail.com", "pass",
                ImapClient.AuthMethods.Login, 993, true);
// Select a mailbox. Case-insensitive
ic.SelectMailbox("INBOX");
Console.WriteLine(ic.GetMessageCount());
// Get the first *11* messages. 0 is the first message;
// and it also includes the 10th message, which is really the eleventh ;)
// MailMessage represents, well, a message in your mailbox
MailMessage[] mm = ic.GetMessages(0, 10);
foreach (MailMessage m in mm)
{
    Console.WriteLine(m.Subject);
}
// Probably wiser to use a using statement
ic.Dispose();

Đảm bảo rằng bạn xem trang Github để biết phiên bản mới nhất và một số ví dụ mã tốt hơn.


1
Điều này trông quá dễ dàng để trở thành sự thật lol. Tôi sẽ kiểm tra nó ra!
uốn cong

4
@jase - Bạn nói đúng! Tôi không chắc vấn đề chính xác là gì (có vẻ như là tệp thuộc tính?) Nhưng tôi đã có thể biên dịch nó bằng cách sao chép tất cả các tệp có liên quan vào một dự án lớp mới. Dù thế nào đi nữa, tôi đã xây dựng các thư viện cho bạn và vì vậy bạn có thể thêm chúng dưới dạng tham chiếu .dll vào dự án của mình. dl.dropbox.com/u/8037514/AE.Net.Mail.zip Cũng như một tuyên bố từ chối trách nhiệm, điều này đi kèm với bất kỳ bảo đảm và bản quyền nào mà dự án gốc đi kèm và tôi không chịu trách nhiệm nếu nó bị nổ, v.v. Tốt may mắn!
Dominic K

4
+1 Tôi vừa tải xuống và biên dịch bản cam kết mới nhất của AE.Net.Mail trong VS2010 và nó hoạt động hoàn hảo. Tôi đã có trải nghiệm tốt hơn nhiều so với ImapX, cảm ơn vì mẹo. Mã ở đây đã cho tôi một bước khởi đầu tốt.
RedFilter

8
Tại sao mọi người viết những điều tuyệt vời như thế này và sau đó về cơ bản không bao gồm tài liệu? Tôi không hiểu
Simon_Weaver

2
Nó hoạt động nhưng trong các phiên bản mới hơn, hàm tạo sẽ trông như thế này: ImapClient ic = new ImapClient ("imap.gmail.com", "name@gmail.com", "pass", AuthMethods.Login, 993, true);
Ogglas

34

Với hy vọng rằng nó sẽ hữu ích cho một số người, bạn có thể muốn xem bài viết của tôi về nó:

Sơ đồ S22

Mặc dù có một số thư viện IMAP tốt và được tài liệu hóa tốt cho .NET có sẵn, nhưng không có thư viện nào miễn phí cho cá nhân, chứ chưa nói đến việc sử dụng thương mại ... và tôi không hài lòng với các lựa chọn thay thế miễn phí hầu như bị bỏ rơi mà tôi tìm thấy.

S22.Imap hỗ trợ thông báo IMAP IDLE cũng như SSL và tìm nạp một phần tin nhắn. Tôi đã nỗ lực tạo ra tài liệu và cập nhật nó, bởi vì với các dự án tôi tìm thấy, tài liệu thường thưa thớt hoặc không tồn tại.

Vui lòng dùng thử và cho tôi biết nếu bạn gặp bất kỳ vấn đề nào!


Đã thử AE.Net.Mail đầu tiên và nhận thấy S22.Imap tốt hơn, cả về tài liệu và các tính năng tôi cần cho đến nay.
angularsen

Tôi thích khái niệm về S22.Imap. Nhưng những gì tôi đang thiếu là truy cập thông qua chỉ mục hoặc số tin nhắn.
Tejasvi Hegde

300 Cổ vũ cho S22.Imap. Đơn giản Hiệu quả và Hữu ích trong các tình huống thế giới thực. The .Search () i sbrilliant
Vishnoo Rath

Làm cách nào để giữ đồng bộ hóa cho hộp thư của tôi với IMAP bằng thư viện này?
JackXandar

1
Bất kỳ ý tưởng nào tại sao tôi lại nhận được Lỗi thông tin đăng nhập không hợp lệ với thông báo "KHÔNG [WEBALERT some url] Yêu cầu đăng nhập web" khi cố gắng đăng nhập? IMAP được bật trên tài khoản Gmail. Ý tưởng?
Auri Rahimzadeh

19

Không có .NET framework hỗ trợ IMAP. Bạn sẽ cần sử dụng một số thành phần của bên thứ ba.

Hãy thử https://www.limilabs.com/mail , nó rất phải chăng và dễ sử dụng, nó cũng hỗ trợ SSL:

using(Imap imap = new Imap())
{
    imap.ConnectSSL("imap.company.com");
    imap.Login("user", "password");

    imap.SelectInbox();
    List<long> uids = imap.SearchFlag(Flag.Unseen);
    foreach (long uid in uids)
    {
        string eml = imap.GetMessageByUID(uid);
        IMail message = new MailBuilder()
            .CreateFromEml(eml);

        Console.WriteLine(message.Subject);
        Console.WriteLine(message.TextDataString);
    }
    imap.Close(true);
}

Xin lưu ý rằng đây là một sản phẩm thương mại mà tôi đã tạo ra.

Bạn có thể tải về tại đây: https://www.limilabs.com/mail .


3
Đã tải xuống và chạy trong vài phút nữa :) Rất tuyệt
Moulde

Nó có hỗ trợ chuyển mã thông báo bằng oAuth 2 thay vì chuyển mật khẩu không?
dùng1166905


2
Thành phần tuyệt vời, hoạt động như một sự quyến rũ. Đã kiểm tra phiên bản dùng thử (gần như đầy đủ chức năng) trong vài tuần sau đó mua giấy phép.
Alex

1
Đây thực sự là một thành phần tuyệt vời. Không giống như tất cả những thứ mã nguồn mở mà chúng tôi đã thử, cái này thực sự sống động và cập nhật (tôi viết bài này vào năm 2016). Cảm ơn bạn @PawelLesnikowski PS. Tôi không liên kết dưới bất kỳ hình thức nào.
jazzcat

15

MailSystem.NET chứa tất cả nhu cầu của bạn về IMAP4. Nó miễn phí và mã nguồn mở.

(Tôi đang tham gia vào dự án)


2
dự án đang hoạt động ?? phiên bản mới nhất ngày: Thứ Hai ngày 14 tháng 12 năm 2009 lúc 9:00 sáng
Kiquenet

1
Ngày nay, không có quá nhiều tính năng để bổ sung vì hầu hết các nhu cầu đã được đáp ứng. Chỉ các bản sửa lỗi và cải tiến nhỏ được cam kết khi chúng được gửi. Nhưng không có nhiều như vậy, thư viện rất mạnh mẽ.

4
Dự án này dường như đã chết. Không làm việc với IMAP4 đúng cách, không cập nhật và không có câu trả lời từ tác giả
Denis Vuyka

6
@alhambraeidos và @Denis đều đúng. Dự án thực tế đã chết. Các mẫu không xây dựng, ngoài hộp, trong VS 2008 hoặc 2010. Tôi đã chuyển đổi chúng sau đó phải xem qua 16 vấn đề tham chiếu. Tài liệu đã lỗi thời và trang CodePlex vẫn chưa được trả lời cho bất kỳ vấn đề / nhận xét nào trong năm qua hoặc hơn. Tôi đã từ bỏ và cuối cùng mua Mail.dll (không, tôi không liên kết với họ).
sohtimsso1970

2
dự án khá chết, IDLE không hoạt động đúng. mailsystem.codeplex.com/workitem/23586
Greg Dean

5

Hãy thử sử dụng thư viện: https://imapx.codeplex.com/

Thư viện đó miễn phí, mã nguồn mở và có ví dụ tại đây: https://imapx.codeplex.com/wikipage?title=Sample%20code%20for%20get%20messages%20from%20your%20inbox


FYI: Imapx dường như không hỗ trợ IDLE
Greg Dean

ImapX hiện đã hỗ trợ cho phần mở rộng IDLE.
Pavel Azanov

thư viện này theo kinh nghiệm của tôi chậm hơn đáng kể so với AE.Net.Mail - điều đó không có ý nghĩa gì nhưng hãy cảnh báo!
Simon_Weaver

1
Thư viện này chứa các lỗi lớn (v2.0.0.18).
David

2

Tôi chưa tự mình thử, nhưng đây là thư viện miễn phí mà bạn có thể thử (tôi không chắc lắm về phần SSL trên thư viện này):

http://www.codeproject.com/KB/IP/imaplibrary.aspx

Ngoài ra, có xemail, có các tham số cho SSL:

http://xemail-net.sourceforge.net/

[EDIT] Nếu bạn (hoặc khách hàng) có đủ tiền cho một ứng dụng thư khách chuyên nghiệp, thì chuỗi này có một số khuyến nghị tốt:

Đề xuất cho một thành phần .NET để truy cập hộp thư đến email


các Imaplibrary tại CodeProject là những gì tôi đã được sử dụng nhưng nó không có các chức năng cần thiết Ill thanh toán xemail
UnkwnTech

stackoverflow.com/questions/86553/... ,, tôi nhận được lỗi này: không tìm thấy trang
Kiquenet

Tôi đã thay đổi liên kết, cảm ơn bạn đã cho tôi biết.
Espo

REE: codeproject.com/KB/IP/imaplibrary.aspx trong câu trả lời của bạn; Nó khá tuyệt. Đã sử dụng nó từ tuần trước cho một ứng dụng email và không gặp bất kỳ vấn đề nào với nó.
βӔḺṪẶⱫŌŔ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.