Email con allegato vb.net

mercoledì 14 aprile 2010 - 17.12

serrax Profilo | Junior Member

salve a tutti...
come ho scritto nel titolo del thread, dovrei inviare una e-mail con allegato, cioè che l'utente possa sfogliare nei suoi file e allegarne uno...

io sono già in possesso di uno script in vb.net, ma non riesco a capire una cosa...
in c# utilizzavo qualcosa del genere:

string strdir = "D:\\temp\\";

string strfilename = Path.GetFileName(txtFile.PostedFile.FileName);

txtFile.PostedFile.SaveAs(strdir + strfilename);

msg.Attachments.Add(new MailAttachment(strdir + strfilename));

in vb.net girando su google ho trovato questo:

Dim attachment As New Mail.MailAttachment("C:\percorso\file")
' Aggiungo l'allegato all'email
mailMessage.Attachments.Add(attachment)

solo che mi da errore nella riga dove c'è ("C:\percorso\file") ...

come posso risolvere??

grazie a tutti

kataklisma Profilo | Senior Member

>salve a tutti...
Ciao!

>come ho scritto nel titolo del thread, dovrei inviare una e-mail
>con allegato, cioè che l'utente possa sfogliare nei suoi file
>e allegarne uno...
>
>io sono già in possesso di uno script in vb.net, ma non riesco
>a capire una cosa...
>in c# utilizzavo qualcosa del genere:
>
> string strdir = "D:\\temp\\";
>
>string strfilename = Path.GetFileName(txtFile.PostedFile.FileName);
>
> txtFile.PostedFile.SaveAs(strdir + strfilename);
>
>msg.Attachments.Add(new MailAttachment(strdir + strfilename));
>
>in vb.net girando su google ho trovato questo:
>
>Dim attachment As New Mail.MailAttachment("C:\percorso\file")
> ' Aggiungo l'allegato all'email
> mailMessage.Attachments.Add(attachment)
>
>solo che mi da errore nella riga dove c'è ("C:\percorso\file")
>...
>
>come posso risolvere??
Potresti dirmi che errore viene generato e quando viene generato (debug, runtime) ?

>grazie a tutti
Di niente ;)

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

serrax Profilo | Junior Member

ciao
allora l'errore che mi esce è il seguente:

Invalid mail attachment 'C:\'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: Invalid mail attachment 'C:\'.

Source Error:


Line 30: Mail.SmtpMail.SmtpServer = "smtp.sitoweb.com"
Line 31:
Line 32: Dim attachment As New Mail.MailAttachment("C:\")
Line 33: ' Aggiungo l'allegato all'email
Line 34: mailMessage.Attachments.Add(attachment)


Source File: D:\Inetpub\webs\sitoweb\Lavora con noi.aspx Line: 32

kataklisma Profilo | Senior Member

>ciao
Ciao!

>allora l'errore che mi esce è il seguente:
>
>Invalid mail attachment 'C:\'.
>Description: An unhandled exception occurred during the execution
>of the current web request. Please review the stack trace for
>more information about the error and where it originated in the
>code.
>
>Exception Details: System.Web.HttpException: Invalid mail attachment
>'C:\'.
>
>Source Error:
>
>
>Line 30: Mail.SmtpMail.SmtpServer = "smtp.sitoweb.com"
>Line 31:
>Line 32: Dim attachment As New Mail.MailAttachment("C:\")
>Line 33: ' Aggiungo l'allegato all'email
>Line 34: mailMessage.Attachments.Add(attachment)
>
>
>Source File: D:\Inetpub\webs\sitoweb\Lavora con noi.aspx Line:
>32

Ma scusa, l'errore è normalissimo...l'argomento in MailAttachment ovvero "C:\" non punta a nessun file....piuttosto dovresti effettuare dei controlli sul percorso ed eventualmente inserire l'allegato!

Invalid mail attachment 'C:\'.

Guarda il tuo stesso codice in C#, effettuavi questa operazione

string strdir = "D:\\temp\\"; string strfilename = Path.GetFileName(txtFile.PostedFile.FileName); ... ... msg.Attachments.Add(new MailAttachment(strdir + strfilename))

Ovvero inserivi come argomento directory + filename!
------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

serrax Profilo | Junior Member

ah .....

e quindi in parole povere come potrei fare???

kataklisma Profilo | Senior Member

>ah .....
:)
>e quindi in parole povere come potrei fare???
:) se posti il codice te lo modifico....anche se dovresti farlo tu!E' un'ottimo modo per imparare....

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

serrax Profilo | Junior Member

ciao,
bhè in effetti il codice grosso modo l'ho fatto io.... infatti ho dovuto correggere una miriade di errori, ma ho sempre preso spunto da qualcosa trovata su google.....
comunque il codice è questo

Sub OnBtnSendClicked(ByVal s As Object, ByVal e As EventArgs)

If Page.IsValid Then

