Pergunta

Se eu fiz fila algum email a ser enviado através do System.net.mail.smtpclent, onde posso encontrar este e -mail? Com o cliente SMTP do Windows, ele está na pasta C: inetpub Mailroot - existe uma pasta semelhante para o cliente .NET?

EDIT: Aqui está um exemplo. Se eu desligar o servidor SMTP de saída no meu computador XP e executar um aplicativo que envia uma dúzia de emails, eles serão filmados em algum lugar, já que a chamada .NET SMTPCLIENT.SEND é bem -sucedida. Algumas horas depois, inicio o servidor SMTP local e o correio sai em uma enxurrada repentina. Onde está nesse meio tempo? O mesmo comportamento acontece na minha área de trabalho do Vista, embora eu não tenha servidor SMTP local - posso duplicar a funcionalidade bloqueando a porta 25 no firewall e depois envie filas em algum lugar. Onde?

A razão para esta pergunta é que eu quero reativar o serviço SMTP em um servidor que tenho, mas não sei o que foi filmado nesse meio tempo, e quero garantir que a fila esteja limpa quando eu Ative o serviço. Dessa forma, os clientes não recebem e -mails muito antigos na fila de repente.

EDITAR: Claramente, não sei do que estou falando. Quando eu faço isso no Vista:

    Dim mm As New System.Net.Mail.MailMessage("me@me.com", "you@you.com", "Testing", "this is a test")

    Dim s As New System.Net.Mail.SmtpClient("localhost")
    s.DeliveryMethod = Mail.SmtpDeliveryMethod.PickupDirectoryFromIis
    s.Send(mm)

Tenho uma exceção porque não tenho uma pasta de captação do IIS. Alterá -lo para "Mail.smtpdeliverymethod.network" resulta em uma exceção imediata porque não tenho um servidor SMTP em execução. Vou testar isso no Server 2003, mas eu poderia juramento que ambos funcionavam no passado. Vou fazer mais um teste e modificar a pergunta, se necessário.

Foi útil?

Solução

Da aparência das páginas MSDN para SMTPClient, é configurável. Você pode usar o Método de Entrega Propriedade para decidir se o e -mail foi enviado imediatamente, seja na fila da pasta de captação do IIS (presumivelmente C: inetpub Mailroot) ou se é colocada em uma pasta de sua escolha (especificada pelo PickUpDirectoryLocation propriedade).

Outras dicas

A descrição é um pouco vaga, mas se você ligar Send() e seu DeliveryMethod é Network E a chamada é bem -sucedida, então não está mais no reino do .NET. Algo aceitou para entrega e está sentado na fila de algo, que salta de alegria quando você liga o servidor de correio que pode se conectar com o mundo exterior de volta. Quando DeliveryMethod é Network, Tenho certeza (pelo menos, a julgar pela desmontagem do refletor) de que ele está rabiscando diretamente em um fluxo de rede e não através de algum arquivo de temperatura intermediária. Se não puder abrir uma conexão e obter esse fluxo, vomita com uma exceção. Isso coincide com minha experiência real em usar esta classe. Espero que ajude.

Por padrão, o cliente SMTP usa um envio de rede. Portanto, nenhum e -mail é armazenado em qualquer lugar.

Aqui está a seção de configuração do web.config

        <mailSettings>
        <!--
            <smtp
                deliveryMethod = "Network" [Network | SpecifiedPickupDirectory | PickupDirectoryFromIis]
                from = "" [String]
                >
                <network
                    defaultCredentials = "false" [true|false]
                    host = "" [String]
                    password = "" [String]
                    port = "25" [number]
                    userName = "" [String]
                />
                <specifiedPickupDirectory
                    pickupDirectoryLocation = "" [String]
                />
            </smtp>
        -->
        <smtp deliveryMethod="Network">
            <network defaultCredentials="false" port="25" />
        </smtp>
    </mailSettings>

Você pode dar uma olhada em Este artigo no projeto de código, que mostra como lidar manualmente os arquivos criados pelo cliente SMTP quando DeliveryMethod == SmtpDeliveryMethod.SpecifiedPickupDirectory.

Você pode definir o diretório de coleta especificado e o método de entrega para maior controle

<system.net>
    <mailSettings>
        <smtp deliveryMethod="SpecifiedPickupDirectory">
            <specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\" />
        </smtp>
    </mailSettings>
</sysetm.net>

O cliente .NET SMTP com o qual estou acostumado não armazena o correio em nenhum lugar. Apenas envia. Se o servidor de saída que ele deve enviar estiver inativo, ele dará uma exceção imediatamente.

Você tentou ligar e desligar o servidor de saída na sua caixa XP. Excelente. Agora, tente encontrar o serviço SMTP de entrada. Os serviços SMTP de entrada e saída conversam entre si por Filedrop.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top