首页 > 解决方案 > 如何在自制电子邮件客户端应用程序中通过 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 时

标签: asp.net-coreemailasp.net-core-webapiflutter-webzimbra

解决方案


推荐阅读