Stack Overflow em Português Asked on October 22, 2020
Gostaria de criar um agendador de disparo de e-mail, se possível, sem uso do cron
, e gostaria de saber se é possível fazer isso através do MySQL.
Pesquisando pela Internet eu vi alguns exemplos de criação de evento sem uso de cron:
CREATE EVENT PurgeLogTable
ON SCHEDULE EVERY 1 WEEK
DO
BEGIN
DELETE FROM `logs` WHERE `LogTime` <= DATE_SUB(CURRENT_TIMESTAMP,INTERVAL 1 WEEK);
INSERT INTO `audit` (`AuditDate`, `Message`) VALUES(NOW(), "Log table purged succesfully!");
END
E um exemplo de disparo de e-mail usando trigger, só não sei se funciona, pois não testei:
CREATE TRIGGER send_emailverifier AFTER INSERT, UPDATE ON tbl_users
FOR EACH ROW BEGIN
SELECT * FROM email_bodies WHERE EmailID = 1;
SELECT * FROM tbl_users WHERE ClientID = @ClientID
INSERT INTO tbl_emailverify VALUES (UUID, tbl_users.ClientID, OLD.CltEmail, NEW.CltEmail)
SELECT concat("To: ",NEW.CltEmail & "," & OLD.CltEmail),
"From: [email protected]",
concat("Subject: ",NEW.subject),
"",
email_bodies.EmailContent
INTO OUTFILE "/inetpub/mailroot/pickup/mail.eml"
FIELDS TERMINATED by 'rn';
END
Mas minha dúvida é pertinente quanto à maneira de como poderia avisar um disparador de e-mail, para que acione o URL de envio, exemplo:
/enviar-emails/go
Eles têm propósitos bem diferentes, como a sintaxe apresentada na pergunta já dá uma dica.
O TRIGGER
é um recurso antigo dos banco de dados em geral para disparar - como o próprio nome diz - uma execução de algo quando algo ocorre em uma tabela. Uma mudança nos dados (INSERT
, UPDATE
, DELETE
) provoca a ação secundária.
O EVENT
é um recurso relativamente novo que é determinado pelo tempo, é um agendador. É uma forma de garantir que uma ação seja executada de tempos em tempos, independente do que ocorre no banco de dados. Ele é uma espécie de cron
do banco de dados.
Então depende do objetivo para disparar o e-mail. Toda vez que um e-mail é inserido ou atualizado na tabela, precisa dispará-lo? Use o TRIGGER
, como mostra o código acima. Se o envio - mesmo que seletivamente - deve ser feito de tempos em tempos, independente do que ocorre no banco de dados, use o EVENT
.
A ação que ambos executam podem ser basicamente a mesma. Claro que há algumas limitações no EVENT
porque ele não está manipulando dados. Por exemplo, ele não tem uma versão velha ou nova do dado que pode ser usado no TRIGGER
, mas é uma limitação que não atrapalha porque nem faria sentido ter isto em algo que não está atualizando os dados.
Correct answer by Maniero on October 22, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP