Enviar email no xHarbour

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Enviar email no xHarbour

Mensagem por clodoaldomonteiro »

Olá amigos!

Estou tentando enviar email no meu sistema usando um exemplo da documentação do xHarbour e apesar de dizer que o email foi enviado, não chaga nada na minha caixa de email.

Estou tentando mandar de uma conta no yahoo para o hotmail.

O que tem de errado no código abaixo?

Código: Selecionar todos

// The example outlines the steps and data required to send an eMail
// including file attachment to an SMTP mail server (it forwards the eMail)

   PROCEDURE Main
      LOCAL oSmtp, oEMail
      LOCAL cSmtpUrl
      LOCAL cSubject, cFrom, cTo, cBody, cFile

      // preparing data for eMail
      cSmtpUrl := "smtp://mailaccount:password@smtp.server.com"
      cSubject := "Testing eMail"
      cFrom    := "MyName@Mail.server.com"
      cTo      := "YourName@another.server.com"
      cFile    := "File_Attachment.zip"
      cBody    := "This is a test mail sent at: " + DtoC(date()) + " " + Time()

      // preparing eMail object
      oEMail   := TIpMail():new()
      oEMail:setHeader( cSubject, cFrom, cTo )
      oEMail:setBody( cBody )
      oEMail:attachFile( cFile )

      // preparing SMTP object
      oSmtp := TIpClientSmtp():new( cSmtpUrl )

      // sending data via internet connection
      IF oSmtp:open()
         oSmtp:sendMail( oEMail )
         oSmtp:close()
         ? "Mail sent"
      ELSE
         ? "Error:", oSmtp:lastErrorMessage()
      ENDIF
   RETURN
Desde já agradeço a ajuda.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Enviar email no xHarbour (Resolvido)

Mensagem por clodoaldomonteiro »

Já consegui resolver.

É que eu estava informando o nome do destinatário errado.

Mas o bom mesmo é que fiz um teste com o hb_sendmail() e demorava uns 30 segundos mas com a classe TIpMail() demora só 2 segundos.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Enviar email no xHarbour

Mensagem por lugab »

Amigos,

Aproveito o assunto para tirar a seguinte dúvida:

A maioria dos destinatários sentem medo de baixar ou abrir um arquivo anexado. então, usando as facilidades da classe postada acima pelo Clodoaldo, tem como enviar o email exibindo as linhas do arquivo texto ( RTF ou DOC ou TXT) no corpo da mensagem, em vez de simplemente anexar o arquivo ??.


Usando essa classe
lugab
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Enviar email no xHarbour

Mensagem por sygecom »

Olá,
Com essa classe não tenho certeza, por que o :setBody('TEXTO DO EMAIL') é apenas texto, mas se anexar por exemplo um arquivo HTML usando: attachFile() ele acho que mostra no corpo da mensagem, ou seja, pode ser ilimitado o que deseja mostrar no corpo do email. ( faça testes )

Nota: Particularmente uso a DLL do BLAT.DLL para envio de email e é bem rápido também.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Softwhouse
Usuário Nível 3
Usuário Nível 3
Mensagens: 324
Registrado em: 07 Dez 2011 18:44
Localização: Porto Alegre/RS

Enviar email no xHarbour

Mensagem por Softwhouse »

Não conseguí fazer funcionar esse código, teria algum exemplo prático de como configurar cSmtpUrl ?
Fernando
chrissoares
Usuário Nível 1
Usuário Nível 1
Mensagens: 45
Registrado em: 23 Dez 2009 14:35
Localização: Belo Horizonte/MG
Contato:

Enviar email no xHarbour

Mensagem por chrissoares »

Softwhouse escreveu:Não conseguí fazer funcionar esse código, teria algum exemplo prático de como configurar cSmtpUrl ?
Saudações!

Para você configurar o servidor de SMTP, eu uso a classe TUrl, passando uma string com a configuração. Esta classe possui um método chamado BuildAddress que retorna a configuração correta para utilizar o TIpClientSmtp.
Veja o exemplo abaixo.