Dim theMessage As String
theMessage = "Hai ricevuto una mail inviata da http://www.sito.it<br/>"
theMessage += "<br/>"
theMessage += "Nome: " + Nome.Text + "<br/>"
theMessage += "E-mail: " + email.Text + "<br/>"
theMessage += "Dal Comune di: " + Comune.Text + ".<br/>"
theMessage += "Telefono: " + tel.Text + " <br/>"
theMessage += "Fax: " + fax.Text + "<br/>"
theMessage += "Messaggio inviato: " + messaggio.Text + "<br/>"

Dim mailMessage As New MailMessage()
mailMessage.From = email.Text
mailMessage.To = "mail@sito.it"
mailMessage.Subject = "Lavora con noi "
mailMessage.BodyFormat = MailFormat.Html
mailMessage.Body = theMessage
mailMessage.Priority = MailPriority.High
Mail.SmtpMail.SmtpServer = "smtp.sito.com"

Dim attachment As New Mail.MailAttachment("D:\\")
' Aggiungo l'allegato all'email
mailMessage.Attachments.Add(attachment)


SmtpMail.Send(mailMessage)

Response.Redirect("invio.aspx")
Else
lblResult.Text = "Inserisci il codice correttamente"
lblResult.ForeColor = Drawing.Color.Red
End If

End Sub


Grazie gentilissimo..... :D

kataklisma Profilo | Senior Member

>ciao,
Ciao!

>bhè in effetti il codice grosso modo l'ho fatto io.... infatti
>ho dovuto correggere una miriade di errori, ma ho sempre preso
>spunto da qualcosa trovata su google.....
>comunque il codice è questo
>
>Sub OnBtnSendClicked(ByVal s As Object, ByVal e As EventArgs)
>
> If Page.IsValid Then
>
> Dim theMessage As String
>theMessage = "Hai ricevuto una mail inviata da http://www.sito.it<br/>"
> theMessage += "<br/>"
> theMessage += "Nome: " + Nome.Text + "<br/>"
> theMessage += "E-mail: " + email.Text + "<br/>"
>theMessage += "Dal Comune di: " + Comune.Text + ".<br/>"
> theMessage += "Telefono: " + tel.Text + " <br/>"
> theMessage += "Fax: " + fax.Text + "<br/>"
>theMessage += "Messaggio inviato: " + messaggio.Text + "<br/>"
>
> Dim mailMessage As New MailMessage()
> mailMessage.From = email.Text
> mailMessage.To = "mail@sito.it"
> mailMessage.Subject = "Lavora con noi "
> mailMessage.BodyFormat = MailFormat.Html
> mailMessage.Body = theMessage
> mailMessage.Priority = MailPriority.High
> Mail.SmtpMail.SmtpServer = "smtp.sito.com"
>
>Dim attachment As New Mail.MailAttachment("D:\\")
> ' Aggiungo l'allegato all'email
> mailMessage.Attachments.Add(attachment)
>
>
> SmtpMail.Send(mailMessage)
>
> Response.Redirect("invio.aspx")
> Else
>lblResult.Text = "Inserisci il codice correttamente"
> lblResult.ForeColor = Drawing.Color.Red
> End If
>
> End Sub
Scusami ma sembra proprio che tu non abbia bisogno di inviare alcun allegato, se cosi fosse basta cancellare questo dal tuo codice :

Dim attachment As New Mail.MailAttachment("D:\\") ' Aggiungo l'allegato all'email mailMessage.Attachments.Add(attachment)

Altrimenti al posto di "D:\\" devi inserire il percorso del file, ti passo un link su dotnethell dove dovresti dare un'occhiata, in particolare al tag <input type="file" ...>
che permette di prelevare il percorso di un file.

http://www.dotnethell.it/tips/UploadFilesASPNET.aspx

>Grazie gentilissimo..... :D
di niente...e miraccomando non ti arrendere, smanetta!

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

serrax Profilo | Junior Member

ciao,
innanzitutto grazie per il tempo che mi stai dedicando....
in effetti mi ero dimenticato di dirti che nella pagina .aspx ho anche il seguente codice:

<input id="txtFile" runat="server" type="file" />

purtroppo mi serve inviare l'allegato, e onestamente non so come fare pur salvando il file nel server, onetamente poi da li lo dovrei inviare, cioè ci vedo un passaggio in più......

poi si tranquillo che smanetto.... è da solo che sto imparando tutte ste cose....

se puoi darmi qualche altro consiglio ne sarei lietissimo....

ciao e grazie

kataklisma Profilo | Senior Member

>ciao,
Ciao!

>innanzitutto grazie per il tempo che mi stai dedicando....
Tranquillo ;)

>in effetti mi ero dimenticato di dirti che nella pagina .aspx
>ho anche il seguente codice:
>
><input id="txtFile" runat="server" type="file" />
>
>purtroppo mi serve inviare l'allegato, e onestamente non so come
>fare pur salvando il file nel server, onetamente poi da li lo
>dovrei inviare, cioè ci vedo un passaggio in più......
Allora da quanto ho capito, vorresti inviare far inviare messaggi di posta elettronica ai tuoi visitatori permettendo l'aggiunta di un'allegato.

