aspnetboilerplate中的电子邮件发送无效

时间:2017-11-11 09:34:23

标签: c# asp.net email-integration smtpclient aspnetboilerplate

这是设置:

AddSettingIfNotExists(EmailSettingNames.DefaultFromAddress, "abc@xyz.tech");
AddSettingIfNotExists(EmailSettingNames.DefaultFromDisplayName, "abc.tech Emailservice");
AddSettingIfNotExists(EmailSettingNames.Smtp.UserName, "abc@xyz.tech");
AddSettingIfNotExists(EmailSettingNames.Smtp.Domain, "abc.tech");
AddSettingIfNotExists(EmailSettingNames.Smtp.EnableSsl,"false");
AddSettingIfNotExists(EmailSettingNames.Smtp.Host, "webmail.abc.tech");
AddSettingIfNotExists(EmailSettingNames.Smtp.Port, "25");
AddSettingIfNotExists(EmailSettingNames.Smtp.Password, "gdfdgd");
AddSettingIfNotExists(EmailSettingNames.Smtp.UseDefaultCredentials, "false");

这是发送电子邮件的代码:

// See "Update"

我得到了这个例外:

  

错误的命令序列。服务器响应是:此邮件服务器   尝试发送到非本地电子邮件时需要身份验证   地址。请检查您的邮件客户端设置或联系您的   管理员验证是否为此定义了域或地址   服务器

更新

public class UserAppService // ...
{
    private readonly UserManager _userManager;
    private readonly RoleManager _roleManager;
    IRepository<User, long> _rep;
    private readonly IRepository<Role> _roleRepository;
    private readonly IPasswordHasher<User> _passwordHasher;
    public readonly IEmailSender _emailSender;

    public UserAppService(
        IRepository<User, long> repository,
        UserManager userManager,
        RoleManager roleManager,
        IRepository<Role> roleRepository,
        IPasswordHasher<User> passwordHasher, IEmailSender em)
        : base(repository)
    {
        _rep = repository;
        _userManager = userManager;
        _roleManager = roleManager;
        _roleRepository = roleRepository;
        _passwordHasher = passwordHasher;
        _emailSender = em;
    }

    [AbpAllowAnonymous]
    public override async Task<UserDto> Create(CreateUserDto input)
    {
        // CheckCreatePermission();

        var user = ObjectMapper.Map<User>(input);

        user.TenantId = AbpSession.TenantId;
        user.Password = _passwordHasher.HashPassword(user, input.Password);
        user.IsEmailConfirmed = false;

        CheckErrors(await _userManager.CreateAsync(user));

        if (input.RoleNames != null)
        {
            CheckErrors(await _userManager.SetRoles(user, input.RoleNames));
        }

        CurrentUnitOfWork.SaveChanges();

        try
        {
            await _emailSender.SendAsync("test@gmail.com", "sdfs", "sdfsd", false);
        }
        catch (Exception ex)
        {
        }

        return MapToEntityDto(user);
    }
}

2 个答案:

答案 0 :(得分:1)

  

此邮件服务器在尝试发送到非本地电子邮件地址时需要进行身份验证。

您的SMTP服务器(related)似乎有问题。

尝试向自己或同一域中的其他用户发送电子邮件。

  

我无法将邮件发送到其他域名正在运行的域名。

与SMTP服务器的系统管理员联系。

  

使用smtp普通的.net代码,它工作正常

您也可以使用MailMessage发送IEmailSender

答案 1 :(得分:0)

这与aspnetboilerplate无关。如错误所示&#34;此邮件服务器在尝试发送到非本地电子邮件地址时需要进行身份验证。 &#34;

可能的原因:

  • 未为SMTP身份验证和服务器配置电子邮件客户端 是
  • 防火墙或电子邮件代理软件阻止发生SMTP身份验证
  • 电子邮件客户端配置的凭据不正确或与服务器设置不匹配。

您可以执行的操作是下载以下应用程序以测试您的smtp设置。 http://www.alexnolan.net/software/SMTPProber.htm

成功发送电子邮件后,请使用aspnetboilerplate中的正确设置。