PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 24 → Wx + MsSQL - Email via banco de dados
Wx + MsSQL - Email via banco de dados
Débuté par adrianoboller, 24 fév. 2015 20:29 - 8 réponses
Membre enregistré
2 958 messages
Popularité : +89 (91 votes)
Posté le 24 février 2015 - 20:29




LINK BLOG COM PASSO A PASSO:

http://windevdesenvolvimento.blogspot.com.br/2015/02/email-via-banco-de-dados-mssql.html

Obs.: Com esse recurso tentamos passar todos os passos para a implementação desse recurso, sendo assim possivel visualizar no celular, tablet e no computador os emails programados para diversas situações que podem ser implementadas em suas aplicações Windev/Webdev e Windev Mobile, enriquecendo em muito a bibliografia sobre esse assunto em um só post com todos os detalhes.

Deixar registrado o meu muito obrigado pela contribuição ao Amarildo Matos por ter ajudado a desenvolver esse post e documentar em seu blog e no Fórum Oficial BR da PcSoft.

Parabéns!

:merci:
Membre enregistré
2 958 messages
Popularité : +89 (91 votes)
Posté le 12 octobre 2016 - 15:03
DESVENDANDO O DATABASEMAIL DO MS SQL SERVER

Arquitetura do DataBaseMail

O Database Mail consiste nos seguintes componentes principais:

•Componentes de configuração e segurança

O Database Mail armazena informações de configuração e segurança no banco de dados msdb. Objetos de configuração e segurança criam perfis e contas usadas pelo Database Mail.


•Componentes de sistema de mensagens

O banco de dados msdb atua como o banco de dados de correio-host que mantém os objetos do sistema de mensagens utilizado pelo Database Mail para enviar emails. Esses objetos compreendem o procedimento armazenado sp_send_dbmail e as estruturas de dados que guardam informações sobre mensagens.


•Executável do Database Mail

O executável do Database Mail é um programa externo que lê uma fila no banco de dados msdb e envia mensagens a servidores de email.


•Componentes de registro em log e auditoria

O Database Mail registra informações de log no banco de dados msdb e no log de eventos de aplicativos do Microsoft Windows.


Não é preciso compreender inteiramente a arquitetura do Database Mail para utilizá-lo com eficácia. Contudo, compreender os componentes do Database Mail e como eles interagem pode ajudá-lo no design de seus aplicativos e na solução de eventuais problemas.

