gpt4 book ai didi

c# - 在 C# 中读取来自 Gmail 的电子邮件

转载 作者:IT王子 更新时间:2023-10-29 04:25:58 24 4
gpt4 key购买 nike

我正在尝试阅读来自 Gmail 的电子邮件。我已经尝试了我能找到的每一个 API/开源项目,但都无法正常工作。

有没有人有工作代码示例,可以让我从 Gmail 帐户验证和下载电子邮件?

下面发布的最终工作版本:https://stackoverflow.com/a/19570553/550198

最佳答案

使用来自:https://github.com/pmengal/MailSystem.NET 的库

这是我的完整代码示例:

电子邮件存储库

using System.Collections.Generic;
using System.Linq;
using ActiveUp.Net.Mail;

namespace GmailReadImapEmail
{
public class MailRepository
{
private Imap4Client client;

public MailRepository(string mailServer, int port, bool ssl, string login, string password)
{
if (ssl)
Client.ConnectSsl(mailServer, port);
else
Client.Connect(mailServer, port);
Client.Login(login, password);
}

public IEnumerable<Message> GetAllMails(string mailBox)
{
return GetMails(mailBox, "ALL").Cast<Message>();
}

public IEnumerable<Message> GetUnreadMails(string mailBox)
{
return GetMails(mailBox, "UNSEEN").Cast<Message>();
}

protected Imap4Client Client
{
get { return client ?? (client = new Imap4Client()); }
}

private MessageCollection GetMails(string mailBox, string searchPhrase)
{
Mailbox mails = Client.SelectMailbox(mailBox);
MessageCollection messages = mails.SearchParse(searchPhrase);
return messages;
}
}
}

用法

[TestMethod]
public void ReadImap()
{
var mailRepository = new MailRepository(
"imap.gmail.com",
993,
true,
"yourEmailAddress@gmail.com",
"yourPassword"
);

var emailList = mailRepository.GetAllMails("inbox");

foreach (Message email in emailList)
{
Console.WriteLine("<p>{0}: {1}</p><p>{2}</p>", email.From, email.Subject, email.BodyHtml.Text);
if (email.Attachments.Count > 0)
{
foreach (MimePart attachment in email.Attachments)
{
Console.WriteLine("<p>Attachment: {0} {1}</p>", attachment.ContentName, attachment.ContentType.MimeType);
}
}
}
}

另一个例子,这次使用MailKit

public class MailRepository : IMailRepository
{
private readonly string mailServer, login, password;
private readonly int port;
private readonly bool ssl;

public MailRepository(string mailServer, int port, bool ssl, string login, string password)
{
this.mailServer = mailServer;
this.port = port;
this.ssl = ssl;
this.login = login;
this.password = password;
}

public IEnumerable<string> GetUnreadMails()
{
var messages = new List<string>();

using (var client = new ImapClient())
{
client.Connect(mailServer, port, ssl);

// Note: since we don't have an OAuth2 token, disable
// the XOAUTH2 authentication mechanism.
client.AuthenticationMechanisms.Remove("XOAUTH2");

client.Authenticate(login, password);

// The Inbox folder is always available on all IMAP servers...
var inbox = client.Inbox;
inbox.Open(FolderAccess.ReadOnly);
var results = inbox.Search(SearchOptions.All, SearchQuery.Not(SearchQuery.Seen));
foreach (var uniqueId in results.UniqueIds)
{
var message = inbox.GetMessage(uniqueId);

messages.Add(message.HtmlBody);

//Mark message as read
//inbox.AddFlags(uniqueId, MessageFlags.Seen, true);
}

client.Disconnect(true);
}

return messages;
}

public IEnumerable<string> GetAllMails()
{
var messages = new List<string>();

using (var client = new ImapClient())
{
client.Connect(mailServer, port, ssl);

// Note: since we don't have an OAuth2 token, disable
// the XOAUTH2 authentication mechanism.
client.AuthenticationMechanisms.Remove("XOAUTH2");

client.Authenticate(login, password);

// The Inbox folder is always available on all IMAP servers...
var inbox = client.Inbox;
inbox.Open(FolderAccess.ReadOnly);
var results = inbox.Search(SearchOptions.All, SearchQuery.NotSeen);
foreach (var uniqueId in results.UniqueIds)
{
var message = inbox.GetMessage(uniqueId);

messages.Add(message.HtmlBody);

//Mark message as read
//inbox.AddFlags(uniqueId, MessageFlags.Seen, true);
}

client.Disconnect(true);
}

return messages;
}
}

用法

[Test]
public void GetAllEmails()
{
var mailRepository = new MailRepository("imap.gmail.com", 993, true, "YOUREMAILHERE@gmail.com", "YOURPASSWORDHERE");
var allEmails = mailRepository.GetAllMails();

foreach(var email in allEmails)
{
Console.WriteLine(email);
}

Assert.IsTrue(allEmails.ToList().Any());
}

关于c# - 在 C# 中读取来自 Gmail 的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7056715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com