quinta-feira, 18 de junho de 2009

ENVIANDO E-MAIL VIA VB.NET

Abaixo, segue um pequeno código que envia e-mails via VB.NET
para uma conta no gmail.

As contas de e-mail abaixo são fictícias. Você deve alterá-las para contas reais.


O código abaixo foi colocado dentro de um timer programado para ser executado a cada cinco minutos (suas propriedades são timer4.Interval = 300000; timer4.Enabled = True).

Quando o tempo de cinco minutos é atingido, o código é então disparado.



Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick

If ExisteConexaoInternet() = True Then



'------------ MANDANDO E-MAILS PELO GMAIL
Dim NumeroFigura As String = "C:\temp\winnt" + "imagem1.jpg"
Const destino As String = "teresaflorindo@hotmail.com"
Const Body As String = "Teste de e-mail. Dê uma olhada!!"
Dim respostaEnvioLabel As String


Dim remetenteEmail As String = "leoflorindo@gmail.com" '; //O e-mail do remetente

Dim mail As MailMessage = New MailMessage()

mail.To.Add(destino)

mail.From = New MailAddress(remetenteEmail, "Teresa Florindo", System.Text.Encoding.UTF8)

mail.Subject = "Assunto: Imagens do computador em uso"

mail.SubjectEncoding = System.Text.Encoding.UTF8

mail.Body = Body

mail.BodyEncoding = System.Text.Encoding.UTF8

mail.IsBodyHtml = True

mail.Priority = MailPriority.High

mail.Attachments.Add(New Attachment(NumeroFigura))

Dim client As SmtpClient = New SmtpClient() '//Adicionando as credenciais do seu e-mail e senha:

client.Credentials = New System.Net.NetworkCredential(remetenteEmail, "jeovaedeus")
client.Port = 25
client.Host = "smtp.gmail.com" '; //Definindo o provedor que irá disparar o e-mail


client.EnableSsl = True '; //Gmail trabalha com Server Secured Layer

Try

client.Send(mail)
respostaEnvioLabel = "Envio do E-mail com sucesso"
'MsgBox(respostaEnvioLabel)

Catch ex As Exception


respostaEnvioLabel = "Ocorreu um erro ao enviar:" + ex.Message
'MsgBox(respostaEnvioLabel)


End Try
'-------------------- FIM DO CÓDIGO PARA O GMAIL------------------------------


End If

End Sub

Aqui está somente descrito o envio de um e-mail simples via internet. A porta de acesso é a 25. O servirdor smtp.gmail.com é informado como host.


Verifique que uma simples imagem está sendo enviada em anexo com a mensagem.

Para usar este exemplo, você deve criar uma conta no gmail para uso.



A função ExisteConexaoInternet() verifica se o computador está no caso logado a internet. Se estiver, é possível passar o e-mail sem que o usuário tenha qualquer conhecimento disso.

O código da função está descrito abaixo:

Private Function ExisteConexaoInternet() As Boolean

'Define uma URL válida para consultar

Dim url As New System.Uri("http://www.globo.com/")



'Monta a requisição HTTP

Dim req As System.Net.WebRequest

req = System.Net.WebRequest.Create(url)



'Tenta fazer a requisição

Try

Dim resp As System.Net.WebResponse

resp = req.GetResponse()

resp.Close()

req = Nothing



'Tudo certo... Temos conexão com a Internet

Return True

Catch ex As Exception

'Não deu... Conexão não dispon¡vel

req = Nothing

Return False

End Try

End Function

A função simplesmente verifica se é possível acessar com sucesso um site na internet (no caso o site da Globo). Se for possível, então há a possibilidade de se enviar e-mail via internet e o código de envio de e-mail é liberado.

sexta-feira, 12 de junho de 2009

NF-E: COLETANDO DADOS DO ARQUIVO DE SITUAÇÃO


Em alguns momentos, seja por erro no retorno do web service, seja por algo que impossibilite o acesso, os arquivos -proc-rec.xml para uma nfe enviada normalmente ao servido da sefaz poderão ser perdidos. Ao consultar o site da sefaz você constatará que a mesma já se encontra autorizada para uso, mas não possui ainda o arquivo -pro-rec.xml com número do protocolo informado no site.

Para alguns aplicativos de ERP isso pode significar um problema se de maneira normal estes aplicativos aguardam a recepção do arquivo -pro-rec.xml para validar no banco de dados da empresa a numeração do protocolo de autorização de uso e o status da nf-e no site da Sefaz.

Se o seu ERP move os arquivos de num-lot.xml, -rec.xml e -pro-rec.xml para uma outra pasta quando os mesmos são detectados e um deles não retorna - como o -pro-rec.xml - o trabalho do seu ERP estará comprometido. Você terá que criar um arquivo de pedido de situação da nf-e que enviou à Sefaz e atualizar os dados do protocolo de uso, hora de recepção e status da nf-e na mão... trabalho inglório!!!




