27 messaggi dal 07 luglio 2008
Ciao a tutti.

Avrei bisogno di un'aiutino....
Vi ho messo tutte le info del caso per aiutarvi ad avere un'idea chiara della situazione, perciò vi chiedo di leggere fino alla fine, specialmente il P.S.

Veniamo alla domanda....

In IIS 7 nella Sezione "ASP.NET" c'è la funzionalità "Posta SMTP".

Nella guida (locale) si legge:

"...Utilizzare la funzionalità 'Posta SMTP' per configurare il recapito della posta elettronica da applicazioni che utilizzano l'API System.Net.Mail...."

Io ho configurato tutti i parametri richiesti (Server SMTP, username, password) e fin quà tutto facile.

Ma come faccio ad usarli da codice?

Mi spiego meglio, Normalmente nelle mie applicazioni imposto SMTP, username e password direttamente nel codice:

Dim smtp As New SmtpClient("mio.servers.mtp")
smtp.Credentials = New System.Net.NetworkCredential("xxx@eyyy.com", "xxxxxxx")
Try
'INVIO EMAIL AL DESTINATARIO

Dim MymailMessage As New MailMessage()
MymailMessage.From = New MailAddress("xxx@eyyy.com")
MymailMessage.To.Add("destinatario@example.com")
MymailMessage.Subject = "Nuova richiesta informazioni"
MymailMessage.Body = "Testo del messaggio"
MymailMessage.IsBodyHtml = True
smtp.Send(MymailMessage)
Catch ex As Exception
Dim ErrMsg As String = ex.Message
End Try

e tutto funziona benissimo.

Quello che vorrei sapere è: come posso da codice accedere alla funzionalità "Posta SMTP" per inviare le email?

Dimenticavo, siccome qualcuno si (e mi) chiederà "Ma perchè vuoi farlo se già tutto funziona?" la risposta è che ho bisogno di centralizzare la gestione delle credenziali di accesso al server SMTP e quello offerto dalla funzionalità "Posta SMTP" mi sembra il più semplice ma se vi viene in mente qualcos'altro benvenga ogni suggerimento.

P.S. Sò che la funzione di IIS 7 "Posta SMTP" ha bisogno di un server SMTP per poter inviare le email e in effetti il server SMTP è già installato (da 3 anni) e funziona perfettamente usando lo script di cui sopra..... Il server SMTP è Hmail Server ed è installato nella stessa macchina.

Grazie a tutti per l'aiuto.
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

agserna ha scritto:

Normalmente nelle mie applicazioni imposto SMTP, username e password direttamente nel codice:

Dim smtp As New SmtpClient("mio.servers.mtp")
smtp.Credentials = New System.Net.NetworkCredential("xxx@eyyy.com", "xxxxxxx")
E' preferibile che i dati del server SMTP non siano cablati nel codice, ma risiedano nel web.config. Un giorno potresti voler cambiare server SMTP senza dover, per questo, ripubblicare l'intera applicazione.

Vedi questo esempio:
http://weblogs.asp.net/scottgu/archive/2005/12/10/432854.aspx
Come vedi lì, da codice sarà sufficiente invocare il metodo .Send() della classe SmtpClient.

Ora, se l'obiettivo è quello di centralizzare queste impostazioni, non possono risiedere nel web.config della singola applicazione, perché così dovresti ripeterli n volte.
Prova invece ad inserirli nel web.config di root. Si tratta di un file che trovi dentro %windir%/Microsoft.NET/Framework[64]/versione/Config. Ce ne sono molteplici, devi scegliere quello relativo al framework su cui girano le tue applicazioni.
Da IIS7, il modo più semplice di editare le informazioni SMTP è quello di selezionare la voce del webserver dal menu a sinistra, e poi l'icona "Posta SMTP", a destra. Le informazioni che inserisci lì dentro finiranno direttamente nel web.config di root.

Metti la spunta su "localhost", come vedi qui, ed eventualmente inserisci le credenziali di accesso al server HMail.

A proposito delle credenziali d'accesso... sono realmente necessarie? Se non lo fossero non dovresti configurare nulla perché l'invio delle email funzionerebbe con i parametri di default, cioè: localhost sulla porta 25.

Dato che il mailserver si trova sulla stessa macchina, non riesci a fare in modo che l'autenticazione sia facoltativa se la connessione viene stabilita da localhost e il mittente è un account locale? Non conosco HMail server ma forse, osservando quest'immagine si riesce a fare.
Se lo fai, dopo verifica dieci volte che l'autenticazione sia necessaria in tutti gli altri casi altrimenti ti ritrovi con un open-realy.

ciao
Modificato da BrightSoul il 16 luglio 2012 23.32 -

Enjoy learning and just keep making
27 messaggi dal 07 luglio 2008
Ciao e grazie mille per la risposta.

Ho seguito gli esempi che mi hai passato.