A ilustração a seguir dá uma visão geral da arquitetura do Database Mail.
msdb envia mensagens a um servidor de email SMTP
O Database Mail foi projetado em uma arquitetura de filas que usa tecnologias do Service Broker. Quando os usuários executam sp_send_dbmail, o procedimento armazenado insere um item na fila de emails e cria um registro que contém a mensagem do email. A inserção da nova entrada na fila de emails inicia o processo externo do Database Mail ((DatabaseMail.exe). O processo externo lê as informações de email e envia a mensagem ao servidor ou servidores de email adequados. O processo externo insere um item na fila Status quanto ao resultado da operação de envio. A inserção da nova entrada na fila de status faz com que seja iniciado um procedimento armazenado que atualiza o status da mensagem de email. Além de armazenar a mensagem de email enviada ou não, o Database Mail também registra eventuais anexos dos emails nas tabelas do sistema. As exibições do Database Mail fornecem o status das mensagens para a solução de problemas, e os procedimentos armazenados permitem a administração da fila do Database Mail.

Apenas membros da função DatabaseMailUserRole no banco de dados msdb podem executar sp_send_dbmail.

https://technet.microsoft.com/pt-br/library/ms189635%28v=sql.105%29.aspx

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Message modifié, 12 octobre 2016 - 15:04
Membre enregistré
2 958 messages
Popularité : +89 (91 votes)
Posté le 12 octobre 2016 - 15:50
Arquitetura do DataBaseMail





--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
2 958 messages
Popularité : +89 (91 votes)
Posté le 12 octobre 2016 - 15:52
Solucionando problemas do Database Mail: email na fila, não entregue

Este tópico descreve como solucionar o problema de mensagens de email enfileiradas com êxito, mas não entregues.

Diagnosticando o problema

O programa externo do Database Mail registra a atividade de e-mail no banco de dados msdb.

Primeiro, para confirmar que o Database Mail está habilitado, use a Opção Database Mail XPs do procedimento armazenado do sistema sp_configure.

Em seguida, execute a seguinte instrução no banco de dados msdb para verificar o status da fila de emails:

sysmail_help_queue_sp @queue_type = 'Mail' ;

Para obter uma explicação detalhada das colunas, consulte a seção "Conjunto de resultados" em sysmail_help_queue_sp (Transact-SQL).

Verifique a exibição sysmail_event_log para observar a atividade. A exibição deve conter uma entrada declarando que o programa externo do Database Mail foi iniciado. Se não houver nenhuma entrada na exibição sysmail_event_log, consulte o sintoma Mensagens na fila, nenhuma entrada em sysmail_event_log. Se houver erros na exibição sysmail_event_log, solucione o erro específico.

Se houver entradas na exibição sysmail_event_log, verifique a exibição sysmail_allitems quanto ao status das mensagens.

Status de mensagem “não enviada”

O status de não enviada indica que o programa externo do Database Mail ainda não processou a mensagem de email. O programa externo do Database Mail pode ter se atrasado no processamento das mensagens; a taxa com a qual o programa externo processa mensagens depende das condições da rede, do tempo limite de novas tentativas, do volume de mensagens e da capacidade do servidor SMTP. Se o problema persistir, considere usar mais de um perfil para distribuir mensagens entre mais de um servidor SMTP.

Verifique a data de modificação mais recente das mensagens entregues com êxito. Se a última entrega com êxito tiver ocorrida já há algum tempo, examine a exibição sysmail_event_log para verificar se o programa externo foi iniciado com êxito pelo Service Broker. Se a última tentativa não iniciou o programa externo, verifique se o Programa Externo do Database Mail está localizado no diretório correto e se a conta de serviço do SQL Server tem permissão para o executável.

ObservaçãoObservação


Para excluir mensagens antigas não enviadas, aguarde até que as mensagens impossíveis de entregar sejam as mais antigas na fila e use sysmail_delete_mailitems_sp para excluí-las.


Status de mensagem “tentando novamente”


O status de tentando novamente indica que o Database Mail tentou entregar a mensagem ao servidor SMTP, mas não teve êxito. Normalmente, isso é causado por uma interrupção da rede, uma falha do servidor SMTP ou uma conta incorretamente configurada do Database Mail. A mensagem dever ter êxito ou falha e postar uma mensagem no log de eventos.

Status de mensagem “enviada”


O status de enviada indica que o programa externo do Database Mail teve êxito na entrega da mensagem ao servidor SMTP. Se a mensagem não chegar ao seu destino, é porque o servidor SMTP a aceitou do Database Mail, mas não a entregou ao destinatário final. Verifique os logs do servidor SMTP ou contate o administrador do mesmo. Você também pode testar o servidor de email SMTP usando outro cliente, como o Outlook Express.

Status de mensagem “falha”


O status de falha indica que o programa externo do Database Mail não conseguiu entregar a mensagem ao servidor SMTP. Neste caso, a exibição sysmail_event_log conterá as informações detalhadas do programa externo. Para obter uma consulta de exemplo que une sysmail_faileditems e sysmail_event_log para recuperar mensagens de erro detalhadas, consulte Como verificar o status de mensagens de email enviadas por Database Mail (Transact-SQL). As causas mais comuns de falha são endereço de destino incorreto ou problemas de rede que impedem o programa externo de acessar uma ou mais contas de failover. Problemas no servidor SMTP também podem fazê-lo rejeitar emails. Usando o Assistente para Configuração do Database Mail, altere o Nível de log para Detalhado e envie um email de teste para investigar o ponto de falha.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
2 958 messages
Popularité : +89 (91 votes)
Posté le 12 octobre 2016 - 16:53
Prezados,

Objetos de configuração do Database Mail
#####################################################################################################

O Database Mail oferece dois tipos de objeto de configuração:

•Perfis do Database Mail, que são conjuntos de contas.

•Contas do Database Mail, que contêm informações para servidores de email.

O Database Mail dispõe de procedimentos armazenados de configuração no banco de dados msdb. Você pode escrever scripts Transact-SQL que usem esses procedimentos diretamente.

Os aplicativos que enviam email por meio do Database Mail especificam perfis, em vez de usar contas diretamente. Separar as informações sobre os servidores de email individuais e os objetos utilizados pelo aplicativo melhora a flexibilidade e a confiabilidade: os perfis proporcionam failover automático, de modo que, se um servidor de email não estiver respondendo, o Database Mail poderá enviar email para outro servidor automaticamente. Os administradores de banco de dados podem adicionar, remover ou reconfigurar contas sem a necessidade de alterações no código do aplicativo ou nas etapas de trabalho.

Para maior segurança, o Database Mail gerencia o acesso aos perfis de email. Um perfil pode ser público ou particular. Os perfis públicos estão disponíveis a todos os membros da função de banco de dados DatabaseMailUserRole no banco de dados msdb. Eles permitem que todos os membros da função DatabaseMailUserRole enviem email utilizando o perfil. Os perfis particulares são definidos para entidades de segurança no banco de dados msdb. Eles permitem que apenas usuários, funções e membros especificados da função de servidor fixa sysadmin do banco de dados enviem email usando o perfil. Por padrão, um perfil é particular e permite acesso apenas a membros da função de servidor fixa sysadmin. Para uso de um perfil particular, sysadmin deve conceder aos usuários permissão para usarem o perfil. Além disso, a permissão de EXECUTE no procedimento armazenado sp_send_dbmail só é concedida a membros da função DatabaseMailUserRole. Um administrador do sistema deve adicionar o usuário à função de banco de dados DatabaseMailUserRole para que ele possa enviar mensagens de email.

A ilustração a seguir mostra a relação entre contas, perfis e usuários. Observe que um usuário pode ter permissão para usar mais de um perfil, mas apenas um perfil pode ser definido como padrão. Cada perfil pode usar mais de uma conta. Uma conta pode ser usada por mais de um perfil.
Relação de usuários, perfis e contas
A ilustração mostra dois perfis, três contas e três usuários. O Usuário 1 tem acesso ao Perfil 1, que usa a Conta 1 e a Conta 2. O Usuário 3 tem acesso ao Perfil 2, que usa a Conta 2 e a Conta 3. O Usuário 2 tem acesso ao Perfil 1 e ao Perfil 2.







• Perfis do Database Mail
-----------------------------------------------

Um perfil do Database Mail é uma coleção ordenada de contas relacionadas do Database Mail. Para enviar emails, você deve ser membro da função DatabaseMailUserRole no banco de dados msdb e ter acesso a pelo menos um perfil do Database Mail. Os perfis permitem aos administradores de banco de dados reconfigurar procedimentos armazenados e aplicativos de banco de dados que usam email sem ter que alterar o código de aplicativo. Por exemplo, pode-se configurar um perfil com um conjunto de contas de email durante o desenvolvimento e o teste do aplicativo, atualizando-o, em seguida, com um conjunto diferente de contas para migrar o aplicativo à fase de produção. O aplicativo usa o mesmo nome de perfil, mas envia emails utilizando uma lista diferente de servidores de email.

Observação

Como o Database Mail não usa a interface MAPI (Messaging Application Programming Interface), seus perfis não são perfis de email MAPI. O Database Mail não usa perfil do SQL Mail.


Os perfis melhoram a confiança nos casos em que um servidor de email se torna inacessível ou incapaz de processar mensagens. Cada conta no perfil possui um número de seqüência. O número de seqüência determina a ordem na qual o Database Mail usa as contas no perfil. Para uma nova mensagem de email, o Database Mail usa a última conta que enviou uma mensagem com êxito ou a conta com o número de seqüência mais baixo, caso ainda não tenha sido enviada nenhuma mensagem. Se essa conta falhar, o Database Mail usará a conta com o próximo número de seqüência mais alto, e assim por diante, até que o Database Mail envie a mensagem com êxito ou a conta com o número de seqüência mais alto falhe. Se a conta com o número de seqüência mais alto falhar, o Database Mail irá pausar as tentativas de enviar o email pelo período de tempo configurado no parâmetro AccountRetryDelay de sysmail_configure_spe, em seguida, iniciará o processo de tentar enviar o email novamente, começando pelo número de seqüência mais baixo. Use o parâmetro AccountRetryAttempts de sysmail_configure_sppara configurar o número de vezes que o processo de email externo tenta enviar a mensagem de email usando cada conta no perfil especificado.

Se existir mais de uma conta com o mesmo número de seqüência, o Database Mail utilizará apenas uma delas para uma dada mensagem de email. Nesse caso, o Database Mail não pode garantir qual das contas será utilizada para o número de seqüência em questão, nem que a mesma conta seja utilizada de mensagem a mensagem.

Os perfis também ajudam os administradores de banco de dados a controlar o acesso a email. É necessária associação à função DatabaseMailUserRole para poder enviar Database Mail. Os perfis propiciam flexibilidade extra aos administradores para controlar quem envia email e quais contas são utilizadas. Para cada perfil particular, o Database Mail mantém uma lista de usuários que têm permissão para enviar emails por meio do perfil. Perfis públicos estão disponíveis a usuários ou funções de banco de dados msdb que também sejam membros de DatabaseMailUserRole.

Por padrão, os perfis são particulares e os usuários não têm acesso a eles. Para tornar público um perfil, conceda acesso ao usuário ''público'' ou à ID de usuário 0. Para obter mais informações sobre concessão de acesso a perfis, consulte sysmail_add_principalprofile_sp (Transact-SQL).

Um perfil pode ser um perfil padrão. Nesse caso, os usuários podem enviar email por meio do perfil sem ter que especificá-lo explicitamente. Se o usuário que envia a mensagem de email tiver um perfil particular padrão, o Database Mail irá utilizá-lo. Se o usuário não tiver nenhum perfil particular padrão, o sp_send_dbmail usará o perfil público padrão do banco de dados. Se não houver nenhum perfil particular padrão para o usuário e nenhum perfil público padrão para o banco de dados, o sp_send_dbmail retornará um erro. Em todo caso, o usuário deve ser membro da função DatabaseMailUserRole para poder enviar Database Mail.




• Contas do Database Mail
-----------------------------------------

Uma conta do Database Mail contém as informações que o Microsoft SQL Server usa para enviar mensagens de email a um servidor SMTP. Cada conta contém informações de um servidor de email.

Uma conta do Database Mail só é usada no Database Mail. Uma conta do Database Mail não corresponde a uma conta do SQL Server nem a uma conta do Microsoft Windows. O Database Mail dá suporte a três métodos de autenticação para se comunicar com um servidor SMTP:

•Autenticação do Windows: O Database Mail usa as credenciais da conta de serviço do Windows do Mecanismo de banco de dados do SQL Server para autenticação no servidor SMTP.

•Autenticação Básica: O Database Mail usa o nome de usuário e a senha especificados para autenticação no servidor SMTP.

•Autenticação Anônima: O servidor SMTP não exige nenhuma autenticação. O Database Mail não usará nenhuma credencial para a autenticação no servidor SMTP.

Ao criar uma conta do Database Mail, especifique o método de autenticação necessário para cada servidor SMTP.

Observação sobre segurança

Se seu servidor de email exigir autenticação, considere a possibilidade de criar um usuário nesse servidor SMTP especificamente para o Database Mail. Esse usuário deve ter permissões mínimas no servidor SMTP e não deve ser usado para qualquer outro fim.

As informações da conta são armazenadas no banco de dados msdb. Cada conta consiste nas seguintes informações:

•O nome da conta.

•Uma descrição da conta.

•O endereço de email da conta.

•O nome para exibição da conta.

•O endereço de email a usar como informação de “responder” da conta.

•O nome do servidor de email.

•O tipo de servidor de email. Para o Microsoft SQL Server, é sempre o protocolo SMTP.

•O número da porta do servidor de email.

•Uma coluna de bits indicando se a conexão com o servidor de email SMTP é feita usando protocolo SSL.

•Uma coluna de bits indicando se a conexão com o servidor SMTP é feita usando as credenciais configuradas para o Mecanismo de banco de dados do SQL Server.

•O nome de usuário a usar para autenticação no servidor de email, se este exigir autenticação.

•A senha a usar para autenticação no servidor de email, se este exigir autenticação.

O Assistente para Configuração do Database Mail é um modo conveniente de criar e gerenciar contas. Você também pode usar os procedimentos armazenados de configuração no msdb para criar e gerenciar contas.



Programa EXECUTAVEL do Database Mail
#####################################################################################################

O executável externo do Database Mail é o DatabaseMail.exe, que se localiza no diretório MSSQL\Binn da instalação do SQL Server. O Database Mail usa a ativação do Service Broker para iniciar o programa externo quando há mensagens de email a serem processadas. O Database Mail inicia uma instância do programa externo. O programa externo é executado no contexto de segurança da conta de serviço do SQL Server.


Ao ser iniciado, o programa externo se conecta ao SQL Server usando autenticação do Windows e começa a processar mensagens de email. Quando não há nenhuma mensagem a enviar no tempo limite especificado, o programa é encerrado. Você pode configurar o tempo que o programa deve aguardar antes de encerrar, usando o Assistente para Configuração do Database Mail ou procedimentos armazenados do Database Mail. Para obter mais informações, consulte sysmail_configure_sp (Transact-SQL).

O programa externo armazena informações em tabelas do sistema no banco de dados msdb. Se o programa externo não puder se comunicar com o SQL Server, ele registrará erros no log de eventos de aplicativos do Microsoft Windows. Há ainda outros registros de mensagens quando o nível de log é definido como Detalhado na caixa de diálogo Configurar Parâmetros do Sistema do Assistente para Configuração do Database Mail. Solucione problemas do programa externo do Database Mail usando as exibições e os procedimentos armazenados do Database Mail. Para obter mais informações, consulte Solucionando problemas de Database Mail.

Observe que, por questão de eficiência, o programa externo coloca em cache as informações de conta e perfil. Portanto, alterações na configuração de contas e perfis podem não se refletir no programa externo por alguns minutos.




Banco de dados de host de correio
#####################################################################################################

O banco de dados msdb é o host de Database Mail. Este banco de dados contém os procedimentos armazenados e objetos de mensagens para o Database Mail. O Microsoft SQL Server Management Studio contém o Assistente para Configuração do Database Mail, que permite habilitar o Database Mail, criar e gerenciar perfis e contas e configurar opções do Database Mail.

Por padrão, o Database Mail não se encontra ativo. Para usar o Database Mail, você deve habilitá-lo explicitamente usando o Assistente para Configuração do Database Mail ou a opção Opção Database Mail XPs do procedimento armazenado do sistema sp_configure.

Para obter uma lista das exibições e procedimentos armazenados associados ao Database Mail, consulte Objetos do sistema de mensagens do Database Mail.

O Service Broker deve ser habilitado no banco de dados msdb. Porém, o Database Mail não usa o sistema de rede do Service Broker. Portanto, os usuários não têm que criar um ponto de extremidade do Service Broker para usar o Database Mail. O processo externo do Database Mail usa uma conexão ADO.NET padrão para se comunicar com o SQL Server.




Modos de exibição do Database Mail (Transact-SQL)
#####################################################################################################

O Database Mail possui as exibições a seguir que mostram conteúdo de email, status de emails e qualquer mensagem recebida, como os erros registrados por ele. Essas exibições estão no banco de dados msdb.

sysmail_allitems (Transact-SQL)

sysmail_mailattachments (Transact-SQL)

sysmail_event_log (Transact-SQL)

sysmail_sentitems (Transact-SQL)

sysmail_faileditems (Transact-SQL)

sysmail_unsentitems (Transact-SQL)




Procedimentos armazenados do Database Mail e do SQL Mail (Transact-SQL)
#####################################################################################################

O Microsoft SQL Server oferece suporte aos seguintes procedimentos armazenados de sistema, que são usados para executar operações de email de dentro de uma instância do SQL Server.

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




Procedimentos do SQL Mail
#####################################################################################################

sp_processmail

xp_sendmail

xp_deletemail

xp_startmail

xp_findnextmsg

xp_stopmail

xp_readmail





TROBOUBLESHOOT MS SQL SERVER DATABASEMAIL
#####################################################################################################

O Database Mail foi projetado para ajudar os administradores de banco de dados a isolar e corrigir problemas rapidamente. Esta seção descreve soluções para problemas comuns.


• Solucionando problemas do Database Mail: etapas gerais
#####################################################################################################

Solucionar problemas do Database Mail requer verificar as áreas gerais a seguir do sistema do Database Mail. Esses procedimentos são apresentados em uma ordem lógica, mas podem ser avaliados em qualquer ordem.

Para determinar se o Database Mail está habilitado

1.No SQL Server Management Studio, conecte-se a uma instância do SQL Server usando uma janela do editor de consultas e, em seguida, execute o seguinte código:

sp_configure 'show advanced', 1;
GO
RECONFIGURE;
GO
sp_configure;
GO





No painel de resultados, confirme se run_value para Database Mail XPs está definido como 1.

Se run_value não for 1, o Database Mail não será habilitado. O Database Mail não é habilitado automaticamente para reduzir o número de recursos disponíveis para a investida de um usuário mal-intencionado. Para obter mais informações, consulte Compreendendo a Configuração da Área da Superfície.

2.Se você decidir que é apropriado habilitar o Database Mail, execute o seguinte código:

sp_configure 'Database Mail XPs', 1;
GO
RECONFIGURE;
GO


3.Para restaurar o procedimento sp_configure ao seu estado padrão, que não mostra opções avançadas, execute o seguinte código:

sp_configure 'show advanced', 0;
GO
RECONFIGURE;
GO


Para determinar se os usuários estão configurados apropriadamente para enviar Database Mail

1.Para enviar Database Mail, os usuários devem ser membros de DatabaseMailUserRole. Membros da função de servidor fixa sysadmin e da função db_owner do msdb tornam-se, automaticamente, membros de DatabaseMailUserRole. Para listar todos os outros membros de DatabaseMailUserRole, execute a seguinte instrução:

EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole';



2.Para adicionar usuários à função DatabaseMailUserRole, use a seguinte instrução:

sp_addrolemember @rolename = 'DatabaseMailUserRole'
,@membername = '<database user>';



3.Para enviar Database Mail, os usuários devem ter acesso a, pelo menos, um perfil do Database Mail. Para listar os usuários (entidades) e os perfis aos quais eles têm acesso, execute a instrução a seguir.

EXEC msdb.dbo.sysmail_help_principalprofile_sp;



4.Use o Assistente para Configuração do Database Mail para criar perfis e conceder acesso a eles aos usuários.

Para confirmar se o Database Mail foi iniciado

1.O Programa externo do Database Mail é ativado quando há mensagens de email a serem processadas. Quando não há nenhuma mensagem a enviar no tempo limite especificado, o programa é encerrado. Para confirmar se a ativação do Database Mail foi iniciada, execute a instrução a seguir.

EXEC msdb.dbo.sysmail_help_status_sp;


2.Se a ativação do Database Mail tiver sido iniciada, execute a seguinte instrução para iniciá-la:

EXEC msdb.dbo.sysmail_start_sp;



3.Se o programa externo do Database Mail tiver sido iniciado, verifique o status da fila de emails com a seguinte instrução:

EXEC msdb.dbo.sysmail_help_queue_sp @queue_type = 'mail';


A fila de emails deve ter o estado de RECEIVES_OCCURRING. O status da fila pode variar a todo instante. Se o estado da fila de emails não for RECEIVES_OCCURRING, tente interromper a fila, usando sysmail_stop_sp, e, em seguida, inicie-a por meio de sysmail_start_sp.

Observação

Use a coluna length do conjunto de resultados de sysmail_help_queue_sp para determinar o número de emails na fila.

Para determinar se os problemas do Database Mail estão afetando parcial ou totalmente as contas em um perfil

1.Caso tenha determinado que apenas alguns perfis estão conseguindo enviar emails, pode haver algum problema com as contas do Database Mail utilizadas pelos perfis problemáticos. Para determinar quais contas estão conseguindo enviar email, execute a seguinte instrução:


SELECT sent_account_id, sent_date FROM msdb.dbo.sysmail_sentitems;



2.Se um perfil que não está funcionando não usar nenhuma das contas listadas, é possível que todas as contas disponíveis ao perfil não estejam funcionando adequadamente. Para testar as contas separadamente, use o Assistente para Configuração do Database Mail para criar um novo perfil com uma única conta e, em seguida, use a caixa de diálogo Enviar Email de Teste para enviar um email usando a nova conta.

3.Para exibir as mensagens de erro retornadas pelo Database Mail, execute a seguinte instrução:

SELECT * FROM msdb.dbo.sysmail_event_log;


Observação

O Database Mail considera a mensagem enviada quando consegue entregá-la a um servidor de email SMTP. Erros subseqüentes, como um endereço de email destinatário inválido, podem impedir que a mensagem seja entregue, mas não são inseridos no log do Database Mail.

Para configurar o Database Mail para tentar entregar o email novamente

1.Caso tenha determinado que o Database Mail está falhando porque não está sendo possível alcançar confiavelmente o servidor SMTP, você poderá aumentar a taxa de êxito na entrega de emails aumentado o número de vezes que o Database Mail tenta enviar cada mensagem. Inicie o Assistente para Configuração do Database Mail e selecione a opção Exibir ou alterar parâmetros do sistema. Alternativamente, você pode associar mais contas ao perfil, de modo que, diante da ocorrência de falha na conta primária, o Database Mail use a conta de failover para enviar os emails.

2.Na página Configurar Parâmetros do Sistema, os valores padrão de 5 vezes para Tentativas de Repetição de Conta e de 60 segundos para Atraso na Repetição de Conta significam que a entrega da mensagem falhará se o servidor SMTP não puder ser alcançado em 5 minutos. Aumente esses parâmetros para prolongar o número de tentativas de entregar a mensagem antes de declarar falha.

Observação

Quando um grande número de mensagens é enviado, valores padrão grandes podem aumentar a confiabilidade, porém aumentarão substancialmente o uso de recursos à medida que seguidas tentativas de entregar a mensagem forem sendo feitas. Trate a raiz do problema, resolvendo a condição da rede ou do servidor SMTP que está impedindo o Database Mail de contatar prontamente o servidor SMTP.

Segurança

Você deve ser membro da função de servidor fixa sysadmin para solucionar problemas de todos os aspectos do Database Mail. Usuários que não são membros da função de servidor fixa sysadmin podem, apenas, obter informações sobre os emails que tentam enviar, e não sobre emails enviados por outros.





• Solucionando problemas do Database Mail: Enviando um email de teste
#####################################################################################################

Use a caixa de diálogo Enviar Email de Teste para testar a possibilidade de enviar emails usando um perfil específico.

Procedimentos

Para enviar uma mensagem de email de teste

1.Usando o Pesquisador de Objetos, conecte-se a uma instância do Mecanismo de banco de dados do SQL Server em que haja Database Mail configurado, expanda Gerenciamento, clique com o botão direito do mouse em Database Mail e clique em Enviar Email de Teste. Se não existir nenhum perfil de Database Mail, uma caixa de diálogo solicitará que o usuário crie um perfil e abra o Assistente para Configuração do Database Mail.

2.Na caixa de diálogo Enviar Email de Teste de <nome_da_instância>, na caixa Perfil do Database Mail, selecione o perfil que deseja testar.

3.Na caixa Para, digite o nome do email do destinatário do teste.

4.Na caixa Assunto, digite a linha de assunto do email de teste. Altere o assunto padrão a fim de identificar melhor seu email para a solução de problemas.

5.Na caixa Corpo, digite a corpo da mensagem do email de teste. Altere o assunto padrão a fim de identificar melhor seu email para a solução de problemas.

6.Clique em Enviar Email de Teste para enviar o email de teste à fila do Database Mail.

7.O envio do email de teste faz com que se abra a caixa de diálogo Email de Teste do Database Mail. Anote o número exibido na caixa Email enviado. Trata-se da mailitem_id da mensagem de teste. Clique em OK.

8.Na Barra de Ferramentas, clique em Nova Consulta para abrir a janela do Editor de Consultas. Execute a seguinte instrução para determinar o status da mensagem de teste:

SELECT * FROM msdb.dbo.sysmail_allitems
WHERE mailitem_id = <the mailitem_id FROM the previous step> ;


A coluna sent_status indica se a mensagem de teste foi enviada.

9.Se ocorrerem erros, execute a seguinte instrução para exibir a mensagem de erro:

SELECT * FROM msdb.dbo.sysmail_event_log
WHERE mailitem_id = <the mailitem_id FROM the previous step> ;


Permissões

Você deve ser membro da função de servidor fixa sysadmin para usar a caixa de diálogo Enviar Email de Teste. Usuários que não sejam membros da função de servidor fixa sysadmin podem testar o Database Mail usando o procedimento sp_send_dbmail.




• Solucionando problemas de Database Mail: não foi possível localizar o procedimento armazenado 'sp_send_dbmail'
#####################################################################################################

O procedimento armazenado sp_send_dbmail é instalado no banco de dados msdb. Você deve executar sp_send_dbmail a partir do banco de dados msdb ou especificar um nome de três partes para o procedimento armazenado.

Use o Assistente para Configuração do Database Mail para habilitar e configurar o Database Mail





• Solucionando problemas de Database Mail: perfil inválido
#####################################################################################################

Este tópico descreve como resolver o problema de uma mensagem de erro que afirma que o perfil não é válido.

Há duas causas possíveis para essa mensagem. Ou o perfil especificado não existe ou o usuário que está executando sp_send_dbmail (Transact-SQL) não tem permissão para acessar o perfil.

Para verificar permissões para um perfil, execute o procedimento armazenado sysmail_help_principalprofile_sp (Transact-SQL) com o nome do perfil. Use o procedimento armazenado sysmail_add_principalprofile_sp (Transact-SQL) ou Assistente para Configuração do Database Mail para conceder permissão de acesso a um perfil para um usuário ou grupo do msdb.





• Solucionando problemas de Database Mail: permissão negada em sp_send_dbmail
#####################################################################################################

Este tópico descreve como resolver o problema de uma mensagem de erro que afirma que o usuário que está tentando enviar Database Mail não tem permissão para executar sp_send_dbmail.

O texto do erro é:

EXECUTE permission denied ON object 'sp_send_dbmail',
DATABASE 'msdb', SCHEMA 'dbo'.


Para enviar Database Mail, é necessário ser um usuário do banco de dados msdb e membro da função de banco de dados DatabaseMailUserRole no banco de dados msdb. Para adicionar usuários ou grupos do msdb a essa função, use o SQL Server Management Studio ou execute a instrução a seguir para o usuário ou função que precisa enviar Database Mail.

EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
,@membername = '<user or role name>';
GO






• Solucionando problemas do Database Mail: email na fila, não entregue
#####################################################################################################

Diagnosticando o problema

O programa externo do Database Mail registra a atividade de e-mail no banco de dados msdb.

Primeiro, para confirmar que o Database Mail está habilitado, use a Opção Database Mail XPs do procedimento armazenado do sistema sp_configure.

Em seguida, execute a seguinte instrução no banco de dados msdb para verificar o status da fila de emails:

sysmail_help_queue_sp @queue_type = 'Mail' ;

Para obter uma explicação detalhada das colunas, consulte a seção "Conjunto de resultados" em sysmail_help_queue_sp (Transact-SQL).

Verifique a exibição sysmail_event_log para observar a atividade. A exibição deve conter uma entrada declarando que o programa externo do Database Mail foi iniciado. Se não houver nenhuma entrada na exibição sysmail_event_log, consulte o sintoma Mensagens na fila, nenhuma entrada em sysmail_event_log. Se houver erros na exibição sysmail_event_log, solucione o erro específico.

Se houver entradas na exibição sysmail_event_log, verifique a exibição sysmail_allitems quanto ao status das mensagens.

Status de mensagem “não enviada”

O status de não enviada indica que o programa externo do Database Mail ainda não processou a mensagem de email. O programa externo do Database Mail pode ter se atrasado no processamento das mensagens; a taxa com a qual o programa externo processa mensagens depende das condições da rede, do tempo limite de novas tentativas, do volume de mensagens e da capacidade do servidor SMTP. Se o problema persistir, considere usar mais de um perfil para distribuir mensagens entre mais de um servidor SMTP.

Verifique a data de modificação mais recente das mensagens entregues com êxito. Se a última entrega com êxito tiver ocorrida já há algum tempo, examine a exibição sysmail_event_log para verificar se o programa externo foi iniciado com êxito pelo Service Broker. Se a última tentativa não iniciou o programa externo, verifique se o Programa Externo do Database Mail está localizado no diretório correto e se a conta de serviço do SQL Server tem permissão para o executável.

Observação

Para excluir mensagens antigas não enviadas, aguarde até que as mensagens impossíveis de entregar sejam as mais antigas na fila e use

sysmail_delete_mailitems_sp


para excluí-las.

Status de mensagem “tentando novamente”

O status de tentando novamente indica que o Database Mail tentou entregar a mensagem ao servidor SMTP, mas não teve êxito. Normalmente, isso é causado por uma interrupção da rede, uma falha do servidor SMTP ou uma conta incorretamente configurada do Database Mail. A mensagem dever ter êxito ou falha e postar uma mensagem no log de eventos.

Status de mensagem “enviada”

O status de enviada indica que o programa externo do Database Mail teve êxito na entrega da mensagem ao servidor SMTP. Se a mensagem não chegar ao seu destino, é porque o servidor SMTP a aceitou do Database Mail, mas não a entregou ao destinatário final. Verifique os logs do servidor SMTP ou contate o administrador do mesmo. Você também pode testar o servidor de email SMTP usando outro cliente, como o Outlook Express.

Status de mensagem “falha”

O status de falha indica que o programa externo do Database Mail não conseguiu entregar a mensagem ao servidor SMTP. Neste caso, a exibição sysmail_event_log conterá as informações detalhadas do programa externo. Para obter uma consulta de exemplo que une sysmail_faileditems e sysmail_event_log para recuperar mensagens de erro detalhadas, consulte Como verificar o status de mensagens de email enviadas por Database Mail (Transact-SQL). As causas mais comuns de falha são endereço de destino incorreto ou problemas de rede que impedem o programa externo de acessar uma ou mais contas de failover. Problemas no servidor SMTP também podem fazê-lo rejeitar emails. Usando o Assistente para Configuração do Database Mail, altere o Nível de log para Detalhado e envie um email de teste para investigar o ponto de falha.





• Solucionando problemas do Database Mail: email na fila, nenhuma entrada em sysmail_event_log ou no log de eventos de aplicativos do Windows
####################################################################################################

Este tópico descreve como solucionar oum problema em que as mensagens de email são enfileiradas com êxito, mas nenhuma atividade do programa externo aparece na exibição sysmail_event_log ou no log de eventos de aplicativos do Windows.

O Database Mail depende do Service Broker para enfileirar mensagens de email. Se o Database Mail for interrompido ou se a entrega de mensagens do Service Broker não estiver ativada no banco de dados msdb, o Database Mail formará a fila do banco de dados de mensagens, mas não conseguirá entregar as mensagens. Nesse caso, as mensagens do Service Broker permanecerão na fila do Service Broker Mail. O Service Broker não ativará o programa externo e, logo, não haverá entradas de log em sysmail_event_log, nem atualizações do status do item em sysmail_allitems e nas exibições relacionadas.

Execute a seguinte instrução para verificar se o Database Mail está habilitado:

SELECT is_broker_enabled FROM sys.databases WHERE NAME = 'msdb';


Um valor de 0 indica que a entrega de mensagens do Service Broker não está ativada no banco de dados msdb. Para corrigir o problema, ative o Service Broker no banco de dados. Para obter informações sobre como ativar a entrega de mensagens do Service Broker, consulte Como ativar a entrega de mensagens do Service Broker em bancos de dados (Transact-SQL).

O Database Mail depende de uma série de procedimentos armazenados internos. Para reduzir a área de superfície, esses procedimentos armazenados encontram-se desabilitados em novas instalações do SQL Server. Para habilitar esses procedimentos armazenados, use a opção Database Mail XPs do procedimento armazenado do sistema sp_configure.

O Database Mail pode ser interrompido no banco de dados msdb. Para verificar o status do Database Mail, execute a seguinte instrução:

EXECUTE dbo.sysmail_help_status_sp;


Para iniciar o Database Mail em um banco de dados host de correio, execute o seguinte comando no banco de dados msdb:

EXECUTE dbo.sysmail_start_sp;


O Service Broker examina o tempo de vida da caixa de diálogo das mensagens quando se encontra ativado; portanto, toda mensagem que estiver na fila de transmissão do Service Broker por mais tempo que o tempo de vida configurado para a caixa de diálogo falhará imediatamente. O Database Mail atualiza o status de mensagens que falharam em sysmail_allitems e em exibições relacionadas. Você deve decidir se as mensagens devem ou não ser enviadas novamente. Para obter mais informações sobre como configurar o tempo de vida da caixa de diálogo utilizado pelo Database Mail, consulte sysmail_configure_sp (Transact-SQL).

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Message modifié, 12 octobre 2016 - 16:57
Membre enregistré
2 958 messages
Popularité : +89 (91 votes)
Posté le 12 octobre 2016 - 17:01
LINKS COMPLEMENTARES:
https://technet.microsoft.com/pt-br/library/ms188023(v=sql.105).aspx
https://technet.microsoft.com/pt-br/library/ms177580(v=sql.105).aspx

Send Email From SQL Server - SQL in Sixty Seconds #039


:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Message modifié, 12 octobre 2016 - 17:06
Membre enregistré
2 958 messages
Popularité : +89 (91 votes)
Posté le 12 octobre 2016 - 17:22
SQL SERVER – 2008 – Configure Database Mail – Send Email From SQL Database
###############################################################################################################

Hoje, neste artigo eu iria discutir sobre o Database Mail, que é usado para enviar o e-mail usando o SQL Server. Anteriormente eu tinha discutido sobre SQL SERVER - Diferença entre Database Mail e SQLMail. correio do banco de dados é a substituição do SQLMail com muitas melhorias. Assim, deve parar de usar o SQL Mail e atualizar para o Database Mail. Um agradecimento especial a Software Developer Monica, que ajudou com todas as imagens e extensos testes de assunto deste artigo.

A fim de enviar mensagens usando o Database Mail no SQL Server, há 3 passos básicos que precisam ser realizadas.
1) Criar perfil e conta
2) Configurar Email
3) Enviar E-mail.