Nessa caso, será preciso obter de um outro modo o número do protocolo de autorização da nf-e. Para obter os dados novamente, pode gerar um arquivo de pedido de status e deixar o retorno na mesma pasta onde deveria estar o arquivo -pro-rec.xml não recebido e dessa forma forçar seu ERP a ler o arquivo -sit.XML para resolver por si mesmo essa situação.


Um pedido de situação da nf-e enviado a Sefaz está listado abaixo. O arquivo é pequeno e bem simples de ser gerado:

<?xml version="1.0" encoding="UTF-8"?>
<conssitnfe xsi="http://www.w3.org/2001/XMLSchema-instance" xsd="http://www.w3.org/2001/XMLSchema" versao="1.07" xmlns="http://www.portalfiscal.inf.br/nfe">
<tpamb>1</tpamb>
<xserv>CONSULTA</xserv>
<chnfe
>13090604672291000115550110000000380000000494</chnfe>
</consSitNFe>

O nome do arquivo de pedido de situação é nfe-sit.xml.

Exemplo: 13090604672291000115550110000000380000000494-ped-sit.xml

O arquivo de retorno gerado por um pedido de situação traz em conjunto em seu interior o próprio número da nf-e, o número do protocolo de uso e o status da nf-e no site da sefaz:

< ?xml version="1.0" encoding="UTF-8"?>
<retConsSitNFe versao="1.07" xmlns="http://www.portalfiscal.inf.br/nfe"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.portalfiscal.inf.br/nfe retConsSitNFe_v1.07.xsd">

<infProt>Id="ID113090003033468">
<tpamb>1</tpamb>
<verAplic>1</verAplic>
<cStat>100</cStat>
<xMotivo>Autorizado o uso da NF-e</xMotivo
<cUF>13</cUF>
<chNFe>13090604672291000115550110000000400000000514</chNFe>
<dhRecbto>2009-06-12T08:50:58</dhRecbto>
<nProt>113090003033468</nProt>
<digVal>roFtqwdm/MZJQEmiXms/u3hwEe4=</digVal>
</infProt>


Para coletar a informação do número de protocolo para ser usado na impressão da DANFE, um simples IF a mais precisa ser acrescentado ao código de impressão da DANFE.

Você pode checar antes da impressão da DANFE se há a existência de um arquivo de pedidido de situação ou o arquivo pro-rec.xml de retorno do recibo.

Eis um código em VB.NET para isso:


Dim NomeArquivoRecibo As String

NomeArquivoRecibo = "F:\SisWin\IAM\NFE\RETORNO\PROCESSADOS\" + IdNfe + "-pro-rec.xml"

'Danfe Normal. Pega os dados dos recibos e do protocolo de uso
If TipodeEmissao = "1" Then


'Verifica se já houve retorno do arquivo selecionado
If IO.File.Exists(NomeArquivoRecibo) = False Then

Dim NomeArquivoRecibo5 As String

'Algo errado com o retorno do recibo. Procurar pelo arquivo de situação
'da NF-e. Necessário para os erros de falta de dados do arquivo -pro-rec.xml

'Ler dados do arquivo de retorno de situação, caso o status do
'recibo de retorno esteja diferente de 104

NomeArquivoRecibo5 = "F:\SisWin\NFE\RETORNO\PROCESSADOS" + IdNfe + "-sit.xml"
'Abrir o arquivo de retorno situação de status
Dim reader_5 As XmlTextReader = New XmlTextReader(NomeArquivoRecibo5)

If IO.File.Exists(NomeArquivoRecibo5) = False Then

MsgBox("Impressão da DANFE Cancelada!!! Sem Recibo de Retorno! Envie a NF-e primeiro a SEFAZ!!", MsgBoxStyle.Critical, "DANFE Coplast")
Exit Sub

Else

Do While (reader_5.Read())


Select Case reader_5.NodeType
Case XmlNodeType.Element

If reader_5.Name = "nProt" Then
LProtocolo2 = reader_5.ReadString

If LProtocolo2 <> "" Then
myRow2.NumProtocolo = LProtocolo2
End If

End If

End Select

Loop
reader_5.Close()


End If

(...)


Esse pequeno trecho fará a leitura do dado do Protocolo diretamente do arquivo -sit.xml gerado.

O trecho também pode ser utilizado para gravar o registro de protocolo no banco de dados a fim de evitar problemas quando não se consegue obter o -pro-rec.xml de modo correto no retorno do site da Sefaz.




Sorte a todos!

UM APLICATIVO PARA LEITURA DEVOCIONAL ANUAL DA BIBLIA EM ANDROID

Olá, pessoal!  Este novo projeto foi criado em Visual Studio 2019 em C#.Net com o Xamarin. Já está disponível no Google Play para vocês baix...