A caixa de correio não está disponível, o cliente não tem permissões para enviar como este remetente - apenas na primeira vez

7

Nossos usuários podem enviar e-mails do nosso aplicativo da Web do ASP.NET com o clique de um botão. Em nosso ambiente de testes, há algo estranho acontecendo.

Na primeira vez em que o aplicativo tenta enviar o email, recebemos a exceção:

Caixa de correio indisponível. A resposta do servidor foi: 5.7.1 O cliente não tem permissões para enviar como este remetente

O engraçado é que, quando o usuário clica no botão novamente (para que o aplicativo tente enviar o email novamente), ele funciona e o email é enviado.

Se você esperar um pouco, receberá o erro novamente, mas clicar pela segunda vez enviará o e-mail sem problemas. Se você fosse rápido o suficiente para enviar um novo e-mail, funcionaria.

Este é o código (simplificado) que usamos:

Dim smtpClient As New SmtpClient(<smtp mail server goes here>)
smtpClient.UseDefaultCredentials = True
mailMessage.From = New MailAddress(<from address>)
smtpClient.Send(mailMessage)

Isso funciona nos ambientes de produção. Estamos usando o Microsoft Exchange e nossos clientes (os ambientes de produção).

Alguém já teve algo semelhante (erro na primeira vez, funciona como um encanto pela segunda vez)?

    
por Peter 21.02.2011 / 10:08

4 respostas

2

Eu já vi isso acontecer algumas vezes antes e aqui estão as causas que eu vi. Tenha em mente que estes só foram vistos em um ambiente grande. Se você estiver em um único ambiente de servidor dc e exchange único, estes não serão aplicados.

Primeiro, aqui está o artigo da Microsoft sobre isso: link . Sob as cuases possíveis, você pode ver que há muitas coisas em jogo.

Uma das suas permissões de retransmissão de servidores de troca não está configurada corretamente.

Essa é a causa mais provável. O e-mail pode estar tomando uma rota diferente na primeira e segunda tentativa, enquanto isso pode soar bobo executando rastreamento de mensagens em ambas as mensagens, veja se eles passam pelo mesmo servidor. Se você vir diferentes caminhos, verifique as configurações no caminho ruim, pode ser um simples permitir que a retransmissão para usuários autenticados não seja verificada.

As permissões do AD estão erradas

Você deve ter permissões Enviar como na conta que possui o endereço de do seu e-mail. Se estiver funcionando às vezes, mas não em outros, pode haver caminhos diferentes no roteamento de e-mail, com permissões diferentes entre eles.

A autenticação não está funcionando corretamente.

Na primeira instância do script, pode ser que a autenticação falhe e, nesse caso, o email é negado, pois você não tem permissão. Na segunda execução do script, a autenticação é bem-sucedida. Infelizmente eu não conheço o ASP suficientemente bem para entender o código acima ou aconselhar sobre como corrigi-lo. smtpClient.UseDefaultCredentials pode não ser o código correto para o seu ambiente. Isso só será autenticado se solicitado pelo servidor e usará as credenciais do usuário conectado localmente. Se o servidor não estiver solicitando autenticação na primeira vez, você não será autorizado e poderá não ter permissão para enviar. Tente alterá-lo para algum código que sempre autentique.

Um de seus DCs ou catálogos globais está desatualizado ou tem informações incorretas.

Isso é raro, mas é possível que seus controladores de domínio tenham informações fora de sincronia. Verifique as informações do servidor de e para contas via ldap ou adsi edit e verifique se elas são idênticas em todos os dcs.

Em todas as instâncias, verifique os logs no servidor do Exchange e certifique-se de que o log do SMTP esteja habilitado em todos os campos. Use o rastreamento de mensagens para ver exatamente quais servidores esta mensagem está atingindo.

    
por 22.02.2011 / 11:21
1

Parece-me que você pode ter a autenticação SMTP ativada no servidor de email, mas não a incluiu no código. Nesse caso, na primeira vez que você tentar enviar uma mensagem, ela efetivamente executará a autenticação, mas não enviará a mensagem. A próxima vez que o usuário for autenticado e a mensagem passar.

    
por 22.02.2011 / 11:48
1

Para mim, o problema era que meu arquivo de configuração já tinha a conta "De" especificada. Quando tentei fazer mailMessage.From = New MailAddress(<from address>) no meu código, ele vomitou porque o e-mail "de" no meu código não correspondia ao e-mail "de" no meu arquivo de configuração.

    
por 22.04.2017 / 00:19
-1

Tente isto:

    Dim client = New SmtpClient(<smtp mail server goes here>)
    MailerManager.ServerSMTP = client.Host.ToString()
    Try
        client.Send(Mail)
    Catch ex As Exception
        'Error Message
    End Try
    
por 29.05.2013 / 14:26