Passo 1) Criar perfil e da conta:

Você precisa criar um perfil e conta com o Assistente de Database Mail Configurar que pode ser acessado a partir do menu de contexto Database Mail Configurar do nó do Database Mail em Gestão Node. Este assistente é usado para gerenciar contas, perfis e Database Mail configurações globais que são mostrados abaixo:






































Passo 2) Configurar Email:

Depois que a conta eo perfil são criados com êxito, é preciso configurar o Database Mail. Para configurá-lo, precisamos permitir que o Database Mail XPs parâmetro através do procedimento sp_configure armazenado, como mostrado aqui:

sp_CONFIGURE 'show advanced', 1
GO
RECONFIGURE
GO
sp_CONFIGURE 'Database Mail XPs', 1
GO
RECONFIGURE
GO






Passo 3) Enviar E-mail:

Depois de todas as configurações são feitas, agora estamos prontos para enviar um e-mail. Para enviar correio, precisamos executar um procedimento sp_send_dbmail armazenado e fornecer os parâmetros necessários, como mostrado abaixo:

USE msdb
GO
EXEC sp_send_dbmail @profile_name='PinalProfile',
@recipients='test@Example.com',
@subject='Test message',
@body='This is the body of the test message.
Congrates Database Mail Received By you Successfully.'






