none
Receber Emails RRS feed

  • Pergunta

  • Pessoal, bom dia

     

    Mais uma vez preciso da ajuda de vocês.

    Seguinte, tenho uma stored procedure que envia e-mail através do SQL Server 2005 para uma regra de negócios da minha aplicação, o caso é que não estou conseguindo receber os e-mails. Poderiam dar uma olhada e ver se estou falhando em algum ponto?

    ALTER

    @CD_FUNCIONARIO

    PROCEDURE [dbo].[SYS_EnviaEmailAvisoPonto]INT = NULL,

    @TIPO_AVISO

    INT = NULL

    AS

    BEGIN

     

     

    select * from tbptr_funcionario where cd_funcionario = 4119DECLARE @Body VARCHAR(MAX)

     

     

    DECLARE @BodyType VARCHAR(10) SET @BodyType = 'HtmlBody'

     

     

    --BUSCA DADOS DO FUNCIONARIO

     

    DECLARE @DS_NOME VARCHAR(200)

     

    DECLARE @DS_EMAIL VARCHAR(200)

     

     

    SELECT @DS_NOME=DS_NOME,@DS_EMAIL=DS_EMAILFROM TBPTR_FUNCIONARIO WITH(NOLOCK)

     

     

    WHERE CD_FUNCIONARIO = @CD_FUNCIONARIO--BUSCA DADOS DO GESTOR

     

    DECLARE @DS_EMAILGESTOR VARCHAR(200)

     

    DECLARE @CD_USUARIO INT

     

    DECLARE @CD_FUNCIONARIOGESTOR INT

     

    SET @CD_USUARIO = (SELECT CD_USUARIO FROM TBPTR_USRADMFUNCIONARIO WITH(NOLOCK)

     

    WHERE CD_FUNCIONARIO = @CD_FUNCIONARIO)

     

     

    SET @CD_FUNCIONARIOGESTOR = (SELECT CD_FUNCIONARIO FROM TBPTR_USRADM WITH(NOLOCK)

     

    WHERE CD_USUARIO = @CD_USUARIO)

     

    SET @DS_EMAILGESTOR = (SELECT DS_EMAIL FROM TBPTR_FUNCIONARIO WITH(NOLOCK)

     

     

    WHERE CD_FUNCIONARIO = @CD_FUNCIONARIOGESTOR)

     

    --MENSAGEM CONFORME TIPO

     

    DECLARE @TEXTO VARCHAR(200)

     

     

     

    IF @TIPO_AVISO = 1SET @TEXTO = 'ATENÇÃO: Você ainda não marcou o ponto de entrada, por favor marque o quanto antes.'

     

     

    IF @TIPO_AVISO = 2SET @TEXTO = 'ATENÇÃO: Você ainda não marcou o ponto do almoço, por favor marque o quanto antes.'

     

     

     

    PRINT @TIPO_AVISO--GRAVA REGISTRO DE LOG DE ENVIO DE EMAIL

     

    INSERT tbPTR_EnvioEmail_Log VALUES(

    @CD_FUNCIONARIO

    ,

    @CD_FUNCIONARIOGESTOR

    ,

     

    GETDATE()

     

    )

     

     

    SET @Body = '<html>'

     

    SET @Body = @Body + '<head>'

     

    SET @Body = @Body + '<title>&nbsp;</title>'

     

    SET @Body = @Body + '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">'

     

    SET @Body = @Body + '</head>'

     

    SET @Body = @Body + '<body>'

     

    SET @Body = @Body + '<table width="75%" border="1" bordercolor="#000000" bgcolor="#999999">'

     

    SET @Body = @Body + '<tr> '

     

    SET @Body = @Body + '<td bgcolor="#CCCCCC"> <div align="center"><font color="#333333" size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong>AVISO '

     

    SET @Body = @Body + 'CONPONTO</strong></font></div></td>'

     

    SET @Body = @Body + '</tr>'

     

    SET @Body = @Body + '</table>'

     

    SET @Body = @Body + '<table width="75%" border="0" cellpading="0" cellspacing="0">'

     

    SET @Body = @Body + '<tr> '

     

    SET @Body = @Body + '<td width="17%"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">FUNCIONÁRIO:</font></td>'

     

    SET @Body = @Body + '<td width="83%"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">'+@DS_NOME+'</font></td>'

     

    SET @Body = @Body + '</tr>'

     

    SET @Body = @Body + '</table>'

     

    SET @Body = @Body + '<table width="75%" border="0" cellpading="0" cellspacing="0">'

     

    SET @Body = @Body + '<tr> '

     

    SET @Body = @Body + '<td width="75%"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">'+@TEXTO+'</font></td>'

     

    SET @Body = @Body + '</tr>'

     

    SET @Body = @Body + '</table>'

     

    SET @Body = @Body + '<p>&nbsp;</p>'

     

    SET @Body = @Body + '<p>&nbsp;</p>'

     

    SET @Body = @Body + '<p>&nbsp;</p>'

     

    SET @Body = @Body + '</body>'

     

    SET @Body = @Body + '</html>'

     

    DECLARE @imsg INT

     

    DECLARE @hr INT

     

    DECLARE @source VARCHAR(255)

     

    DECLARE @description VARCHAR(500)

     

    DECLARE @output VARCHAR(1000)

     

     

    EXEC @hr = sp_oacreate 'cdo.message', @imsg outEXEC @hr = sp_oasetproperty @imsg, 'configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").value','2'

     

    EXEC @hr = sp_oasetproperty @imsg, 'configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").value', 'smtp.dominio.com.br'

     

    EXEC @hr = sp_oasetproperty @imsg, 'configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserverportr").value', '25'

     

    EXEC @hr = sp_oasetproperty @imsg, 'configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").value', '1'

     

    EXEC @hr = sp_oasetproperty @imsg, 'configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusername").value', 'meuemail@dominio.com.br'

     

    EXEC @hr = sp_oasetproperty @imsg, 'configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendpassword").value', 'minhasenha'

     

    EXEC @hr = sp_oamethod @imsg, 'configuration.fields.UPDATE', NULL

     

    EXEC @hr = sp_oasetproperty @imsg, 'to', 'meuemail@dominio.com.br'

     

    EXEC @hr = sp_oasetproperty @imsg, 'cc', 'meuemail@dominio.com.br'

     

    EXEC @hr = sp_oasetproperty @imsg, 'from', 'TESTE'

     

    EXEC @hr = sp_oasetproperty @imsg, 'subject', 'TESTE'

     

    IF @BodyType <> 'URL'

     

    BEGIN

     

     

    EXEC @hr = sp_oasetproperty @imsg, @BodyType, @BodyEND

     

    ELSE

     

    BEGIN

     

    EXEC @hr = sp_oamethod @imsg, 'CreateMHTMLBody', @Body, 0, '', ''

     

    END

     

    EXEC @hr = sp_oamethod @imsg, 'send', NULL

     

    print @hr

    END

     

     

    Obrigado.
     

    quarta-feira, 9 de dezembro de 2009 12:51

