Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

4.b

Enviar email com anexo

Recommended Posts

Olá Pessoa,

 

estou tentando desenvolver um script para enviar email com anexo.

A idéia é fazer o upload do arquivo primeiro e logo depois anexar o arquivo no email:

 

 

<%
  If Not IsEmpty(Request.Form) Then
  
	If Request.Form("file") <> "" Then
		Set obj_Upload = Server.CreateObject("SoftArtisans.FileUp")
		obj_Upload.Path = Server.MapPath("./upload") 'local onde será gravado o arquivo
		obj_Upload.Form("File").Save
		Session("arquivo") = obj_Upload.Form("File").ServerName 'recupera o nome do arquivo no servidor
		Response.Write "<script>alert('Total de Bytes Enviados: " & obj_Upload.TotalBytes & "')</script>"
		Set obj_Upload = Nothing
	End If

	Set Mailer = Server.CreateObject("SMTPsvg.Mailer")
	Mailer.FromName = Request("Nome")
	Mailer.FromAddress = Request("email")
	Mailer.RemoteHost = "localhost"
	Mailer.Recipient  = "contato@email.com.br"
	Mailer.Subject = "E-mail teste"
	If Request.Form("file") <> "" Then
	  Mailer.AddAttachment(Session("Arquivo")) 
	End If
	Mailer.ContentType = "text/html"

	Mailer.BodyText = "<b>Nome:</b> " & Request.form("nome") & vbcrlf
	Mailer.BodyText = "<b>Assunto:</b> " & Request.form("assunto") & vbcrlf
	Mailer.BodyText = "<b>Email:</b> " & Request.form("email") & vbcrlf
	Mailer.SendMail
	
	Response.Write "Email enviado!"

  Else	
%>
  <form onsubmit="return verifica_form(this);" action="teste2.asp" method="post">
	Nome: <input type="text" size="38" name="nome" df_verificar="sim" onkeypress="desabilita_cor(this)" /><br>
	Assunto: <input type="text" size="38" name="assunto" df_verificar="sim" onkeypress="desabilita_cor(this)" /><br>
	Email: <input type="text" size="38" name="email" df_verificar="sim" onkeypress="desabilita_cor(this)" /><br>
	Arquivo: <input name="file" type="file" size="40"><br>
	<input type="submit" name="enviar" value="enviar">
  </form>
<%
  End If
%>

 

Erro que está ocorrendo:

Request object error 'ASP 0206 : 80004005'

Cannot call BinaryRead

/teste2.asp, line 14 = obj_Upload.Form("File").Save

Cannot call BinaryRead after using Request.Form collection.

 

Alguem sabe ajudar?

Se alguem tiver um outro código de upload acho que pode resolver, subistituindo por esse.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sempre que for criar um upload tem que utilizar enctype="multipart/form-data" na tag FORM.

<form onsubmit="return verifica_form(this);" action="teste2.asp" method="post" enctype="multipart/form-data">

 

Sobre outros scripts de Upload, é só pesquisar no Fórum. Encontrará vários exemplos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

quando acrescento enctype="multipart/form-data" o script não dispara o email... mesmo sem enviar um arquivo pra upload ele não dispara um email, muito estranho.

 

Existe algum script para upload sem usar esse enctype="multipart/form-data" ?

Ou melhor, alguem sabe onde acho um script para envio de email com anexo como esse que estou desenvolvendo, estou desde ontem apanhando disso.

 

Obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não há como fazer upload sem utilizar enctype="multipart/form-data". Pelo menos desconheço.

 

Quando utilizar enctype, você não conseguirá acessar os campos através de Request.Form.

 

Você tem que declarar o componente de upload no inicio do código e ao invés de utilizar Request.Form, você utiliza Componente.Form (ou então leia a documentação do componente e veja como acessar o campo corretamente).

 

Sobre outros exemplos de envio de e-mail com anexo, é só pesquisar no Fórum, como já havia falado. Esse assunto já foi discutido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hargon,

 

na linha (Mailer.AttachFile) eu devo informar o caminho do arquivo que está no servidor, ou seja envia-lo primeiro para web pra depois anexa-lo no email ou posso apenas informar o caminho do arquivo que está na maquina da pessoa que o script conseguirá enviar o anexo?

 

exemplo: Mailer.AttachFile "C:\Documents and Settings\Jonathan\Meus documentos\teste.txt"

 

Pq se o script enviar assim está resolvido o problema, pois não vou precisar fazer o upload do arquivo para depois enviar o email...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigatoriamente você tem que fazer o upload para depois anexar. O caminho a ser informado, é o caminho físico no servidor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora virou desafio..

 

Como fazer um FORMULÁRIO para envio de email com anexo numa mesma página? Preciso oferecer uma página prática para o visitante, ele deve preencher os dados, escolher o arquivo para anexar e clicar em enviar o email...

 

Então teria que ter no mesmo formularia o envio do arquivo e do email.

Como fazer isso junto?

 

Não achei nenhum script para isso ou post...

 

Alguem ja trabalhou nisso pode ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O formulário é um formulário de envio de e-mail comum. A única novidade é acrescentar o enctype="multipart/form-data" na tag FORM e o campo type="file".

 

O resto você faz no código de envio de e-mail. Primeiro você faz o upload do arquivo. Verifica se está Ok. Se estiver ai você manda enviar o e-mail com anexo. Se não estiver você não envia o e-mail e avisa que ocorreu o erro com upload. Essa verificação é basicamente a utilização de IF.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tive uma idéia: será que não teria como retirar enctype e enviar o caminho do arquivo para a variável do upload, assim ele puxaria o caminho do arquivo e enviaria p/ servidor. Assim será possível usar o request.form para enviar o email... algo do tipo

 