Código: Selecionar todos

  #define CRLF	HB_OsNewLine() //Quebra de Linha
  //Para definir o email como Html
  oEmail = TIpMail():new()  
  oEmail:setFieldPart('From:', '"Seu Nome'" <seu@enderecodeemail.com>')
  oEmail:setFieldPart('Content-Type', 'text/html; charset="iso-8859-1"')
  oEmail:setFieldPart("content", "Content-Type")
  oEmail:setFieldPart("MIME-Version", "1.0")
  //Fim Definir o email como Html
  oEmail:setHeader('Assunto', 'seu@enderecodeemail.com' , 'emaildo@destinatario.com')
  oEmail:setBody(FormHtml(cAssunto,cMsg)) //Para o LUGAB: Acredito que se carregar o arquivo TXT neste cMsg você consiga enviar seu arquivo no corpo do email, invés de anexado.
  oUrl = TUrl():new("smtp://usuarioemail:senhaemail@smtp.endereco.servidor.email:portadoemailnormalmente21ou587")
  oSmtp = TIpClientSmtp():new(oUrl:buildAddress())
  if oSmtp:open()
    oSmtp:sendMail(oEmail)
    oSmtp:Close()
  else
    Alert("Não foi possível conectar ao servidor SMTP do Email. Erro: "+oSmtp:lastErrorMessage())
  endif
//Esta função estou utilizando para enviar textos formatados como HTML no corpo do email.
Function FormHtml( cSubject, cBody )
	Local cOpen := "", cClose := "",;
	cHTML := '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">'+CRLF+;
				   '<html>' + CRLF + ;
				   '<head>' + CRLF + ;
				   ' <title>' + cSubject + '</title>' + CRLF + ;
				   ' <meta content="text/html; charset=iso-8859-1" http-equiv=Content-Type>'+CRLF+;
				   '</head>' + CRLF + ;
				   '<body style="font-">' + CRLF + ;
				   cBody + CRLF + ;
				   '</body>' + CRLF + ;
				   '</html>'
 Return cOpen + cHTML + cClose
Espero que ajude a quem estiver tendo dificuldades com o envio de emails.
Christiano R. Soares
Analista Desenvolvedor
www.bhdados.com.br

'Tudo o que fizerem, façam de todo o coração, como para o Senhor, e não para os homens, sabendo que receberão do Senhor a recompensa da herança. É a Cristo, o Senhor, que vocês estão servindo. '
Colossenses 3:23-24
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Enviar email no xHarbour

Mensagem por Kapiaba »

Bom dia, alguém tem essa função e a DLL mais atuais? Não consgio enviar email via yahoo com esta rotina. Não dá erro, mas o programa fica travado.

DLL muito antiga e não sei quem é o autor.

06/06/2010 11:54 109.056 sndmail.dll
06/06/2010 11:54 3.160 sndmail.lib

Código: Selecionar todos

#include "Fivewin.ch"

STATIC hDll

FUNCTION MAIN()

   LOCAL cFrom     := "joao@pleno.com.br"
   LOCAL cServer   := "smtp.pleno.com.br"
   LOCAL cTo       := "joao@pleno.com.br"
   LOCAL cSubjeCt  := "Test with sendmail.dll"
   LOCAL cMessage  := "Test with sendmail.dll - Email Body"
   LOCAL cSender   := "joao@pleno.com.br"
   LOCAL cUser     := "joao@pleno.com.br"
   LOCAL cPassword := "xxxxxxx"
   LOCAL aAttach := {}
   LOCAL aCc     := ""  //???
   LOCAL lHtml   := .F.
   LOCAL cPort := "587"
   LOCAL lNotification := .F. // cFrom
   LOCAL lRet

   lRet := SENDMAIL( cFrom, cServer, cTo, cSubject, cMessage, cSender, cUser, cPassword, aAttach, aCc, lHtml, cPort, lNotification )

   IF lRet

      ? "Message sent successfully perfect with FWH17.01"

   ELSE

      ? "Unsent message check windows live mail"

   ENDIF

RETURN NIL

FUNCTION SENDMAIL( cFrom, cServer, cTo, cSubject, cMessage, cSender, cUser, cPassword, aAttach, aCc, lHtml, cPort, lNotification )


    LOCAL cMsgFile := CTEMPFILE()

    LOCAL cCmd := "SndMail -f " + cFrom + " -X " + cServer + " -r " + cTo + " -s " + ["] + cSubject + ["] + " -b " + cMsgFile

    LOCAL nRes

    LOCAL i

    DEFAULT lHtml := "<html" $ LOWER( cMessage )

    MEMOWRIT( cMsgFile, cMessage + CRLF )

    IF !EMPTY( aAttach )
        FOR i = 1 TO LEN( aAttach )
            cCmd += " -a " + ["] + aAttach[ i ] + ["]
        NEXT
    ENDIF

    IF !EMPTY( cSender )
        cCmd += " -F " + ["] + cSender + ["]
    ENDIF

    IF !EMPTY( cUser )
        cCmd += " -h LOGIN -u " + cUser
    ENDIF

    IF !EMPTY( cPassword )
        cCmd += " -p " + cPassword
    ENDIF

    IF !EMPTY( aCc )
        FOR i = 1 TO LEN( aCc )
            cCmd += " -c " + ["] + aCc[ i ] + ["]
        NEXT
    ENDIF

    IF lHtml
        cCmd += " -H"
    ENDIF

    IF !EMPTY( cPort )
        cCmd += " -P " + cPort
    ENDIF

    IF !EMPTY( lNotification )
       cCmd += " -t " + ["] + "Disposition-Notification-To: " + cFrom + ["]
    ENDIF

    hDLL = LOADLIBRARY( "sndmail.dll" )

    IF hDll = 0
       ? [Install sndmail.dll.. ]
       __QUIT()
    ELSE
       SMTPLIBOPEN() // OPEN sndmail.dll
    ENDIF

    nRes = SMTPSENDMAIL( cCmd )

    SMTPLIBCLOSE()

    FREELIBRARY( hDLL )

    FERASE( cMsgFile )

RETURN nRes = 0

DLL STATIC FUNCTION SMTPLIBOPEN() AS VOID;
    PASCAL FROM "USmtpLibOpen" LIB hDll

DLL STATIC FUNCTION SMTPSENDMAIL( cCmd AS STRING ) AS LONG;
    PASCAL FROM "USmtpCmdLineSendMail" LIB hDll

DLL STATIC FUNCTION SMTPLIBCLOSE() AS VOID;
    PASCAL FROM "USmtpLibClose" LIB hDll

// END OF PROGRAM
Obg. Abs.
Responder