Ir para conteúdo

POWERED BY:

Arquivado

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

Gilberto Jr

[Resolvido] Enviando E-mail com um while no corpo do email

Recommended Posts

Fala pessoal, mais uma vez eu aqui postando duvidas srsrs...

 

Eu fiz o carrinho de compra, tudo normal.. mas quando a pessoa clicar em salvar o pedido tem que ser enviado um email para o cliente informando os dados da compra etc.

 

No corpo do email tem que ir tambem a lista dos produtos. Então eu fiz um select etc.

set rs3 = conn.execute("select * from carrinho as a inner join produtos as b on a.idproduto=b.refproduto and a.cor=b.cor and a.tamanho=b.tamanho where a.idsession='"&Session.SessionID&"'")

 

E o email estou tentando enviar da seguinte forma.

set mensagem = server.createobject("CDONTS.NewMail")
mensagem.from = "Nome do email <email@dominio.com.br>"
mensagem.to = buscaCliente("email")
mensagem.Subject = "Confirmação pedido "&NumPedido("idpedido")&""
mensagem.bodyformat = 0
mensagem.mailformat = 0
mensagem.Body = while rs3.eof = false
response.Write(rs3("nome")&"<br>"&"Quantidade: "&rs3("quantidade"))
rs3.movenext
wend
mensagem.Send
Set objMail = nothing

 

Não da certo, aparece a mensagem de erro

Microsoft VBScript compilation error '800a03ea'

 

Syntax error

 

/clientes/projetopiloto/clubemarca/salvarpedido.asp, line 93

 

mensagem.Body = while rs3.eof = false

----------------^

 

Alguem poderia me ajudar ae...

 

valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não está dando certo porque o na linha 93 do seu código está assim:

mensagem.Body = while rs3.eof = false

na verdade você tem que colocar o while fora do mensagem.Body

While Not objRS.EOF
campo1 = ObjRs("campo1")
campo2 = ObjRs("campo2")
objRS.MoveNext
Wend

Depois de você pegar esses campos, ai sim você usa o mensagem.Body assim:

mensagem.Body= campo1 &","& campo2

Espero ajudar.

 

Para ficar mais fácil para você vou deixar um exemplo de envio de e-mail com o objeto CDO.Message

Exemplo:

Dim tpconex
tpconex="driver={SQL Server};" & _
"server=Maquina\SQLEXPRESS;" & _
"database=bd;" & _
"Uid=sa;" & _
"Pwd=xxxxxx;"
Set objConn = Server.CreateObject( "adodb.Connection" )
objConn.Open tpconex

nTabela="Sua_Tabela"

QueryStr = "Select * from "&nTabela&"
Set ObjRs = objConn.Execute(QueryStr)

If Not ObjRs.EOF and Not ObjRs.BOF Then

While Not objRS.EOF
Campo1 = ObjRs("Campo1")
Campo2=ObjRs("Campo2")
Campo3 = ObjRs("Campo3")
Campo4= objRs("Campo4")
email=objRs("campoemail")

objRS.MoveNext
Wend
objRs.close
 objConn.close
 Set objRs = Nothing
 Set objConn = Nothing

Smensagem="Vou enviar os Seguintes campos: "&Campo1&","&Campo2&","&Campo3&" e "&Campo4&"."

on error Resume Next		

set objEmail = CreateObject("CDO.Message") 
objEmail.From = "Seuemail@servidor.com"
objEmail.To = email
objEmail.Subject = "Estou mandando os seguintes campos:"
objEmail.HTMLBody  = Smensagem
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = x 
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") ="xxx.xxx.x.xxx" 
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = xx 
objEmail.Configuration.Fields.Update
objEmail.Send		 
Set objEmail = Nothing
Response.Write "A Mensagem foi enviada"
else
Response.Write "A mensagem NÃO foi enviada"
end if

existem outros objetos de envio de e-mail mas aqui onde eu trabalho só funciona este.

espero ajudar

Até +

Compartilhar este post


Link para o post
Compartilhar em outros sites

e pra melhor performance do code, subistitua o CDONTS pelo CDOSYS, que é a nova versão otimizada do componente

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ai Daniel1, e Xan

Com base na informacao que o o Dainel1 passou fiz o meu codigo da seguinte forma:

dim conn, rs3
'Criamos o objeto de conexão
Set conn = Server.CreateObject("ADODB.Connection") 

'Abrimos uma conexão com o banco de dados - [iMPORTANTE] altere os dados abaixo com as informações de sua base de dados
conn.Open("DRIVER={MySQL ODBC 5.1 Driver};SERVER=mysql;PORT=3306;DATABASE=database;USER=root;PASSWORD=****;OPTION=3;")
set rs3 = conn.execute("select * from carrinho as a inner join produtos as b on a.idproduto=b.refproduto and a.cor=b.cor and a.tamanho=b.tamanho")

If Not rs3.EOF and Not rs3.BOF Then

While Not rs3.EOF
Campo1 	= 	rs3("nome")
Campo2 	=	rs3("quantidade")
Campo3 	= 	rs3("precototal")
rs3.MoveNext
Wend

msg = Campo1&"<br>"&"Quantidade: "&Campo2&"<br>Preco: "&Campo3&""&"<br>-----------------------------------<br>"
response.Write(msg)
end if

quando escreve a informação na pagina sai assim

=====================================================================

Camisa Adidas Argentina I Techfit

Quantidade: 1

Preco: 139,86

-----------------------------------

 

Quando na verdade deveria sair assim:

=====================================================================