Depois de todas as validações dos parâmetros introduzidos são feitas, determinados procedimentos armazenados são executados e o e-mail está na fila por Service Broker, leia mais em SQL SERVER - Introdução ao Service Broker.

Database Mail mantém cópias de mensagens de e-mail de saída e apresenta-nos sysmail_allitems, sysmail_sentitems, sysmail_unsentitems, sysmail_faileditems. O status do e-mail enviado pode ser visto na tabela sysmail_mailitems, quando a mensagem é enviada com sucesso o campo sent_status da tabela de sysmail_mailitems é definido como 1, que pode novamente ser visto na tabela sysmail_sentitems. Os e-mails que são fracassadas terá o valor do campo sent_status a 2 e esses são unsent terá valor 3.

O registro pode ser verificado na tabela sysmail_log como mostrado abaixo:

SELECT *
FROM sysmail_mailitems
GO
SELECT *
FROM sysmail_log
GO






O status pode ser verificado usando a tabela sysmail_sentitems.





Depois de enviar e-mail você pode verificar o e-mail recebido em sua caixa de entrada, assim como eu recebi como mostrado abaixo.





Deixe-me saber o que você pensa sobre este tutorial.

FORTE ABRAÇO A TODOS!

:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
2 958 messages
Popularité : +89 (91 votes)
Posté le 12 octobre 2016 - 17:25
EXEMPLO:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER Procedure [dbo].[NG0006_Procedure_EnviaVoucherEletronico]

