Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: vb6 automaattinen sähköpostin lähetys

Sivun loppuun

Apuvaaaa [18.09.2009 21:21:17]

#

Teen ohjelmaa, joka lähettää ohjelmaan asetetun päivämäärän täytyttyä varoituksen sähköpostilla. Jos teen lähetyksen tyylillä, kuin jotain nappia painettaisiin lähettääkö ohjelma mahdollisesti sähköpostin tukkoon. Vai tarvitseeko ottaa jotain muuta huomioon. Noh ilmaisin taas asian epäselvästi.

Jos käsken ohjelmaa lähettämään s-postia, kun tietty pvm täyttyy ymmärtääkö vb6 lähettää tapahtuman vain kerran, vai toistaako se itseään koko ko. päivän? Ja jos toistaa kuinka voin tehdä ohjelmasta sellaisen, että se haistelee pvm. vain kerran. Huom. Ohjelma on käyttäjällä päällä jatkuvasti.

Tässä tapauksessa ohjelman käyttäjä merkitsee tietokantaan päivämäärän, milloin Hän haluaa ohjelman muistuttavan Häntä tapahtumasta. Ohjelma edelleen lähettää käyttäjän sähköpostiin muistutuksen tapahtumasta em. päivämäärän täytyttyä.

Kiitokset vastauksista jo etukäteen!!!

neau33 [18.09.2009 23:51:24]

#

Moro Apuvaaaa!

Elikäs siis periaatteessa olisi hyvä olla kaksi eri ohjelmaa: Agentti (voisi toteuttaa esim. Windows Service pohjalta), joka tutkii tietokannan ja hoitaa mailaamisen sekä sovellus jolla hoidellaan tietokannan hallinnointi.

Tietokantaan voi pistää vivun joka asetetaan True asentoon, kun mahdolliset päivän mailit on kertaalleen lähetetty...

Jos nyt agentti avataan vaikkapa Windowsin käynnistyksen yhteydessä niin se kannattaisi laittaa sulkemaan itsensä automaattisesti jos tietokannasta ei löydy ko. päivälle merkintää tai kun mahdolliset mailit on lähetetty.

Kun hallintasovellus käynnistetään niin sen tulisi ensitöikseen tsekkata prosesseista rullaako agentti ja pysäyttää prosessi mikäli rullaa.

Kun ja jos tietokantahallinnassa tehdään muutoksia niin hallintaohjelman pitäisi sulkemisensa yhteydessä käynnistää agentti (joka sitten taas sulkeutuu automaattisesti, kun tietokanta on tsekattu), jolloin homma hoituu jokseenkin synkronoidusti...

Grez [19.09.2009 07:49:18]

#

Kannattaa laittaa tietokantaan myös kenttä, että viesti on lähetetty. Sähköpostin lähettävä kikkare sitten merkitsee ko. kenttään että viesti on lähetetty, eikä yritä lähettää sitä enää uudelleen.

Apuvaaaa [19.09.2009 21:44:58]

#

Kiitokset avusta, mutta ratkaisin ongelman niin, että pistin käyttäjän määrittämään kellonajan, milloin viesti tulee lähettää. Em. kellonaikaa ei ole kuin kerran päivän aikana ja näin ohjelma lähettää vain yhden viestin.

Vielä kerran kiitokset vaivannäöstä.

Apuvaaaa

hk [20.09.2009 21:58:51]

#

Kyllä tuo Grezin ehdottama ratkaisu sentään on varmempi ja helppo toteuttaa. Jos ohjelma tarkistaa vaikka sekunnin välein, onko kello niin paljon, että viesti pitää lähettää, ja aika on määritelty sekunnin tarkkuudella, on mahdollista että yhtään tarkistusta ei tehdä oikeaan aikaan, jos joku muu ohjelma kuormittaa konetta, vaikkapa virustutka innostuu touhuamaan juuri silloin. Jos taas tarkistus tehdään vaikka sekunnin välein, mutta aikaa verrataan kymmenen sekunnin tarkkuudella, lähtee viesti varmasti, mutta useimmiten 10 kertaa.

Apuvaaaa [20.09.2009 22:21:32]

#

hk
No tuota en nyt tullutkaan ajatelleeksi. Tein kylläkin Grezin mukaisen lisäyksen tietokantaan ja tästä sain myös idean tehdä lähetyslogin. Täytynee tuumata miten tuon toteutan.

Kohta olen täällä taas huutamassa Apuvaaaa.

neau33 [20.09.2009 23:31:15]

#

No heippa taas!

Jos ehdottamani vipu eli {kenttä:mailattu->arvo:true/false} ei jostain kumman syystä toimisi niin voihan sen viritemän säätää poistamaan ko. päivän tietueet heti kun mailit on lähetelty ja sitä raataa...

