Domanda

Se ho in coda un po 'di e-mail da inviare tramite lo System.Net.Mail.SMTPClent, dove posso trovare questa mail? Con il client SMTP di Windows, è nella cartella C:? \ Inetpub \ mailroot cartella - c'è una cartella simile per il client .NET

EDIT: Ecco un esempio. Se spengo il server SMTP in uscita sul mio computer XP e quindi eseguire un'applicazione che invia una dozzina di messaggi di posta elettronica, vengono messi in coda da qualche parte, dal momento che la chiamata .NET SMTPClient.Send riesce. Poche ore dopo, ho avviare il server SMTP locale, e la posta lascia in una raffica improvvisa. Dove si trova nel frattempo? Lo stesso comportamento si verifica sul mio desktop di Vista, anche se non ho alcun server SMTP locale - posso duplicare la funzionalità bloccando la porta 25 sul firewall, e poi posta le code da qualche parte. Dove?

La ragione di questa domanda è che voglio riattivare il servizio SMTP su un server che ho, ma non so che cosa è stato in coda nel frattempo, e voglio per assicurarsi che la coda è pulito quando I riattivare il servizio. In questo modo, i clienti non si ottiene molto, molto vecchio e-mail tutte le improvvise in coda.

Modifica : Chiaramente, non so di cosa sto parlando. Quando faccio questo su 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)

I ottenere un'eccezione perché non ho una cartella di prelievo di IIS. Cambiare a "Mail.SmtpDeliveryMethod.Network" si traduce in un'eccezione immediato, perché non ho un server SMTP in esecuzione. Io prova questo su Server 2003, ma avrei giurato che questi sia lavorato in passato. Farò un po 'di test e modificare la domanda, se necessario.

È stato utile?

Soluzione

Dalla bellezza delle pagine MSDN per SmtpClient, è configurabile. È possibile utilizzare il deliveryMethod immobili per decidere se la posta viene inviata immediatamente, se è in coda nella cartella di prelievo di IIS (presumibilmente C: \ inetpub \ mailroot) o se è collocato in una cartella di propria scelta (specificato dal PickupDirectoryLocation proprietà).

Altri suggerimenti

La descrizione è un po 'vago, ma se si chiama Send() e il vostro DeliveryMethod è Network e la chiamata riesce, allora non è nel regno del .NET più. Qualcosa ha accettato per la consegna e si è seduto in coda di qualcosa, che salta di gioia quando si accende il server di posta che può collegarsi con il mondo esterno indietro. Quando DeliveryMethod è Network, sono abbastanza sicuro (almeno, a giudicare dalla smontaggio Reflector) che è scarabocchiare direttamente su un flusso di rete e non tramite alcuni file temporaneo intermedio. Se non si poteva aprire una connessione e ottenere tale flusso, allora vomita con un'eccezione. Ciò coincide con la mia esperienza reale nell'utilizzo di questa classe. Speranza che aiuta.

Per impostazione predefinita, il client SMTP utilizza una rete di invio. Quindi nessun email vengono memorizzati da nessuna parte.

Ecco la sezione di configurazione del 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>

Si può dare un'occhiata alla questo articolo nel progetto di codice che mostra come gestire manualmente i file creati dal Cliente SMTP quando DeliveryMethod == SmtpDeliveryMethod.SpecifiedPickupDirectory.

È possibile impostare la directory di prelievo specificata e metodo di consegna per un maggiore controllo

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

Il client .NET SMTP io sono abituato a non memorizza la posta da nessuna parte. Si invia solo. Se il server in uscita si suppone di inviare tramite è giù, dà subito un'eccezione.

Hai provato accendere e spegnere il server in uscita sulla vostra scatola di XP. Grande. Ora, cercare di trovare il servizio SMTP in ingresso. I servizi SMTP entrata e in uscita parlano tra loro da FileDrop.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top