AS
BEGIN
SET NOCOUNT ON;

--Variaveis
--//Empresa
DECLARE @Empresa varchar(255);
DECLARE @Endereco varchar(255);
DECLARE @nom_endere_instal varchar(70);
DECLARE @num_endere_instal varchar(50);
DECLARE @des_comple_endere_instal varchar(50);
DECLARE @nom_bairro_instal varchar(30);
DECLARE @nom_cidade_instal varchar(20);
DECLARE @sig_uf_instal varchar(2);
DECLARE @num_cep_instal varchar(10);
DECLARE @num_cgc_instal varchar(20);
DECLARE @num_ie_instal varchar(20);
--//Voucher
DECLARE @Registros int;
DECLARE @RegistrosProcessados int;
DECLARE @num_ano_corrid int;
DECLARE @num_corrid int;
DECLARE @dat_hora_corrid datetime;
DECLARE @cod_client int;
DECLARE @nom_client varchar(70);
DECLARE @convenio varchar(255);
DECLARE @cliente varchar(255);
DECLARE @autorizador varchar(255);
DECLARE @setor varchar(255);
DECLARE @passageiro varchar(255);
DECLARE @corrida varchar(255);
DECLARE @datasolicitacao varchar(255);
DECLARE @dataatendimento varchar(255);
DECLARE @dataembarque varchar(255);
DECLARE @datadesembarque varchar(255);
DECLARE @valor varchar(255);
DECLARE @trajeto varchar(255);
DECLARE @finalidade varchar(100);
DECLARE @latlonembarque varchar(50);
DECLARE @latlondesembarque varchar(50);
DECLARE @centrocusto varchar(255);
DECLARE @ID int;
DECLARE @Assunto varchar(512);
DECLARE @CorpoEmail nvarchar(Max);
DECLARE @emailccusto varchar(1024)
DECLARE @emailconvenio varchar(1024);
DECLARE @emailscliente varchar(1024);
DECLARE @emailcopia varchar(1024);
DECLARE @des_email_vouche_eletro_notifi varchar(1024);
DECLARE @Erro varchar(1024);
--//