Grez [21.09.2009 05:51:25]

#

Itse ehdottaisin päivämäärä&kellonaika-kenttää lähetykselle. Null jos ei lähetetty. Samalla saisi kätevästi lähetyslokin.

neau33 [21.09.2009 11:53:51]

#

No morjens taas!

ITSE taas laittaisin tietokantaan lokitaulun jonne pukkaisin tiedot lähetetyistä posteista ja liittäisin tietokanatahllinta-ohjelmaan toiminon joka tsekkaisi silloin tällöin sähköpostipalvelimelta mahdolliset Mail delivery failed-aiheiset viestit ja jos sellainen/sellaisia löytyisi toiminto pukkaisi niistä tiedon lokitauluun, poistaisi em. viestit palvelimelta ja näyttäisi viestilootalla käyttäjälle, että ko. viesti/viestejä ei ole voitu toimittaa perille syystä vikakoodi: FF jne.

että sellaista hauskaa taas tällä kertaa...

Grez [21.09.2009 12:31:06]

#

Toki, jos tuollaiselle on tarvetta. Oma ehdotukseni ei vaatisi käytännössä lainkaan lisätyötä verrattuna pelkkä kyllä/ei -kenttään verrattuna, mutta silti sieltä pystyisi tarvittaessa katsomaan mihin aikaan niitä viestejä oikeasti on lähetetty.

neau33 [21.09.2009 14:15:06]

#

Heippa taas!

Ehdottamassani viritelmässä on se etu, että jos ja kun agentti-ohjelma lähettää niin se lisää lähettämisen jälkeen lokitauluun tarvittavat tiedot ja poistaa tsekattavasta taulusta ko. päivämäärän tietueet. Tällöin ei agentin tsekkaamien tietueiden määrä kasva edes ajankaan myötä mittavaksi, jolloin agentti suoriutuu tehtävästään aina suurinpiirtein samalla nopeudella.

Grez [21.09.2009 15:18:08]

#

neau33 kirjoitti:

Tällöin ei agentin tsekkaamien tietueiden määrä kasva edes ajankaan myötä mittavaksi, jolloin agentti suoriutuu tehtävästään aina suurinpiirtein samalla nopeudella.

Ja tämä toisaalta onnistuu myös laittamalla tuohon "lähetetty" kenttään indeksi.

neau33 [21.09.2009 16:18:52]

#

No MORJENS!

@Grez: siis ettäkö SQL SELECT query ei jollain konstilla tsekkaisikaan kaikkia tietueita???

Grez [21.09.2009 16:22:22]

#

neau33 kirjoitti:

@Grez: siis ettäkö SQL SELECT query ei jollain konstilla tsekkaisikaan kaikkia tietueita???

No moi Nea.

Jep, näin on. Tutustu ihmeessä indekseihin (ne auttaa monessa muussakin suorituskykyjutussa) ja sitten tietysti tarvitset where-avainsanan kyselyyn!

neau33 [21.09.2009 17:30:19]

#

Heippa taas!

@Grez: josko vääntäisit pienoisen rautalankamallin..?

Grez [21.09.2009 17:44:44]

#

Indeksi on vähän niin kuin kirjan aakkosellinen hakemisto. Voit lukea tietyn sanan sisältävät sivut kätevästi ilman, että muita sivuja täytyy lukea ollenkaan.

Esimerkin tapauksessa WHERE-lause voi käyttää indeksiä käydäkseen läpi vain ne tietueet, joissa "lähetetty" on null.

neau33 [21.09.2009 18:29:35]

#

Heippa taas!

@Grez: Tuossa minun mallissani ei ole tarvetta "selata mitään hakemistoja" eikä tsekkailla erikseen suoritetaanko vertailu vaiko eikö syystä, että tietojoukko pysyy aina minimaalisena ja erilliseen lokintauluun viennin aiheuttama hidastus kuittautuu sillä, että indeksin asettaminen hidastaa DML operaatioita (UPDATE jne.)

Grez [21.09.2009 18:35:51]

#

Niin, kuten sanoinkin, niin myös indeksillä saavutetaan se, että agentti selviytyy aina suurin piirtein samassa ajassa. En toki sanonut ettei sinunkin esittämäsi vaihtoehto toimi. (tosin kyllä se tietokanta sinunkin vaihtoehdossasi joutuu tekemään vastaavia hakuja, vaikka taulussa tiedot näyttävätkin olevan kivasti peräkkäin)

Mutta onhan se hienoa että pääsit tutustumaan indekseiden ihmeisiin. Niistä on taatusti sinullekin hyötyä jatkossa, vaikkei juuri tässä tapauksessa olisikaan.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta