cosullivan / SmtpServer

A SMTP Server component written in C#
MIT License
692 stars 163 forks source link

public class SampleMailboxFilter : IMailboxFilter, IMailboxFilterFactory serviceProvider.Add There is ambiguity #153

Closed duyanming closed 3 years ago

duyanming commented 3 years ago

image

var serviceProvider = new ServiceProvider(); serviceProvider.Add(new SampleMessageStore());

        serviceProvider.Add(new SampleMailboxFilter());
        serviceProvider.Add(new SampleUserAuthenticator());

image There is ambiguity

namangangwar commented 3 years ago

For SampleMailboxFilter inherit from IMailboxFilter.

SampleMailboxFilter.cs
public class SampleMailboxFilter : IMailboxFilter
{
    public Task<MailboxFilterResult> CanAcceptFromAsync(ISessionContext context, IMailbox @from, int size, CancellationToken cancellationToken)
    {
       return Task.FromResult(MailboxFilterResult.NoPermanently);
    }

    public Task<MailboxFilterResult> CanDeliverToAsync(ISessionContext context, IMailbox to, IMailbox @from, CancellationToken token)
    {
        return Task.FromResult(MailboxFilterResult.Yes);
    }

    public IMailboxFilter CreateInstance(ISessionContext context)
    {
        return new SampleMailboxFilter();
    }
}

For SampleUserAuthenticator inherit from IUserAuthenticator.

SampleUserAuthenticator.cs
public class SampleUserAuthenticator : IUserAuthenticator
{
    public Task<bool> AuthenticateAsync(ISessionContext context, string user, string password, CancellationToken token)
    {
        Console.WriteLine("User={0} Password={1}", user, password);
        return Task.FromResult(user.Length > 4);
    }

    public IUserAuthenticator CreateInstance(ISessionContext context)
    {
        return new SampleUserAuthenticator();
    }
}