[pgsql] funkcja wysyłająca maila?
ethanak - 24-12-2006 00:37
[pgsql] funkcja wysyłająca maila?
Witam.
PostgreSQL 8.1.4, Linux.
Krótko: mam funkcję w plpgsql zakładającą konto użytkownika. Funkcja może być wywoływana z kilku różnych aplikacji (w tym przynajmniej jednej której nie mogę tknąć) toteż wysyłka maila z poziomu aplikacji jest niemożliwa.
Pytanie: jak w najprostszy sposób wysłać użytkownikowi maila z powiadomieniem że konto zostało założone?
Zakładam że:
a) wysłanie maila jest ostatnią czynnością w transakcji;
b) nie interesuje mnie to czy mail został wysłany (jest to tylko jedna z form powiadomienia) i niewysłanie/wysłanie nie może mieć żadnego wpływu na transakcję;
c) istnieje lokalny MTA (msmtp konkretnie) który tylko do tego służy.
Aha, zapomniałbym... podobno to bardzo proste w plperlu i plpythonie, niestety moje wiadomości z zakresu tych języków sprowadzają siędo tego, że wiem że są :(
ethanak -- mailto=window.atob('ZXRoYW5ha0Bwb2xpcC5jb20='); Jedyny produkt M$ który by nie ssał to byłby odkurzacz
ethanak - 24-12-2006 00:37
ethanak wrote: [...]
Nieaktualne - nauczyłem się podstaw pythona :)
ethanak -- mailto=window.atob('ZXRoYW5ha0Bwb2xpcC5jb20='); /* Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie. To jest ewidentna bezczelność! S. Friedmann/J. Kofta */
hubert depesz lubaczewski - 24-12-2006 00:37
On 2006-12-14, ethanak <sweethanak@buziaczek.pl> wrote: > Pytanie: jak w najprostszy sposób wysłać użytkownikowi maila z > powiadomieniem że konto zostało założone?
hmmm .. musisz użyć języka typu untrusted.
> Zakładam że: > a) wysłanie maila jest ostatnią czynnością w transakcji;
to nie ma większego znaczenia.
> b) nie interesuje mnie to czy mail został wysłany (jest to tylko jedna z > form powiadomienia) i niewysłanie/wysłanie nie może mieć żadnego wpływu > na transakcję;
fine.
> c) istnieje lokalny MTA (msmtp konkretnie) który tylko do tego służy. > Aha, zapomniałbym... podobno to bardzo proste w plperlu i plpythonie, > niestety moje wiadomości z zakresu tych języków sprowadzają się do tego, > że wiem że są :(
1. createlang plperlu 2. create function send_mail(text, text, text) returns void as $BODY$ my ($to, $subject, $body) = @_; use Mail::Sender; .... $BODY$ language plperlu; kodu perlowego nie tlumacze bo wydaje mi sie, ze pisac w perlu potrafisz :) 3. po zalozeniu maila zrob select send_mail(costam); w szczegolnosci jak zakladasz funkcja, albo chcesz to z triggera w pl/pgsql'u to zamiast select'a mozesz: perform send_mail(.....); i to wszystko.
depesz
-- http://www.depesz.com/ -> nowy, jeszcze lepszy, depesz
ethanak - 24-12-2006 00:37
hubert depesz lubaczewski wrote: [...] > 3. po zalozeniu maila zrob select send_mail(costam); > w szczegolnosci jak zakladasz funkcja, albo chcesz to z triggera w > pl/pgsql'u to zamiast select'a mozesz: > perform send_mail(.....); > i to wszystko.
Dzięki - zrobiłem to prawie identycznie tyle że w pythonie (na szczęście mam tu obok kolesia co mniej więcej ten język kuma) - perl jest dla mnie czarną magią i tak chyba pozostanie...
Dodatkowo zrobiłem tak, że wywoływana jest nie bezpośrednio funkcja wysyłająca maila (bo czekała na dogadanie się z smtp) ale dodatkowy zewnętrzny programik który forkuje się, robi grzecznie exit coby postgres nie musiał na niego czekać i dopiero ten sforkowany pociotek męczy się z smtp.
Na razie działa... zobaczymy jak to wyjdzie w wersji produkcyjnej :)
ethanak -- mailto=window.atob('ZXRoYW5ha0Bwb2xpcC5jb20='); /* Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie. To jest ewidentna bezczelność! S. Friedmann/J. Kofta */
hubert depesz lubaczewski - 24-12-2006 00:37
On 2006-12-14, ethanak <sweethanak@buziaczek.pl> wrote: > Dodatkowo zrobiłem tak, że wywoływana jest nie bezpośrednio funkcja > wysyłająca maila (bo czekała na dogadanie się z smtp) ale dodatkowy > zewnętrzny programik który forkuje się, robi grzecznie exit coby > postgres nie musiał na niego czekać i dopiero ten sforkowany pociotek > męczy się z smtp.
szczerze? jak już robisz takie coś to lepiej zrób inaczej. zrób tablicę z kolejką rzeczy do wysłania. tam wstawiaj dane (wystarczy pl/pgsql). a potem cronjob albo daemon który to czyta i wysyła. zdecydowanie lepsze.
depesz
-- http://www.depesz.com/ -> nowy, jeszcze lepszy, depesz
ethanak - 24-12-2006 00:37
hubert depesz lubaczewski wrote: [...] > szczerze? jak już robisz takie coś to lepiej zrób inaczej. > zrób tablicę z kolejką rzeczy do wysłania. > tam wstawiaj dane (wystarczy pl/pgsql). > a potem cronjob albo daemon który to czyta i wysyła. > zdecydowanie lepsze.
Tak dotychczas robiłem - wyjątkowo na tej maszynie jednak nie chcę mieć żadnych dodatkowych demonów (które mają to do siebie że się oddemonizowywują w najmniej spodziewanym momencie) ani wpisów do crona. Zresztą właśnie próbujemy się pozbyć wszelkich dodatkowych procesów (koleś próbuje właśnie zmusić Asteriska do pracy z Postgresem, na razie z miernym skutkiem).
Może to i takie rozwiązanie naokoło, ale zawsze jakieś jest :)
ethanak -- mailto=window.atob('ZXRoYW5ha0Bwb2xpcC5jb20='); /* Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie. To jest ewidentna bezczelność! S. Friedmann/J. Kofta */
Mikolaj Rydzewski - 24-12-2006 00:37
ethanak <sweethanak@buziaczek.pl> wrote:
> Tak dotychczas robiłem - wyjątkowo na tej maszynie jednak nie chcę mieć > żadnych dodatkowych demonów (które mają to do siebie że się > oddemonizowywują w najmniej spodziewanym momencie) ani wpisów do crona. > Zresztą właśnie próbujemy się pozbyć wszelkich dodatkowych procesów > (koleś próbuje właśnie zmusić Asteriska do pracy z Postgresem, na razie > z miernym skutkiem).
Jest taka regula: KISS - keep it simple st.... ;-)
Cronjob, daemon sie do niej stosuja. Czego nie mozna powiedziec o forkowaniu zewnetrznego procesu uruchamianego przez postgresa w okreslonych sytuacjach ;-)
-- Mikolaj Rydzewski <miki@ceti.pl> http://ceti.pl/~miki/ PGP KeyID: 8b12ab02 There are three kinds of people: men, women, and unix.
ethanak - 24-12-2006 00:37
Mikolaj Rydzewski wrote: [...] > Jest taka regula: KISS - keep it simple st.... ;-)
A znam, znam :)
> > Cronjob, daemon sie do niej stosuja. Czego nie mozna powiedziec o > forkowaniu zewnetrznego procesu uruchamianego przez postgresa w > okreslonych sytuacjach ;-) >
Wyobraź sobie że dla mnie jest to z pewnych przyczyn prostsze (nieważne jakich, ale jest). Toteż do tej reguły się stosuję...
ethanak -- mailto=window.atob('ZXRoYW5ha0Bwb2xpcC5jb20='); /* Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie. To jest ewidentna bezczelność! S. Friedmann/J. Kofta */
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
=?ISO-8859-2?Q?Narz=EAdzie_do_budowania_zapyta=F1_SQL=2C?==?I SO-8859-2?Q?_PL/PgSQL=2C_PL/SQL=2C_T-SQL?=
Photoshop CS2 - funkcje, =?ISO-8859-2?Q?kt=F3rych_si=EA_nie_?==?ISO-8859-2?Q?spodziewasz=2E=2E=2E?=
[PostgreSQL] jak =?ISO-8859-2?Q?pobra=E6_warto=B6=E6_zwracan?==?ISO-8859-2?Q?=B1_przez_funkcj=EA=3F?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
[pgsql] Akcja w =?iso-8859-2?b?emFsZb9ub7ZjaQ==?= od liczby zmienionych =?iso-8859-1?q?rekord=F3w?=
[PostgreSQL] Jak =?ISO-8859-2?Q?po=B3=B1czy=E6_funkcje_z_w?==?ISO-8859-2?Q?idokiem?=
[sql][pgsql] zapytanie sql
[pgsql] Wykonanie triggera po =?ISO-8859-2?Q?zako=F1czeniu_tra?==?ISO-8859-2?Q?nsakcji?=
postgres - ile razy wykona =?ISO-8859-2?Q?si=EA_funkcja_w_?==?ISO-8859-2?Q?zapytaniu?=
[MySQL] Load data infile i =?ISO-8859-2?Q?u=BFycie_funkcji_r?==?ISO-8859-2?Q?eplace?=
zanotowane.pldoc.pisz.plpdf.pisz.pllunadance.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|