--Exemplo
-- set @num_corrid = 92662
-- set @num_ano_corrid = 2015



--Dados da Empresa
SELECT
@Empresa = SIS_INSTALACAO.nom_empres +' - '+ SIS_INSTALACAO.nom_grupo,
@nom_endere_instal = SIS_INSTALACAO.nom_endere_instal,
@num_endere_instal = SIS_INSTALACAO.num_endere_instal,
@des_comple_endere_instal = SIS_INSTALACAO.des_comple_endere_instal,
@nom_bairro_instal = SIS_INSTALACAO.nom_bairro_instal,
@nom_cidade_instal = SIS_INSTALACAO.nom_cidade_instal,
@sig_uf_instal = SIS_INSTALACAO.sig_uf_instal,
@num_cep_instal = SIS_INSTALACAO.num_cep_instal,
@num_cgc_instal = SIS_INSTALACAO.num_cgc_instal,
@num_ie_instal = SIS_INSTALACAO.num_ie_instal
FROM
SIS_INSTALACAO
Order by 1

--Retorno da Empresa
--SELECT @Empresa as Empresa, @nom_endere_instal as Endereco, @num_endere_instal as Numero, @des_comple_endere_instal as Complemento, @nom_bairro_instal as Bairro, @nom_cidade_instal as Cidade, @sig_uf_instal as UF, @num_cep_instal as CEP, @num_cgc_instal as CNPJ, @num_ie_instal as IE;