Tutto funziona correttamente se in IIS (7.5) imposto le credenziali in "Posta SMTP" nel nodo applicazione ma questo non mi permette di centralizzare la gestione degli accessi al server SMTP. Comunque è la prova che la filiera Applicazione > IIS > MailServer funzionano.

Se imposto le credenziali in "Posta SMTP" del nodo server le email non partono.

Tieni presente che:
Quando imposto le credenziali in "Posta SMTP" del nodo server, IIS scrive correttamente le credenziali nel web.config di root della versione 2.0 del framework e che ho impostato la mia applicazione per usare la stessa versione del framework ma le mail non vengono inviate.

Ho saltato qualcosa?

Non è che per utilizzare le credenziali impostate nel nodo server (web.config di root) devo mettere qualcosa di specifico nel web.config dell'applicazione?

Hai qualche idea?

Ultima domanda: perchè impostando le credenziali in "Posta SMTP" del nodo server IIS scrive le credenziali nel web.config di root della versione 2.0 del framework e non nel web.config della V.4 del framework?
(Ho registrato la versione 4 del framework con aspnet_regiis.exe -i)

Grazie ancora per il tempo che mi hai dedicato.
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao, prego! La tua esposizione del problema è molto chiara :)

agserna ha scritto:

Quando imposto le credenziali in "Posta SMTP" del nodo server, IIS scrive correttamente le credenziali nel web.config di root della versione 2.0 del framework e che ho impostato la mia applicazione per usare la stessa versione del framework ma le mail non vengono inviate.

Controlla il web.config dell'applicazione. Può darsi che, dopo varie prove, ti sia rimasto un elemento system.net/mailSettings con attributi vuoti o non esatti. Se lo trovi, rimuovilo. Esempio:
    <system.net>
        <mailSettings>
            <smtp>
                <network host="" />
            </smtp>
        </mailSettings>
    </system.net>

Il web.config dell'applicazione e quello di root vengono "appiattiti" l'uno sull'altro, a formare una configurazione unica. Cioè: se esiste un elemento system.net/mailSettings in entrambi i file di configurazione, quello presente nel web.config dell'applicazione avrà la priorità perché più specifico, e i valori che avevi messo nel web.config di root risulteranno sovrascritti. Nell'esempio qui sopra, un host vuoto ("") sovrascriverà quello eventualmente presente nel web.config di root e potrebbe essere la causa del mancato recapito delle email.

Istanzia un SmtpClient e fai un banale Response.Write delle sue proprietà, giusto per verificare se contengono i valori che ti aspetti. Questo pezzo di codice stamperà l'Host e lo username.
using (var smtpClient = new SmtpClient())
{
    var messaggio = string.Format("Host: {0}, Nome utente: {1}",
        smtpClient.Host,
        (smtpClient.Credentials as NetworkCredential).UserName);
    Response.Write(messaggio);
}


agserna ha scritto:

ho impostato la mia applicazione per usare la stessa versione del framework

Penso che sia superfluo dirlo ma... occhio anche alla versione a 32 o 64 bit. Se sull'application pool della tua applicazione hai impostato "Attiva applicazioni a 32 bit", il file web.config di root da scegliere sarà quello che si trova dentro %windir%\Microsoft.NET\Framework, altrimenti quello dentro %windir%\Microsoft.NET\Framework64

agserna ha scritto:

Non è che per utilizzare le credenziali impostate nel nodo server (web.config di root) devo mettere qualcosa di specifico nel web.config dell'applicazione?

No, non devi mettere nulla. Puoi leggere qui di come Asp.Net calcola la configurazione finale a partire dai molteplici web.config.
http://msdn.microsoft.com/it-it/library/ms178685.aspx#calculating_configuration_settings_at_runtime


agserna ha scritto:

Ultima domanda: perchè impostando le credenziali in "Posta SMTP" del nodo server IIS scrive le credenziali nel web.config di root della versione 2.0 del framework e non nel web.config della V.4 del framework?

Non ne ho idea... :/ neanche impostando il framework 4 come predefenito, né usando l'editor di configurazione sono riuscito a farlo scrivere sul web.config di root del framework 4.

Pazienza, puoi pur sempre editarli tutti col blocco note. Per evitare di ripetere i dati SMTP in tutti e 4 i file (2 per la v2.0 e 2 per la v4.0), puoi crearti un file .config esterno e digitarli lì dentro.
I 4 web.config, poi, mediante l'attributo configSource dell'elemento <smtp> referenzieranno tutti questo file. Qui trovi un esempio:
http://stackoverflow.com/questions/804427/storing-smtp-outside-the-web-config-file


ciao
Modificato da BrightSoul il 18 luglio 2012 23.01 -

Enjoy learning and just keep making
27 messaggi dal 07 luglio 2008
.... in effetti.... nell'applicazione di test usavo l'application pool settata a 32 bit

Ora tutto funziona.

Sei mitico.

Grazie

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.