Se la cosa è cosi e quindi ho capito bene, ti ho gia risposto, devi fare l'upload sul server del file, devi acquisire il percorso del file di cui hai effettuato l'upload comprensivo di nome del file e lo devi inserire nel parametro di MailAttachment() , tutto cio puoi farlo sfruttando il metodo MapPath dell'oggetto Server e il nome del file caricato.

MailAttachment allegato = new MailAttachment(Server.MapPath(NomeFileCaricatoSuServer)); mailMessage.Attachments.Add(allegato);


Quindi ricapitolando :

1)Pagina di invio mail con sezione allegati che esegue l'upload del file su server;
2)Procedura di invio della mail inserendo il percorso del file caricato e il suo nome ovviamente.



>poi si tranquillo che smanetto.... è da solo che sto imparando
>tutte ste cose....
;) bravo...
>se puoi darmi qualche altro consiglio ne sarei lietissimo....
Spero sia stato piu chiaro ora....:)

>ciao e grazie
Di niente!

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

serrax Profilo | Junior Member

ciao,
si sei stato chiaro, in pratica devo fare due passaggi....

allora in pratica al momento ho aggiunto il seguente codice....

Dim file_sent As HttpPostedFile = PostedFile.PostedFile
Dim file_size As Integer = file_sent.ContentLength
If file_sent IsNot Nothing Then
If file_size > 0 Then
Dim dati As Byte() = New Byte(file_size - 1) {}
Dim filename As String = file_sent.FileName

'Scrittura del File su disco
Dim fs As New FileStream("C:\" & Path.GetFileName(filename), FileMode.Create)
fs.Write(dati, 0, file_size)
fs.Close()
End If
End If
Dim allegato As New MailAttachment(Server.MapPath(filename))
mailMessage.Attachments.Add(allegato)

anche se alla pen'ultima riga mi da un errore cmq mi è sorto un dubbio.... come faccio a sapere come si chiama il file che l'utente va a caricare??
nel senso come faccio poi a sapere il nome del file da richiamare??
forse sono un pò confuso io.....

kataklisma Profilo | Senior Member

>ciao,
Buongiorno!

>si sei stato chiaro, in pratica devo fare due passaggi....
Perfetto, quindi carica il file sul server e poi spedisci l'allegato via mail...

>anche se alla pen'ultima riga mi da un errore cmq mi è sorto
>un dubbio.... come faccio a sapere come si chiama il file che
>l'utente va a caricare??
>nel senso come faccio poi a sapere il nome del file da richiamare??

ti riporto un link ad una procedura ufficiale su msdn, c'è l'esempio dell'upload di un file, comunque sia il nome del file nella procedura lo acquisisci con filename dell'oggetto FileUpload :

http://msdn.microsoft.com/it-it/library/ms227669(v=VS.90).aspx

>forse sono un pò confuso io.....
Si sei un po confuso ma non ti preoccupare che lo risolviamo :)

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

serrax Profilo | Junior Member

ciao,
allora....
sono riuscito nel mio intento...
in pratica sono ripartito dal codice c# che avevo in precedenza (visto che funzionava) e l'ho convertito in Vb.net in pratica ho realizzato il tutto così:

Dim strdir As String = "D:\temp\"
Dim strfilename As String = Path.GetFileName(PostedFile.PostedFile.FileName)
PostedFile.PostedFile.SaveAs(strdir + strfilename)
mailMessage.Attachments.Add(New MailAttachment(strdir + strfilename))

in tal modo mi scrive il file sul server, e poi me lo allega all'e-mail......
in pratica proprio come dicevi tu, dovevo semplicemente guardare bene il codice che avevo già......

grazie per le dritte e per la pazienza......... :D

ora però avrei un altro problema......ma credo di dover aprire un altro thread .......
grazie ancora....
ciao

kataklisma Profilo | Senior Member

>ciao,
Ciao!

>allora....
>sono riuscito nel mio intento...
>in pratica sono ripartito dal codice c# che avevo in precedenza
>(visto che funzionava) e l'ho convertito in Vb.net in pratica
>ho realizzato il tutto così:
>
>Dim strdir As String = "D:\temp\"
>Dim strfilename As String = Path.GetFileName(PostedFile.PostedFile.FileName)
>PostedFile.PostedFile.SaveAs(strdir + strfilename)
>mailMessage.Attachments.Add(New MailAttachment(strdir + strfilename))
>
>in tal modo mi scrive il file sul server, e poi me lo allega
>all'e-mail......
>in pratica proprio come dicevi tu, dovevo semplicemente guardare
>bene il codice che avevo già......
:) Visto? Avevi la soluzione sotto gli occhi :)

>grazie per le dritte e per la pazienza......... :D
Di niente...

>ora però avrei un altro problema......ma credo di dover aprire
>un altro thread .......
Apri un'altro thread ;)

>grazie ancora....
>ciao
Ciao!

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5