Inviare una pagina web in email

venerdì 08 luglio 2011 - 09.52
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Visual Studio Express

matteocotugno Profilo | Newbie

Salve, sono alle prime armi con ASP.NET.
La mia domanda è: come si può inviare una pagina web via mail con ASP.NET come avveniva con il vecchio metodo .CreateMHTMLBody del CDOSYS con Classic ASP?

Preciso che utilizzo linguaggio ASP.NET - VB e seguendo questo esempio: http://www.systemnetmail.com/faq/4.8.aspx, l'email arriva correttamente al destinatario, ma nel body la pagina web "inviata" è priva di qualsiasi personalizzazione, quali eventuali stili css, immagini etc. risultando quindi "poco presentabile".

Grazie, Matteo

Gluck74 Profilo | Guru

controlla il codice che viene generato dentro la mail. Le immagini e i riferimenti al CSS, "puntano" in maniera corretta? Ovvero gli url sono corretti ed esistenti? se prendi un url a caso di un'immagine che sta dentro la tua pagina e lo metti nel browser, l'immagine è raggiungibile?


____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

matteocotugno Profilo | Newbie

Intanto grazie per la cortese risposta.

Effettivamente ho seguito il tuo consiglio ed ho fatto alcuni test.
Ho creato una semplicissima pagina .aspx ed ho inserito due immagini, una con il percorso relativo e l'altra con il percorso assoluto.

Ho spedito la mail e l'immagine con il percorso assoluto si vede, mentre l'altra no; quindi il problema è proprio quello che avevi individuato.

C'è un modo per ovviare a questo?
Considera che il sito web lo sto realizzando con Visual Web Developer 2010 Express, mentre in azienda uso IIS e con i percorsi assoluti non è il massimo!

Grazie ancora
Saluti, Matteo

matteocotugno Profilo | Newbie

Forse ho trovato una buona soluzione.
Praticamente ho pensato questo:
Inzialmente, nel db, inserisco parte dell'indirizzo web, ad esempio, nell'ambiente test sarà: http://localhost:59714/, mentre in produzione (una Intranet aziendale): http://IPSERVER/

Nella pagina che voglio inviare via email, le immagini, le assegno in questo modo:
mi ricavo prima la variabile percorso dal db:

Dim percorso As String
percorso = " http://localhost:59714/" ' ovvero valore preimpostato e prelevato dal Db

poi inserisco l'immagine in questo modo:
<img src="<%=percorso %>immagini/immagine_test.gif" alt="TEST" />

Ho provato e funziona alla grande.
Devo approfondire meglio per quanto riguarda i riferimenti dei css esterni, mentre per gli stili inclusi nella pagina non ci sono problemi.

Ovviamente è ben accetto ulteriore parere per evitare questo stratagemma, anche se in questo modo è una cosa banalissima e potrebbe andare già bene.

Saluti, Matteo

Gluck74 Profilo | Guru

ciao,
la soluzione di creare tutti i percorsi assoluti utilizzando la variabile percorso è corretta.
Solo una correzione: invece di memorizzare il percorso sul db e rileggerlo quando vuoi inserire la pagina nella mail, puoi calcolarlo direttamente dal server dove è in esecuzione:
HttpContext context = HttpContext.Current; string appPath = string.Empty; //Checking the current context content if (context != null) { //Formatting the fully qualified website url/name appPath = string.Format("{0}://{1}{2}{3}", context.Request.Url.Scheme, context.Request.Url.Host, context.Request.Url.Port == 80 ? string.Empty : ":" + context.Request.Url.Port, context.Request.ApplicationPath); }

in questo modo non devi preoccuparti di salvare l'indirizzo root dell'applicazione ogni volta che cambi server.


Ciao

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

matteocotugno Profilo | Newbie

Grazie mille, mi hai datto un ottimo spunto.

Tuttavia, considerato che utilizzo il linguaggio VB, pubblico la semplicissima soluzione che ho adottato per ricavarmi solo la parte iniziale dell'indirizzo (sperando possa essere utile ad altri):

<%
Dim percorso As String
percorso = (Replace(Request.Url.ToString, Request.Path.ToString, ""))
%>

così si otterrà la parte iniziale del percorso, ad esempio nel mio caso:

-In ambiente test con Visual Web Developer 2010 Express: http://localhost:59714
-In ambiente di produzione, ad es. in una Intranet: http://10.x.x.x

l'immagine, in definitiva, sarà scritta così:
<img src="<%=percorso %>/webapplication/immagini/immagine_test.gif" alt="TEST" />

Ovviamente stesso discorso vale anche per il percorso dei css o altro.

Grazie ancora
Saluti, Matteo

Gluck74 Profilo | Guru

contolla che il codice che hai scritto funzioni anche per i siti che hanno percorsi più complessi:
//localhost/mySite/default.aspx. (dove appunto la root del sito è "/mySite/", non semplicemente "/")

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

matteocotugno Profilo | Newbie

Si, funziona, ho già verificato.
Infatti, nell'esempio precedente, l'immagine verrà scritta così (dove webapplication è il nome dell'applicazione web):

<img src="<%=percorso %>/webapplication/immagini/immagine_test.gif" alt="TEST" />

Volendo intercettare anche quest'ultimo, si potrebbe implementare ulteriormente il precedente script che ho pubblicato:

<%
Dim percorso As String
percorso = (Replace(Request.Url.ToString, Request.Path.ToString, "")) & Request.ApplicationPath
%>

Con Request.ApplicationPath ricavo il nome della webapplication, che aggiungo al percorso riavato con lo scritp della risposta precedente.

la variabile percorso ricavata, in definitiva, sarà:

-In ambiente test con Visual Web Developer 2010 Express: http://localhost:59714/WEBAPPLICATION
-In ambiente di produzione, ad es. in una Intranet: http://10.x.x.x/WEBAPPLICATION

l'immagine, a questo punto, sara scritta così (si potrà omettere il nome della webapplication):
<img src="<%=percorso %>/immagini/immagine_test.gif" alt="TEST" />

Ciao e ancora grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5