Todas as Respostas

  • Walter,

    O e-mail esta sendo enviado normalmente?

    Em qual parte do seu código você esta informando para e-mail ser enviado!!!


    Porque você não utliza a system stored procedure sp_send_dbmail

    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 9 de dezembro de 2009 12:52
  • Junior, obrigado pela atenção.

    Na verdade essa rotina funcionava, mas com problemas no recebimento dos e-mails... alguns usuários recebiam e outros não.

    Gostaria de alterar para utilização do sp_send_dbmail, mas não soube implementar de acordo. Tentei habilitar o Database Mail também e não consegui, poderia me passar algum exemplo bem simples que eu consiga fazer o teste? Eu utilizo o SQL Server 2005

    Abraços, obrigado
    quarta-feira, 9 de dezembro de 2009 14:22
  • Walter,

    Você esta utilizando qual SQL Server 2005?

    Quais foram os problemas que você encontrou?
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 9 de dezembro de 2009 16:22
  • Junior,

     

    Tentei rodar esse script e acusa alguns erros de PK, como se já tivesse rodado isso antes.

    É dessa maneira mesmo que se faz o procedimento?

    USE

    msdb ;

    EXECUTE

    @account_name

    sysmail_add_account_sp = 'Conta_Conponto' ,

    @description

    = 'Envia e-mails de alerta no Conponto' ,

    @email_address

    = 'avisoconponto@consulters.com.br' ,

    @display_name

    = 'AVISO CONPONTO' ,

    @mailserver_name

     

     

    = 'smtp.consulters.com.br'

    EXECUTE

    @profile_name

    sysmail_add_profile_sp = 'Profile_Conponto' ,

    @description

    = 'Profile'

     

     

    EXECUTE

    @profile_name

    sysmail_add_profileaccount_sp = 'Profile_Conponto' ,

    @account_name

    = 'Conta_Conponto' ,

    @sequence_number

     

    = 1

    EXECUTE

    @profile_name

    sysmail_add_principalprofile_sp = 'Profile_Conponto' ,

    @principal_name

    @is_default

    quarta-feira, 9 de dezembro de 2009 16:52
  • Walter,

    Acredito que você não precise montar tudo esse código, não sei bem o que você esta pensando, mas eu sempre utilize a sp_send_dbmail, veja alguns exemplos extraídos do Books On-Line.

     

    A. Enviando uma mensagem de email

    Este exemplo envia uma mensagem de email a Dan Wilson usando o endereço de email danw@Adventure-Works.com. O assunto da mensagem é Automated Success Message. O corpo da mensagem contém a sentença 'The stored procedure finished successfully'.

     
    EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'AdventureWorks Administrator',
        @recipients = 'danw@Adventure-Works.com',
        @body = 'The stored procedure finished successfully.',
        @subject = 'Automated Success Message' ;

    B. Enviando uma mensagem de email com os resultados de uma consulta

    Este exemplo envia uma mensagem de email a Dan Wilson usando o endereço de email danw@Adventure-Works.com. O assunto da mensagem é Work Order Count e executa uma consulta que mostra o número de ordens de trabalho com uma DueDate menor que dois dias, após 30 de abril de 2004. O Database Mail anexa o resultado como um arquivo de texto.

     
    EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'AdventureWorks Administrator',
        @recipients = 'danw@Adventure-Works.com',
        @query = 'SELECT COUNT(*) FROM AdventureWorks.Production.WorkOrder
                      WHERE DueDate > ''2004-04-30''
                      AND  DATEDIFF(dd, ''2004-04-30'', DueDate) < 2' ,
        @subject = 'Work Order Count',
        @attach_query_result_as_file = 1 ;

    C. Enviando uma mensagem de email HTML

    Este exemplo envia uma mensagem de email a Dan Wilson usando o endereço de email danw@Adventure-Works.com. O assunto da mensagem é Work Order List e contém um documento HTML que mostra o número de ordens de trabalho com uma DueDate menor que dois dias, após 30 de abril de 2004. O Database Mail envia a mensagem no formato HTML.

     
    DECLARE @tableHTML  NVARCHAR(MAX) ;
    
    SET @tableHTML =
        N'<H1>Work Order Report</H1>' +
        N'<table border="1">' +
        N'<tr><th>Work Order ID</th><th>Product ID</th>' +
        N'<th>Name</th><th>Order Qty</th><th>Due Date</th>' +
        N'<th>Expected Revenue</th></tr>' +
        CAST ( ( SELECT td = wo.WorkOrderID,       '',
                        td = p.ProductID, '',
                        td = p.Name, '',
                        td = wo.OrderQty, '',
                        td = wo.DueDate, '',
                        td = (p.ListPrice - p.StandardCost) * wo.OrderQty
                  FROM AdventureWorks.Production.WorkOrder as wo
                  JOIN AdventureWorks.Production.Product AS p
                  ON wo.ProductID = p.ProductID
                  WHERE DueDate > '2004-04-30'
                    AND DATEDIFF(dd, '2004-04-30', DueDate) < 2 
                  ORDER BY DueDate ASC,
                           (p.ListPrice - p.StandardCost) * wo.OrderQty DESC
                  FOR XML PATH('tr'), TYPE 
        ) AS NVARCHAR(MAX) ) +
        N'</table>' ;
    
    EXEC msdb.dbo.sp_send_dbmail @recipients='danw@Adventure-Works.com',
        @subject = 'Work Order List',
        @body = @tableHTML,
        @body_format = 'HTML' ;

    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 9 de dezembro de 2009 18:22
  • Junior,

    Eu executei conforme seu exemplo, só alterei o profile name

    EXEC

    @profile_name

    msdb.dbo.sp_send_dbmail= 'Profile_Conponto',

    @recipients

    = 'bruno.oliveira@consulters.com.br',

    @body

    = 'The stored procedure finished successfully.',

    @subject

    = 'Automated Success Message' ;

     

     

    O resultado que obtive foi que Mail queued.

    Isso quer dizer que tenha algo errado?

    Não recebi o e-mail teste

    quarta-feira, 9 de dezembro de 2009 19:32
  • Walter, 
    este resultado significa que o email foi enviado, de um select nesta tabela:

    select * from msdb.dbo.sysmail_log
    e
    select * from msdb.dbo.sysmail_faileditems

    nestes dois casos tem uma coluna (nao me recordo qual agora) que marca o motivo do erro.


    Post o erro se possivel.

    Abçs
    quinta-feira, 10 de dezembro de 2009 18:48
  • Walter,


    Esta mensagem informa que o seu e-mail foi enviado para a fila de evento(queued) para envios.

    Stored Procedures do Database Mail:

    sp_send_dbmail

    sysmail_help_configure_sp

    sysmail_add_account_sp

    sysmail_help_principalprofile_sp

    sysmail_add_principalprofile_sp

    sysmail_help_profile_sp

    sysmail_add_profile_sp

    sysmail_help_profileaccount_sp

    sysmail_add_profileaccount_sp

    sysmail_help_queue_sp

    sysmail_configure_sp

    sysmail_help_status_sp

    sysmail_delete_account_sp

    sysmail_start_sp

    sysmail_delete_log_sp

    sysmail_stop_sp

    sysmail_delete_mailitems_sp

    sysmail_update_account_sp

    sysmail_delete_principalprofile_sp

    sysmail_update_principalprofile_sp

    sysmail_delete_profile_sp

    sysmail_update_profile_sp

    sysmail_delete_profileaccount_sp

    sysmail_update_profileaccount_sp

    sysmail_help_account_sp

     


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sábado, 12 de dezembro de 2009 20:18