--Conta quantos registros tem pra processar

Execute NG0007_Procedure_VerificaEnvioVoucher

Select
@Registros = Count(*)
FROM
ACT263_CORRIDA_TRAJETO t with(nolock)
inner join act263_corrida_autoriza_fatura ft
on t.num_ano_corrid = ft.num_ano_corrid AND t.num_corrid = ft.num_corrid
inner join ACT263_CORRIDA cor with(nolock)
on t.num_ano_corrid = cor.num_ano_corrid AND t.num_corrid = cor.num_corrid
Left join ACT263_CLIENTE_CONVENIO_AUTORI ca
on ca.seq_autorz = cor.seq_autorz AND ca.cod_client_conven = cor.cod_client
Left join ACT263_CLIENTE_CONVENIO_CCUSTO cc
on ca.cod_client_conven = cor.cod_client AND ca.cod_centro_custo = cc.cod_centro_custo AND ca.cod_client_conven = cc.cod_client_conven
Left join CLIENTE cli
on cli.cod_client = cor.cod_client
inner join ACT263_CLIENTE_CONVENIO clc
on clc.cod_client_conven = ca.cod_client_conven
WHERE ( clc.des_email_vouche_eletro_notifi is not null OR cc.des_email_vouche_eletro_notifi is not null )
AND mailitem_id is null
AND motivo_nao_envio is null
AND email_status is null

--Resultado
Select @Registros as 'Registros a ser processados';



--Faz somente se tem registros a serem processados
--set @Registros = 1;

IF @Registros > 20
BEGIN
set @Registros =20

END
IF @Registros > 0
BEGIN
set @RegistrosProcessados = 0
WHILE(@Registros > 0) -- LOOP
BEGIN

set @Registros = @Registros - 1;
--Limpa valores do Anterior:
Select @convenio = '';
Select @cliente = '';
Select @autorizador = '';
Select @setor = '';
Select @centrocusto = '';
Select @passageiro = '';
Select @corrida = '';
Select @datasolicitacao = '';
Select @dataatendimento = '';
Select @dataembarque = '';
Select @datadesembarque = '';
Select @valor = '';
Select @trajeto = '';
Select @latlonembarque = '';
Select @latlondesembarque = '';
Select @emailconvenio = '';
Select @emailccusto = '';
Select @CorpoEmail = '';
Select @emailCopia ='';
Select @finalidade = '';
set @num_ano_corrid = 0;
set @num_corrid = 0;



--Loop dos dados obtidos

--Busca os dados a serem enviados
--###############################

Select top 1
@num_ano_corrid = t.num_ano_corrid,
@num_corrid = t.num_corrid,
@convenio = cor.cod_client,
@cliente = cli.nom_client,
@autorizador = ISNULL(ca.cod_matric_autorz,'') + ' - '+ ISNULL(ca.nom_autorz,''),
@setor = ISNULL(ca.cod_centro_custo,'') + ' - ' + ISNULL(cc.des_centro_custo,''),
@centrocusto = ISNULL(cc.des_centro_custo,''),
@passageiro = ISNULL(cor.nom_usuari,''),
@corrida = Convert(Varchar(40),cor.num_corrid) + '/' +Convert(Varchar(40),cor.num_ano_corrid),
@datasolicitacao = (Convert(Varchar(40),cor.dat_hora_cadast,103)+' '+Left(Convert(Varchar(40),cor.dat_hora_cadast,8),5)),
@dataatendimento = (Convert(Varchar(40),cor.dat_hora_atendi,103) +' '+Left(Convert(Varchar(40),cor.dat_hora_atendi,8),5)) + ' RT:'+ Convert(Varchar(40),cor.num_unidad_atendi),
@dataembarque = (Convert(Varchar(40),t.dat_hora_embarq,103) +' '+Left(Convert(Varchar(40),t.dat_hora_embarq,8),5)),
@datadesembarque = (Convert(Varchar(40),t.dat_hora_desemb,103) +' '+Left(Convert(Varchar(40),t.dat_hora_desemb,8),5)),
@valor = Replace(Convert(Varchar(40),ISNULL(t.val_total_corrid,'0.00')),'.',',') +' ('+ Convert(Varchar(40),t.qtd_km_desemb-t.qtd_km_embarq) + 'km)',
@trajeto = 'Origem: '+(ISNULL(cor.nom_lograd_local,'') + ', ' + Convert(Varchar(40),ISNULL(cor.num_local,0))+' '+ ISNULL(cor. des_comple_local,''))+' - '+
'Destino: '+(ISNULL(ft.nom_lograd_local_desemb + ', ' + Convert(Varchar(40),ISNULL(ft.num_local_desemb,0)),'Não Informado')),
@latlonembarque = (Convert(Varchar(15),ISNULL(t.val_latitu_embarq,0.0))) +','+ (Convert(Varchar(15),ISNULL(t.val_longit_embarq,0.0))),
@latlondesembarque = (Convert(Varchar(15),ISNULL(t.val_latitu_desemb,0.0))) +','+ (Convert(Varchar(15),ISNULL(t.val_longit_desemb,0.0))),
@emailconvenio = ISNULL(clc.des_email_vouche_eletro_notifi,''),
@emailccusto = ISNULL(cc.des_email_vouche_eletro_notifi,''),
@finalidade = ISNULL(ft.des_observ_local_refere_desemb,'Não Informada')
from
ACT263_CORRIDA_TRAJETO t with(nolock)
inner join act263_corrida_autoriza_fatura ft
on t.num_ano_corrid = ft.num_ano_corrid AND t.num_corrid = ft.num_corrid
inner join ACT263_CORRIDA cor with(nolock)
on t.num_ano_corrid = cor.num_ano_corrid AND t.num_corrid = cor.num_corrid
Left join ACT263_CLIENTE_CONVENIO_AUTORI ca
on ca.seq_autorz = cor.seq_autorz AND ca.cod_client_conven = cor.cod_client
Left join ACT263_CLIENTE_CONVENIO_CCUSTO cc
on ca.cod_client_conven = cor.cod_client AND ca.cod_centro_custo = cc.cod_centro_custo AND ca.cod_client_conven = cc.cod_client_conven
Left join CLIENTE cli
on cli.cod_client = cor.cod_client
inner join ACT263_CLIENTE_CONVENIO clc
on clc.cod_client_conven = ca.cod_client_conven

WHERE ( clc.des_email_vouche_eletro_notifi is not null OR cc.des_email_vouche_eletro_notifi is not null )
AND mailitem_id is null
AND motivo_nao_envio is null
AND email_status is null
order by cor.dat_hora_atendi


IF @num_ano_corrid > 0 AND @num_corrid > 0
BEGIN
--Resultado
/*
Select @convenio as convenio,
@cliente as cliente,
@autorizador as autorizador,
@setor as setor,
@centrocusto as centrocusto,
@passageiro as passageiro,
@corrida as corrida,
@datasolicitacao as datasolicitacao,
@dataatendimento as dataatendimento,
@dataembarque as dataembarque,
@datadesembarque as datadesembarque,
@valor as valor,
@trajeto as trajeto,
@latlonembarque as latlonembarque,
@latlondesembarque as latlondesembarque,
@emailconvenio as emailconvenio,
@emailccusto as emailccusto,
@num_ano_corrid as numerocorrida,
@num_corrid as anocorrida;
*/