<%
  If Request.Form("email") <> "" Then
  
	If Request.Form("file") <> "" Then
		Set obj_Upload = Server.CreateObject("SoftArtisans.FileUp")
		obj_Upload = Request.Form("file")
		obj_Upload.Path = Server.MapPath("./upload") 'local onde será gravado o arquivo
		obj_Upload.Save
		Session("arquivo") = obj_Upload.Form("File").ServerName 'recupera o nome do arquivo no servidor
		Response.Write "<script>alert('Total de Bytes Enviados: " & obj_Upload.TotalBytes & "')</script>"
		Set obj_Upload = Nothing
	End If

	Set Mailer = Server.CreateObject("SMTPsvg.Mailer")
	Mailer.FromName = Request("Nome")
	Mailer.FromAddress = Request("email")
	Mailer.RemoteHost = "localhost"
	Mailer.Recipient  = "contato@email.com.br"
	Mailer.Subject = "E-mail teste"
	If Request.Form("file") <> "" Then
	  Mailer.AddAttachment(Session("Arquivo")) 
	End If
	Mailer.ContentType = "text/html"

	Mailer.BodyText = "<b>Nome:</b> " & Request.form("nome") & vbcrlf
	Mailer.BodyText = "<br><b>Assunto:</b> " & Request.form("assunto") & vbcrlf
	Mailer.BodyText = "<br><b>Email:</b> " & Request.form("email") & vbcrlf
	Mailer.SendMail
	
	Response.Write "Email enviado!"

  Else	
%>
  <form action="teste2.asp" method="post">
	Nome: <input type="text" size="38" name="nome"><br>
	Assunto: <input type="text" size="38" name="assunto"><br>
	Email: <input type="text" size="38" name="email"><br>
	Arquivo: <input name="file" type="file" size="40"><br>
	<input type="submit" name="enviar" value="enviar">
  </form>
<%
  End If
%>

Acrescentei essa linha obj_Upload = Request.Form("file")

Porem não funcionou, o script não consegue upar o arquivo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa já me entrometendo na discussão, estou com o memso problema, quer dizer estava, mas vendo esse tópico consegui resolver, mais uma vez o hargon está certo você tem q usar o enctype="multipart/form-data" para fazer upload ... é só você ir no laboratório de scripts do forúm de pegar um componente de upload sem componentes ... e incluir no seu formulário e funciona´perfeito ... Valeuuuu hargon Abraçãoooo

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Upload eu consegui fazer, a questão é como enviar o email depois do upload tudo na mesma página no mesmo form.

Pois quando faço o upload envio os dados usando o enctype="multipart/form-data", ai dessa forma o formulario de envio de email nao consegu puxar as informações que o visitante digitou atraves dos request.form("nome")

 

teria algo pra substituir o request.form("nome") ao usar o enctype="multipart/form-data" ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é... ele não recupera através do Request.Form, mas existe outras formas de recuperar, conforme falei anteriormente.

 

Cada componente tem sua form de substituir o Request.Form, mas todos eles possibilitam acessar os campos do formulários.

 

Se você buscar pela documentação do componente que está utilizando, provavelmente terá um exemplo de realizar upload e pegar os campos do formulário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

HAAAAAA!!! golpe de karate!

Consegui resolver mais agora tem outro problema... O formulário ficou como binary, então o email não vai chegar nunca em html. Tem como fazer alguma coisa para transformar o corpo do email em HTML ou destransforma-lo de binary?

 

Pow hoje em dia tem jeito pra tudo, alguem sabe uma dica?

Segue abaixo o código funcionando!

 

<%
  Set Upload = Server.CreateObject("SoftArtisans.FileUp")
  If Trim(Upload.Form("email")) <> "" Then
  
	If Upload.Form("file") <> "" Then
	  Upload.Path = Server.MapPath("./upload") 'local onde será gravado o arquivo
	  Upload.Form("File").Save
	  Session("arquivo") = Upload.Form("File").ServerName 'recupera o nome do arquivo no servidor
	End If

	Set Mailer = Server.CreateObject("SMTPsvg.Mailer")
	Mailer.FromName = Upload.Form("Nome")
	Mailer.FromAddress = Upload.Form("email")
	Mailer.RemoteHost = "localhost"
	Mailer.Recipient  = "contato@email.com.br"
	Mailer.Subject = "E-mail teste"
	If Upload.Form("file") <> "" Then
	  Mailer.AddAttachment(Session("Arquivo")) 
	End If
	Mailer.ContentType = "text/html"

	Mailer.BodyText = "<b>Nome:</b> " & Upload.Form("nome") & vbcrlf
	Mailer.BodyText = "<br><b>Assunto:</b> " & Upload.Form("assunto") & vbcrlf
	Mailer.BodyText = "<br><b>Email:</b> " & Upload.Form("email") & vbcrlf
	Mailer.SendMail
	
	Response.Write "Email enviado!"
	
	Session("arquivo") = ""
	Set Upload = Nothing

  Else	
%>
  <form action="teste2.asp" method="post" enctype="multipart/form-data">
	Nome: <input type="text" size="38" name="nome"><br>
	Assunto: <input type="text" size="38" name="assunto"><br>
	Email: <input type="text" size="38" name="email"><br>
	Arquivo: <input name="file" type="file" size="40"><br>
	<input type="submit" name="enviar" value="enviar">
  </form>
<%
  End If
%>

O problema é que o corpo do email não chega mais como HTML, somente como binary, tem alguma coisa pra ser feita nessa linha que reverte isso?

Mailer.ContentType = "text/html"

 

Obrigado a todos pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é uma "falha" do componente que você está utilizando.

 

Ele ignora a propriedade ContentType quando você anexa um arquivo.

 

Não sei se há outra forma de formatar o corpo do e-mail com esse componente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.