asp.net-core - 如何在自制电子邮件客户端应用程序中通过 Zimbra 电子邮件发送和接收电子邮件?
问题描述
我已经构建了一个电子邮件客户端应用程序,假设允许用户阅读/接收他们的电子邮件,使用 Flutter Web 发送电子邮件。
Flutter Web 通过我使用 ASP.NET Core 5.0 Web API 编写的 API 接收和发送电子邮件。我在我的 ASP 的 API 中使用 Mailkit。以下是发送和接收方法:
发送()
public async Task Send(EmailMessage email)
{
var message = new MimeMessage();
message.To.AddRange(email.toAddresses.Select(x => new MailboxAddress(x.Name, x.Address)));
message.From.AddRange(email.fromAddresses.Select(x => new MailboxAddress(x.Name, x.Address)));
message.Subject = email.Subject;
var builder = new BodyBuilder();
builder.HtmlBody = email.Body;
message.Body=builder.ToMessageBody();
using (var smtp = new SmtpClient())
{
smtp.Connect("smtp.gmail.com", 587, false);
smtp.Authenticate("<*gmail username*>@gmail.com", "<*gmail password*>");
await smtp.SendAsync(message);
smtp.Disconnect(true);
}
}
接收电子邮件()
public async Task<List<EmailMessage>> ReceiveEmail(int maxCount = 5)
{
using(var emailClient = new Pop3Client())
{
emailClient.Connect("pop.gmail.com", 995, true);
emailClient.Authenticate("<*gmail username*>@gmail.com", "<*gmail password*>");
emailClient.GetMessageCount();
List<EmailMessage> emails = new List<EmailMessage>();
for(int i=0;i<emailClient.Count && i<maxCount; i++)
{
var message =await emailClient.GetMessageAsync(i);
var emailMessage = new EmailMessage
{
Body = !string.IsNullOrEmpty(message.HtmlBody) ? message.HtmlBody : message.TextBody,
Subject = message.Subject
};
emailMessage.toAddresses.AddRange(message.To.Select(x => (MailboxAddress)x).Select(x => new EmailAddress { Address = x.Address, Name = x.Name }));
emailMessage.fromAddresses.AddRange(message.From.Select(x => (MailboxAddress)x).Select(x => new EmailAddress { Address = x.Address, Name = x.Name }));
emails.Add(emailMessage);
}
return emails;
}
}
电子邮件消息.cs
public class EmailMessage
{
public EmailMessage()
{
toAddresses = new List<EmailAddress>();
fromAddresses = new List<EmailAddress>();
}
public List<EmailAddress> toAddresses { get; set; }
public List<EmailAddress> fromAddresses { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
}
电子邮件地址.cs
public class EmailAddress
{
public string Name { get; set; }
public string Address { get; set; }
}
如您所见,我的 API 使用 Gmail 的 smtp 和 POP3 服务器运行。它运行。没问题。我可以通过 API 发布输入数据并发送电子邮件,并通过 ReceiveEmails() 获取收件箱中的所有电子邮件
但现在的情况是使用Zimbra,而不是 Gmail,作为电子邮件服务提供商。我真的在整个网络上找到了解决方案或任何与实施相关的问题讨论的问题,但没有成功。
所以,如果有人知道。请。如何使 Zimbra 允许外部电子邮件客户端应用程序使用其服务:通过其 SMTP 发送电子邮件并通过其 POP3 接收电子邮件?和我对 Gmail 所做的一样吗?
注意:我已经安装了 Zimbra Open Source 8.8.5 并在我的 Ubuntu 18.04.6 服务器中进行了配置。还有一个帐户:admin@mail.privacy.com,当我通过 http://:7071 访问我的 Zimbra 时
解决方案
推荐阅读
- mysql - Laravel:AWS RDS laravel 中没有表的此类文件或目录
- amazon-web-services - 带有弹性豆茎和 symfony 的 Cron - 不工作
- go - vim-go、模块和 GoRename
- javascript - 一笔巨款 - Hacker Rank
- java - 尝试在链表中执行替换方法,但程序仅替换第一个元素
- reactjs - 做出反应。TypeError:无法读取未定义的属性“id”
- excel - 将excel另存为txt后丢失一行(使用wc -l检查)
- python - Scrapy Item Pipelines 中 Python 集合的线程安全问题(使用 Twisted 进行并发)
- java - 我的应用程序中的新闻页面没有检索任何新闻,并且只显示空白页而不是新闻源
- sql-server - 如何使用 web api 通过字符串键获取项目?