--Monta Html
--##############################################################################################
Select @assunto = 'Voucher Eletronico - Taxi Faixa Vermelha'

Select @CorpoEmail = '<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Voucher Eletronico - Taxi Faixa Vermelha: '+@convenio+' - '+@corrida+' - '+@datasolicitacao+'</title>
</head>
<body>
<br>
<div>
<p style="font-size:10pt;font-family:"Arial","sans-serif"">
<h3>Associacao Radiotaxi Faixa Vermelha<br>
Rua Dr Goulin, 1661 - Bairro Hugo Lange - Curitiba - PR - CEP: 80040-280<br>
Telefone: (41) 3262 6262 - CNPJ: 77.522.225/0001-32 </h3>
<br>
Voucher Eletronico - Informe de utilizacao: '+@convenio+' - '+@corrida+' - '+@datasolicitacao+'
</p>
<table Border=0 cellspacing=3 cellpadding=0 style="width:487.5pt;font-size:10pt;font-family:"Arial","sans-serif"">
<tr>
<td style="width:20.0%;padding:.75pt;text-align:right">Convenio:</td>
<td style="width:74.0%;padding:.75pt">'+@convenio+'</td>
</tr>
<tr>
<td style="padding:.75pt;text-align:right">Cliente:</td>
<td style="padding:.75pt;">'+@cliente+'</td>
</tr>
<tr>
<td style="padding:.75pt;text-align:right">Autorizador:</td>
<td style="padding:.75pt;">'+@autorizador+'</td>
</tr>
<tr>
<td style="padding:.75pt;text-align:right">Setor:</td>
<td style="padding:.75pt">'+@setor+'</td>
</tr>
<tr>
<td style="padding:.75pt;text-align:right">Centro de Custo:</td>
<td style="padding:.75pt">'+@centrocusto+'</td>
</tr>
<tr>
<td style="padding:.75pt;text-align:right">Passageiro:</td>
<td style="padding:.75pt">'+@passageiro+'</td>
</tr>
<tr>
<td style="padding:.75pt;text-align:right">Corrida:</td>
<td style="padding:.75pt">'+@corrida+'</td>
</tr>
<tr>
<td style="padding:.75pt;text-align:right">Solicitacao:</td>
<td style="padding:.75pt">'+@datasolicitacao+'</td>
</tr>
<tr>
<td style="padding:.75pt;text-align:right">Atendimento:</td>
<td style="padding:.75pt">'+@dataatendimento+'</td>
</tr>
<tr>
<td style="padding:.75pt;text-align:right">Embarque:</td>
<td style="padding:.75pt">'+@dataembarque+'</td>
</tr>
<tr>
<td style="padding:.75pt;text-align:right">Desembarque:</td>
<td style="padding:.75pt">'+@datadesembarque+'</td>
</tr>
<tr>
<td style="padding:.75pt;text-align:right">Valor R$:</td>
<td style="padding:.75pt">'+@valor+'</td>
</tr>
<tr>
<td style="padding:.75pt;text-align:right">Trajeto:</td>
<td style="padding:.75pt">'+@trajeto+'</td>
</tr>
<tr>
<td style="padding:.75pt;text-align:right">Finalidade:</td>
<td style="padding:.75pt">'+@finalidade+'</td>
</tr>
<tr>
<td style="padding:.75pt;text-align:right">Latitude/Longitude Embarque:</td>
<td style="padding:.75pt">'+@latlonembarque+'</td>
</tr>
<tr>
<td style="padding:.75pt;text-align:right">Latitude/Longitude Desembarque:</td>
<td style="padding:.75pt">'+@latlondesembarque+'</td>
</tr>
<tr>
<td style="padding:.75pt;text-align:right">Mapa:</td>
<td style="padding:.75pt"><a href="https://www.google.com.br/maps/dir/'+@latlonembarque+'/'+@latlondesembarque+'">Visualizar</a></td>
</tr>
</table>
</div>
</body>
</html>';

-- Select @CorpoEmail as CorpoEmail01;
-- Select @CorpoEmail as CorpoEmail02;

--Envia Email
--##############################################################################################
IF @emailconvenio <> '' AND @emailccusto <> ''
Select @emailscliente = @emailconvenio +';'+ @emailccusto;
ELSE
BEGIN
IF @emailconvenio <> '' AND @emailccusto = ''
Select @emailscliente = @emailconvenio
ELSE IF @emailconvenio = '' AND @emailccusto <> ''
Select @emailscliente = @emailccusto
END;


Select @emailscliente as emailcliente

Select @emailcopia = 'comercial@taxifaixavermelha.com.br;adrianoboller@gmail.com;celio@girotron.com.br';
-- select @emailscliente = 'adrianoboller@gmail.com;celio@girotron.com.br';
-- Select @emailcopia,@emailscliente

IF (@emailscliente<> ''AND @assunto <> '' AND @CorpoEmail <> '' AND @emailcopia<>'')
BEGIN

--Com Email
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'DBAMail',
@recipients = @emailscliente,
@copy_recipients = @emailcopia,
@subject = @assunto,
@body = @CorpoEmail,
@body_format = 'HTML',
@mailitem_id = @ID OUTPUT;

--Grava ID de envio no Corrida Trajeto

IF (@ID is not null)AND @ID>0
BEGIN


set @RegistrosProcessados = @RegistrosProcessados + 1

declare @tentativas int

select @tentativas = (ISNULL(num_tentativas,0) + 1)
from ACT263_CORRIDA_TRAJETO
WHERE
num_ano_corrid = @num_ano_corrid AND num_corrid = @num_corrid

Update
ACT263_CORRIDA_TRAJETO
Set mailitem_id = @ID, email_status = 'processando', num_tentativas = @tentativas
WHERE
num_ano_corrid = @num_ano_corrid AND num_corrid = @num_corrid
END
END

ELSE

BEGIN

--Sem email

-- select 'ERRO NOS CAMPOS @emailscliente @assunto @CorpoEmail @emailcopia', @emailscliente as a,@assunto as b, @CorpoEmail as c, @emailcopia as d


Select @emailcopia = 'comercial@taxifaixavermelha.com.br;adrianoboller@gmail.com;celio@girotron.com.br';
Select @Erro = 'Verificar o Email da Corrida: '+@num_corrid +'/'+ @num_ano_corrid;
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'DBAMailErro',
@recipients = 'sac_vouchers_erro@faixavermelha.com.br',
@copy_recipients = @emailcopia,
@subject = 'Voucher sem Email',
@body = @Erro;


END


END

ELSE


BEGIN

-- Select 'Registro(s) processado(s) com sucesso';

set @Registros = 0;

END --- IF @num_ano_corrid > 0 and @num_corrid > 0

END --WHILE(@Registros>0) Loop Fim

Select @RegistrosProcessados as 'Registro(s) processado(s) com sucesso';

END -- IF @Registros > 0

ELSE

Select 'Nenhum Registro processado';

END


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
2 958 messages
Popularité : +89 (91 votes)
Posté le 12 octobre 2016 - 17:29
CLIQUE AQUI PARA ASSISTIR AO VIDEO SOBRE O ASSUNTO



Obs.: Com esse recurso tentamos passar todos os passos para a implementação desse recurso, sendo assim possível visualizar no celular, tablet e no computador os emails programados para diversas situações que podem ser implementadas em suas aplicações Windev/Webdev e Windev Mobile, enriquecendo em muito a bibliografia sobre esse assunto em um só post com todos os detalhes.

:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/