Camisa Puma Argélia 2 2010 S/Nº

Quantidade: 2

Preco: 159,8

-----------------------------------

Camisa Adidas Argentina I Techfit

Quantidade: 1

Preco: 139,86

-----------------------------------

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testa assim:

codigo original:

While Not rs3.EOF
Campo1 	= 	rs3("nome")
Campo2 	=	rs3("quantidade")
Campo3 	= 	rs3("precototal")
rs3.MoveNext
Wend

msg = Campo1&"<br>"&"Quantidade: "&Campo2&"<br>Preco: "&Campo3&""&"<br>-----------------------------------<br>"
response.Write(msg)

 

codigo alterado:

While Not rs3.EOF
Campo1 	= 	rs3("nome")
Campo2 	=	rs3("quantidade")
Campo3 	= 	rs3("precototal")
msg = Campo1&"<br>"&"Quantidade: "&Campo2&"<br>Preco: "&Campo3&""&"<br>-----------------------------------<br>"
response.Write(msg)
rs3.MoveNext
Wend

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala ae Vinicius Ianni,

da forma que você mostrou o codigo ali funciona para imprimir na tela. Porem o que eu preciso é colocar os valores gerado no while dentro do body do email.

 

*Tipo dentro do corpo do e-mail fazer um while pra imprimir a quantidade de produtos referente aquele pedido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Gilberto, não testei este script pois não tenho as suas tabelas mysql não sei se está funcionando.

Eu também não sei se era mais ou menos isso que você está querendo :natalsad:

Aguardo Respostas

dim conn, rs3
'Criamos o objeto de conexão
Set conn = Server.CreateObject("ADODB.Connection") 

'Abrimos uma conexão com o banco de dados - [iMPORTANTE] altere os dados abaixo com as informações de sua base de dados
conn.Open("DRIVER={MySQL ODBC 5.1 Driver};SERVER=mysql;PORT=3306;DATABASE=database;USER=root;PASSWORD=****;OPTION=3;")
set rs3 = conn.execute("select nome,quantidade,precototal from carrinho as a inner join produtos as b on a.idproduto=b.refproduto and a.cor=b.cor and a.tamanho=b.tamanho")
campos=rs3.fields.count-1

if not rs3.eof then
x=0

Do until rs3.eof

  for i to campos

msg =msg&rs3(i)&","	

  next
  msg1=split(msg,",")
  msg2=msg2&msg1(0)&"<br>"&"Quantidade: "&msg1(1)&"<br>Preco: "&msg1(2)&""&"<br>-----------------------------------<br>"
  msg=""
  x=x+1   

rs3.MoveNext
loop
response.Write(msg2)
Esle
Response.write("não há dados")

end if
set rs3 = Nothing
conn.close
set conn = Nothing

Espero ajudar

Até +

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala ae Daniel1.

Fechou, deu certo. So que reparei uma coisa, o campo de valor ele so esta pegando os numeros antes da virgula. Por exemplo:

Valor Total : R$ 169,00

o correto é

Valor Total : R$ 169,90

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na linha o códgio dentro do laço for/next:

for i to campos

       msg =msg&rs3(i)&";"     

  next 

troquei a vírgula [,] por ponto e vírgula [;].

 

Na linha o código depois do laço for/next dentro do laço until/loop:

 

msg1=split(msg,";")
  msg2=msg2&msg1(0)&"<br>"&"Quantidade: "&msg1(1)&"<br>Preco: "&msg1(2)&""&"<br>-----------------------------------<br>"
  msg=""

troquei a vírgula [,] por ponto e vírgula [;], fiz isso porque seus preços estão separados por vírgula [,], então ao colocar a função split(arquivo,",") ele deu erro.

 

Segue abaixo o código junto com o exemplo que dei incialmente neste tópico:

Dim tpconex
tpconex="DRIVER={MySQL ODBC 5.1 Driver};" & _
"server=mysql;" & _
"PORT=3306;" & _
"database=database;" & _
"USER=root;" & _
"PASSWORD=xxxxxx;"& _
"OPTION=3;"

Set conn= Server.CreateObject( "adodb.Connection" )
conn.Open tpconex

QueryStr = "select nome,quantidade,precototal from carrinho as a inner join produtos as b on a.idproduto=b.refproduto and a.cor=b.cor and a.tamanho=b.tamanho"
Set rs3 = conn.Execute(QueryStr)

campos=rs3.fields.count-1


If Not rs3.EOF and Not rs3.BOF Then

Do until rs3.eof

  for i to campos

       msg =msg&rs3(i)&";"     

  next
  msg1=split(msg,";")
  msg2=msg2&msg1(0)&"<br>"&"Quantidade: "&msg1(1)&"<br>Preco: "&msg1(2)&""&"<br>-----------------------------------<br>"
  msg=""

rs3.MoveNext
loop

rs3.close
 conn.close
 Set rs3 = Nothing
 Set conn = Nothing

on error Resume Next            

set objEmail = CreateObject("CDO.Message") 
objEmail.From = "Seuemail@servidor.com"
objEmail.To = "emailcliente@cliente.com.br"
objEmail.Subject = "Assunto do email"
objEmail.HTMLBody  = msg2
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = x 
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") ="xxx.xxx.x.xxx" 
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = xx 
objEmail.Configuration.Fields.Update
objEmail.Send            
Set objEmail = Nothing
Response.Write "A Mensagem foi enviada"
else
Response.Write "A mensagem NÃO foi enviada"
end if

Espero ajudar.

Até +

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.