|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
Como receber e-mails e tratar seus anexos |
Débuté par Bastiaan, 02 aoû. 2017 02:14 - 4 réponses |
| |
| | | |
|
| |
Membre enregistré 37 messages Popularité : +5 (5 votes) |
|
Posté le 02 août 2017 - 02:14 |
Oi pessoal
Estou desenvolvendo uma aplicação para enviar e receber e-mails. OK - tem um exemplo completo no WinDEV, mas este exemplo está complicado demais para entender (pelo menos para mim que estou começando).
Já consegui desenvolver toda a parte de envio de e-mails, inclusive com tratamento de anexos.
Estou com problema para entender como montar o mecanismo de recebimento de e-mails, mais precisamente como acessar e recuperar os anexos dos e-mails a serem recebidos.
Já entendi como recuperar as informações genéricas dos e-mails recebidos (assunto, mensagem, sender etc...)
Mesmo lendo os Helps não estou conseguindo montar o código para receber e tratar estes anexos de e-mails. Afinal preciso poder mostrá-los aos usuários e depois deixar que eles possam acessar os mesmos.
Com o código abaixo, consigo receber os e-mails, mas não sei como usar Email.Attach[I]) para tratar os anexos.
Por favor alguém poderia me ajudar, com um exemplo de código simples mas funcional, ou então me dizer o que falta no meu código abaixo.
meus antecipados agradecimentos - Bastiaan
MyMessage is Email MyPOP3Session is EmailPOP3Session // POP3 session MyPOP3Session..ServerAddress ="pop.xxxxxxxxxxxx.com.br" MyPOP3Session..Name ="sistema@xxxxxxxxxxxxxxx.com.br" MyPOP3Session..Password ="zzzz"// MyPOP3Session..Port=110 // inicio POP3 session IF NOT EmailStartSession(MyPOP3Session) THEN // Erro Error("Problema no POP3 session.", ErrorInfo()) ELSE // leitura da mensagens EmailReadFirst(MyPOP3Session, MyMessage) nContador is int nContador=0 I is int = 0 EmailNbMessage(MyPOP3Session) WHILE NOT Email.Out // Processa leituras das mensagens de e-mail nContador=nContador+1 // OK consigo obter as informações de cada e-mails Trace(nContador,MyMessage..Subject, MyMessage..Sender, MyMessage..Message) // // mas // estou tentando buscar a lista de anexos existentes para cada e-mail // estou usando as linhas abaixo mas não está funcionando // como faço para obter os arquivos anexos //
FOR I = 1 TO Email.NbAttach ListAdd(LIST_lista_de_anexos, Email.Attach[I]) END IF MyMessage..Subject="" THEN BREAK END // Read the next message EmailReadNext(MyPOP3Session, MyMessage) END // Disconnect from the session EmailCloseSession(MyPOP3Session) END |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 651 messages Popularité : +175 (223 votes) |
|
Posté le 02 août 2017 - 10:16 |
Bom dia
O attached mesmo não usado deve estar declarado com 1
Ok
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 37 messages Popularité : +5 (5 votes) |
|
Posté le 03 août 2017 - 17:39 |
Boller - grato pelo retorno mas me parece que não era esta a questão
Depois de muita pesquisa finalmente cheguei ao código que :
Cria a conexão como servidor POP3 Lê os e-mails que Ainda Não foram Lidos Grava as informações dos e-mails 2m 2 tabelas Na tabela e-mails, grava as informações para identificar o e-mail recebido Na tabela E_mais_anexo, grava as informações de cada anexo (se houver) que está ligado ao respectivo E_mail (ou seja se o anexo for por um PDF, este PDF, um JPG etc.. ficara gravado para posterior recuperação Após receber e gravar a rotina ainda apaga o e-mail lido do servidor POP3, para que ele não venha a ser recebido novamente.
Se alguém tiver a mesma necessidade que eu tive, adaptando o exemplo, poupará muito tempo e dor de cabeça.
Se alguém tiver um reparo ou aperfeiçoamento a fazer , seria muito bom para a comunidade -
Um abraço - Bastiaan
Segue código
// enquanto os e-mails são recebidos muda cursor para indicar rotina em andamento
HourGlass()
// seleciona as contas de e-mail do usuário HExecuteQuery(QRY_Seleciona_contas_de_1_usuario,hQueryDefault,gnCODIGO_USUARIO_LOGADO) HReadFirst(QRY_Seleciona_contas_de_1_usuario)
MyMessage is Email MyPOP3Session is EmailPOP3Session nQTDE_ANEXOS is int Attachment is EmailAttach memo_size is int gsInformacao_do_campo_memo is string
EmailProgressBar(PROGBAR_recebendo_emails) // Varre contas de e-mail do usuário WHILE HOut(QRY_Seleciona_contas_de_1_usuario)=False // processa a leitura de e-mails de cada conta do usuário MyPOP3Session..ServerAddress =QRY_Seleciona_contas_de_1_usuario.Servidor_entrada_POP_Imap //"// "pop3.mycompany.us" MyPOP3Session..Name =QRY_Seleciona_contas_de_1_usuario.E_mail_do_dono_da_conta //"user" MyPOP3Session..Password =QRY_Seleciona_contas_de_1_usuario.Senha_servidor_entrada_POP_IMAP MyPOP3Session..Port=QRY_Seleciona_contas_de_1_usuario.Porta_Servidor_entrada_POP_IMAP //110 // Inicia sessão POP3 // IF NOT EmailStartSession(MyPOP3Session) THEN // Error starting the IMAP session Error("êrro na conexão com o servidor da conta POP : "+QRY_Seleciona_contas_de_1_usuario.E_mail_do_dono_da_conta+" Aguarde e tente novamente + tarde - "+ErrorInfo()) ELSE // processa e-mails recebidos //+++++++++++++++++++++++++++++++++++++++++++++++++++++++ EmailReadFirst(MyPOP3Session, MyMessage) // nQTDE_ANEXOS = MyMessage..Attach..Occurrence nContador is int nContador=0 I is int = 0 EmailNbMessage(MyPOP3Session) WHILE NOT MyMessage.Out // grava dados dos e-mais recebidos na tabela E_mails HReset(E_Mails) E_Mails.Configura_Contas_de_EmailID=QRY_Seleciona_contas_de_1_usuario.Configura_Contas_de_EmailID E_Mails.CODIGO_USUARIO=gnCODIGO_USUARIO_LOGADO E_Mails.Recipient=ArrayToString(MyMessage.Recipient) E_Mails.Sender=MyMessage.Sender E_Mails.SubJect=MyMessage.Subject E_Mails.Date=MyMessage.ReceiveDate HAdd(E_Mails) //>>>>>>>>>>>>>>>>>>>>>>>>>> // Apura Qtde de anexos a este e-mail nQTDE_ANEXOS = MyMessage..Attach..Occurrence FOR I = 1 TO nQTDE_ANEXOS //FileToSave = fSelect("C:\1_anexo_email", "", Attachment..Name, "All files (*.*)" + TAB + "*.*", "", fselCreate) //EmailSaveAttachment(MyMessage.Attach[I], FileToSave) // grava anexos na tabela E_mails_Anexos HReset(E_mail_Anexos) E_mail_Anexos.Configura_Contas_de_EmailID=QRY_Seleciona_contas_de_1_usuario.Configura_Contas_de_EmailID E_mail_Anexos.E_MailsID=E_Mails.E_MailsID E_mail_Anexos.Nome_arquivo_anexo=MyMessage.Attach[I].Name E_mail_Anexos.Dados_do_anexo=MyMessage.Attach[I].Content //memo_size apura o tamanho do anexo que está sendo arquivado gsInformacao_do_campo_memo=HInfoMemo(E_mail_Anexos, Dados_do_anexo) memo_size= Val(ExtractString(gsInformacao_do_campo_memo, 3, TAB)) E_mail_Anexos.Tamanho_do_anexo=memo_size HAdd(E_mail_Anexos) END EmailDeleteMessage(MyPOP3Session, MyMessage) //>>>>>>>>>>>>>>>>>>>>>>>>>> nContador=nContador+1 IF MyMessage..Subject="" THEN BREAK END // Read the next message EmailReadNext(MyPOP3Session, MyMessage) END //+++++++++++++++++++++++++++++++++++++++++++++++++++++++ // fecha conexão EmailCloseSession(MyPOP3Session) END // //EmailProgressBar(PROGBAR_recebendo_emails) HReadNext(QRY_Seleciona_contas_de_1_usuario) END
// exibe a tabela E-mails HExecuteQuery(QRY_E_Mails_recebidos_p_usuario,hQueryDefault,gnCODIGO_USUARIO_LOGADO) TableDisplay(TABLE_QRY_E_Mails_recebidos_p_usuario) //Message modifié, 03 août 2017 - 17:43 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 37 messages Popularité : +5 (5 votes) |
|
Posté le 03 août 2017 - 17:44 |
Boller - grato pelo retorno mas me parece que não era esta a questão
Depois de muita pesquisa finalmente cheguei ao código que :
Cria a conexão como servidor POP3 Lê os e-mails que Ainda Não foram Lidos Grava as informações dos e-mails 2m 2 tabelas Na tabela e-mails, grava as informações para identificar o e-mail recebido Na tabela E_mais_anexo, grava as informações de cada anexo (se houver) que está ligado ao respectivo E_mail (ou seja se o anexo for por um PDF, este PDF, um JPG etc.. ficara gravado para posterior recuperação Após receber e gravar a rotina ainda apaga o e-mail lido do servidor POP3, para que ele não venha a ser recebido novamente.
Se alguém tiver a mesma necessidade que eu tive, adaptando o exemplo, poupará muito tempo e dor de cabeça.
Se alguém tiver um reparo ou aperfeiçoamento a fazer , seria muito bom para a comunidade -
Um abraço - Bastiaan
Segue código
// enquanto os e-mails são recebidos muda cursor para indicar rotina em andamento
HourGlass()
// seleciona as contas de e-mail do usuário HExecuteQuery(QRY_Seleciona_contas_de_1_usuario,hQueryDefault,gnCODIGO_USUARIO_LOGADO) HReadFirst(QRY_Seleciona_contas_de_1_usuario)
MyMessage is Email MyPOP3Session is EmailPOP3Session nQTDE_ANEXOS is int Attachment is EmailAttach memo_size is int gsInformacao_do_campo_memo is string
EmailProgressBar(PROGBAR_recebendo_emails) // Varre contas de e-mail do usuário WHILE HOut(QRY_Seleciona_contas_de_1_usuario)=False // processa a leitura de e-mails de cada conta do usuário MyPOP3Session..ServerAddress =QRY_Seleciona_contas_de_1_usuario.Servidor_entrada_POP_Imap //""// "pop3.mycompany.us" MyPOP3Session..Name =QRY_Seleciona_contas_de_1_usuario.E_mail_do_dono_da_conta //"" //"user" MyPOP3Session..Password =QRY_Seleciona_contas_de_1_usuario.Senha_servidor_entrada_POP_IMAP //"/ "secret" MyPOP3Session..Port=QRY_Seleciona_contas_de_1_usuario.Porta_Servidor_entrada_POP_IMAP //110 // Inicia sessão POP3 // IF NOT EmailStartSession(MyPOP3Session) THEN // Error starting the IMAP session Error("êrro na conexão com o servidor da conta POP : "+QRY_Seleciona_contas_de_1_usuario.E_mail_do_dono_da_conta+" Aguarde e tente novamente + tarde - "+ErrorInfo()) ELSE // processa e-mails recebidos //+++++++++++++++++++++++++++++++++++++++++++++++++++++++ EmailReadFirst(MyPOP3Session, MyMessage) // nQTDE_ANEXOS = MyMessage..Attach..Occurrence nContador is int nContador=0 I is int = 0 EmailNbMessage(MyPOP3Session) WHILE NOT MyMessage.Out // grava dados dos e-mais recebidos na tabela E_mails HReset(E_Mails) E_Mails.Configura_Contas_de_EmailID=QRY_Seleciona_contas_de_1_usuario.Configura_Contas_de_EmailID E_Mails.CODIGO_USUARIO=gnCODIGO_USUARIO_LOGADO E_Mails.Recipient=ArrayToString(MyMessage.Recipient) E_Mails.Sender=MyMessage.Sender E_Mails.SubJect=MyMessage.Subject E_Mails.Date=MyMessage.ReceiveDate HAdd(E_Mails) //>>>>>>>>>>>>>>>>>>>>>>>>>> // Apura Qtde de anexos a este e-mail nQTDE_ANEXOS = MyMessage..Attach..Occurrence FOR I = 1 TO nQTDE_ANEXOS //FileToSave = fSelect("C:\1_anexo_email", "", Attachment..Name, "All files (*.*)" + TAB + "*.*", "", fselCreate) //EmailSaveAttachment(MyMessage.Attach[I], FileToSave) // grava anexos na tabela E_mails_Anexos HReset(E_mail_Anexos) E_mail_Anexos.Configura_Contas_de_EmailID=QRY_Seleciona_contas_de_1_usuario.Configura_Contas_de_EmailID E_mail_Anexos.E_MailsID=E_Mails.E_MailsID E_mail_Anexos.Nome_arquivo_anexo=MyMessage.Attach[I].Name E_mail_Anexos.Dados_do_anexo=MyMessage.Attach[I].Content //memo_size apura o tamanho do anexo que está sendo arquivado gsInformacao_do_campo_memo=HInfoMemo(E_mail_Anexos, Dados_do_anexo) memo_size= Val(ExtractString(gsInformacao_do_campo_memo, 3, TAB)) E_mail_Anexos.Tamanho_do_anexo=memo_size HAdd(E_mail_Anexos) END EmailDeleteMessage(MyPOP3Session, MyMessage) //>>>>>>>>>>>>>>>>>>>>>>>>>> nContador=nContador+1 IF MyMessage..Subject="" THEN BREAK END // Read the next message EmailReadNext(MyPOP3Session, MyMessage) END //+++++++++++++++++++++++++++++++++++++++++++++++++++++++ // fecha conexão EmailCloseSession(MyPOP3Session) END // //EmailProgressBar(PROGBAR_recebendo_emails) HReadNext(QRY_Seleciona_contas_de_1_usuario) END
// exibe a tabela E-mails HExecuteQuery(QRY_E_Mails_recebidos_p_usuario,hQueryDefault,gnCODIGO_USUARIO_LOGADO) TableDisplay(TABLE_QRY_E_Mails_recebidos_p_usuario) // |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 651 messages Popularité : +175 (223 votes) |
|
Posté le 03 août 2017 - 18:04 |
Parabéns Batiaan
Admiro pessoas persistentes!
Sucesso meu amigo!
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|