ENVIAR EMAIL COM VARIOS DESTINATARIOS
Boa Noite
eu estou fazendo um sisteminha que quando o usuario da um click em um determinado LinkLabel o realizado uma pesquisa com os emails e então o usuario pode enviar para todos os usuarios. Junto com o SELECT coloquei uma variavel contendo [Ô] ; [Ô].
dim ponto as String = [Ô] ; [Ô]
for i=0 to dados.rows.count -1
destinatario.Text = dados.Rows(i).Item([Ô]email[Ô])+vbnewline+ponto
next i
O problema é que so é permitido enviar o email dessa seguinte maneira:
email;email;email;
e esse ponto no final do ultimo email da erro. Estou tentando fazer com que quando for buscado o ultimo registro não apareça esse [Ô] ; [Ô].
eu estou fazendo um sisteminha que quando o usuario da um click em um determinado LinkLabel o realizado uma pesquisa com os emails e então o usuario pode enviar para todos os usuarios. Junto com o SELECT coloquei uma variavel contendo [Ô] ; [Ô].
dim ponto as String = [Ô] ; [Ô]
for i=0 to dados.rows.count -1
destinatario.Text = dados.Rows(i).Item([Ô]email[Ô])+vbnewline+ponto
next i
O problema é que so é permitido enviar o email dessa seguinte maneira:
email;email;email;
e esse ponto no final do ultimo email da erro. Estou tentando fazer com que quando for buscado o ultimo registro não apareça esse [Ô] ; [Ô].
Faz um ajuste no seu for
Troca a posição do ponto, assim vc sempre irá colocar o ponto e virgula na frente do email e apenas coloquei uma alternativa para verificar se é o primeiro email que esta sendo selecionado, ficaria algo assim:
if trim(destinatario.txt)=[Ô][Ô] then
destinatario.Text = dados.Rows(i).Item([Ô]email[Ô])
else
destinatario.Text =destinatario.Text + vbnewline+ponto+dados.Rows(i).Item([Ô]email[Ô])
endif
Acho que isso pode te ajudar
Troca a posição do ponto, assim vc sempre irá colocar o ponto e virgula na frente do email e apenas coloquei uma alternativa para verificar se é o primeiro email que esta sendo selecionado, ficaria algo assim:
if trim(destinatario.txt)=[Ô][Ô] then
destinatario.Text = dados.Rows(i).Item([Ô]email[Ô])
else
destinatario.Text =destinatario.Text + vbnewline+ponto+dados.Rows(i).Item([Ô]email[Ô])
endif
Acho que isso pode te ajudar
Bom eu evitaria fazer um IF a cada interação, isso aumenta o processamento, pois só é necessário na primeira vez. Assim a alternativa é mais simples.
Testa se há registros para concatenar (só usa IF uma vez) depois inverte a ordem de preenchimento da variável assim:
Dim ponto as String = [Ô] ; [Ô]
IF dados.rows > 1 Then
[ô]tem dados no grid
destinatario.Text = dados.Rows(0).Item([Ô]email[Ô])
For i=1 to dados.rows.count -1
destinatario.Text = destinatario.Text + vbnewline+ponto + dados.Rows(i).Item([Ô]email[Ô])
Next i
End IF
next i
Nota: Em Dot.Net o uso de concatenação cria novas variáveis em memória a cada interação. Isso em função do npumero de repetições pode aumentar em milhares de vezes o tempo necessário para a operação. A solução conrreta nesses casos é o uso do método StringBuider da Classe String. Ela é infinitamente mais rápida. Já postei um texto a algum tempo aqui, com um exemplo de performance com 10 mil registros ela foi instantânea.
Ex:
using System
using Texto = System.Text.StringBuilder
Dim ponto as String = [Ô] ; [Ô]
IF dados.rows > 1 Then
[ô]tem dados no grid
Texto myEmails = new Texto()
myEmails.Append(dados.Rows(0).Item([Ô]email[Ô]));
destinatario.Text =
For i=1 to dados.rows.count -1
myEmails.Append(vbnewline+ponto + dados.Rows(i).Item([Ô]email[Ô]))
Next i
destinatario.Text = myEmails
End IF
Testa se há registros para concatenar (só usa IF uma vez) depois inverte a ordem de preenchimento da variável assim:
Dim ponto as String = [Ô] ; [Ô]
IF dados.rows > 1 Then
[ô]tem dados no grid
destinatario.Text = dados.Rows(0).Item([Ô]email[Ô])
For i=1 to dados.rows.count -1
destinatario.Text = destinatario.Text + vbnewline+ponto + dados.Rows(i).Item([Ô]email[Ô])
Next i
End IF
next i
Nota: Em Dot.Net o uso de concatenação cria novas variáveis em memória a cada interação. Isso em função do npumero de repetições pode aumentar em milhares de vezes o tempo necessário para a operação. A solução conrreta nesses casos é o uso do método StringBuider da Classe String. Ela é infinitamente mais rápida. Já postei um texto a algum tempo aqui, com um exemplo de performance com 10 mil registros ela foi instantânea.
Ex:
using System
using Texto = System.Text.StringBuilder
Dim ponto as String = [Ô] ; [Ô]
IF dados.rows > 1 Then
[ô]tem dados no grid
Texto myEmails = new Texto()
myEmails.Append(dados.Rows(0).Item([Ô]email[Ô]));
destinatario.Text =
For i=1 to dados.rows.count -1
myEmails.Append(vbnewline+ponto + dados.Rows(i).Item([Ô]email[Ô]))
Next i
destinatario.Text = myEmails
End IF
Porque você não tira esse último ponto usando o MID?
Exemplo:
Exemplo:
Dim Destinatarios As String = Nothing
Dim Ponto As String = [txt-color=#e80000][Ô];[Ô][/txt-color]
For i=0 To dados.Rows.Count -1
Destinatarios += dados.Rows(i).Item([txt-color=#e80000][Ô]email[Ô][/txt-color]) + VbNewLine + Ponto
Next i
Destinatarios = Mid(Destinatarios,1, InstrRev(Destinatarios, Ponto) - 1)
destinatario.Text = Destinatarios
Muito Obrigada pelas dicas
LUIS HERRERA não conhecia o método StringBuider, vou estudar mais esse método.
LUIS HERRERA não conhecia o método StringBuider, vou estudar mais esse método.
Tópico encerrado , respostas não são mais permitidas