Autor | Zpráva | ||
---|---|---|---|
Macos Profil * |
#1 · Zasláno: 20. 7. 2009, 09:50:31
Ahoj...
Potřeboval bych s něčím poradit... Mám databázi uživatelů, a v jedné z kolonek je jejich e-mail... Já bych potřeboval v PHP udělat skript, pomocíkterého bych odeslal e-mail s určitým předmětem, zprávou na všechny maily co jsou v databázi. Zkoušel jsem to asi 3 způsoby, pokatždé jsem hledal chybu proč to nefunguje ale nikdy jsem ji nenašel... Proto píšu sem a doufám že mi bude někdo ochoten pomoct. Mělo by to být formou že bude na stránce formulář, já tam napíšu od koho je mail, předmět a zprávu a pak dám odeslat a mailse odešle na všechny adresy v databázi... víte někdo jak na to? díky |
||
fuckin Profil |
#2 · Zasláno: 20. 7. 2009, 09:54:58
$dotaz = mysql_query(...); while($row=mysql_fetch_array($dotaz)){ mail($row['email'], ....); } |
||
Aesir Profil |
#3 · Zasláno: 20. 7. 2009, 09:59:22
Macos:
Pokud vám stačí ne úplně profi řešení a nevadí, že budou příjemci v poli "komu" mít "undisclosed-recipients", stačí je přidat všechny do bcc. Pokud to vadí, tak použijte fuckinovo řešení, ale berte to jako hodně jednoduchou kostru. Chce si to ukládat komu již bylo doručeno a komu ne a nejlépe se zamykáním tabulky a zavřít celou operaci do transakce, abyste měl jistotu, že to odejde každému právě a pouze jednou. |
||
cistax Profil |
#4 · Zasláno: 20. 7. 2009, 10:03:41 · Upravil/a: cistax
jsem toho názoru, ze pokud pouzije fuckinovo reseni, myslim, ze to zamykani tabulky nebude potrebne, kdyz se k emailu nastaví Unique, takze kazdy email může být jen jednou v db, tudíž nemůže odejít dvakrát. Pokud se nemýlím
//EDIT: pokud tedy ten sql nebude nejak extraslozity a neudela v nem chybu, ktera zpusobi, dvojite vypsani emailu:) |
||
Joker Profil |
#5 · Zasláno: 20. 7. 2009, 10:04:11
fuckin:
Možná lepší než posílat X-krát mail by bylo poslat jeden na všechny adresy? $dotaz = mysql_query(...); $addr = ""; while($row=mysql_fetch_array($dotaz)){ if($addr) $addr .= ","; $addr .= $row['email']; } mail($addr,...); ...možná by ale bylo lepší nezobrazovat všechny adresy všem a dát je do BCC. |
||
Aesir Profil |
#6 · Zasláno: 20. 7. 2009, 10:10:21
cistax:
A jak zabezpečíte to, že se ten skript nespustí paralelně víckrát? Podle mého je nejjednodušší řešení zamknout tabulku a v jedné transakci vybrat e-mail, který ještě nebyl odeslán, pokusit se odeslat. Pokud bude odeslání úspěšné, tak updatnout záznam, že je odeslaný, commitnout transakci a odemknout tabulku. |
||
Alphard Profil |
#7 · Zasláno: 20. 7. 2009, 10:16:51
Aesir, Joker:
Záleží na hostingu. Podobnou věc jsem dělal před půl rokem na jednom z menších hostingů (nechci jmenovat konkrétně). Šlo řádově o stovky mailů jednou za týden, tak jsem to radši konzultoval s technickou podporou (jestli to jejich SMTP server utáhne). A bylo mi řečeno, že ano, ale že to mám odeslat v cyklu, tedy na každého přijemce jeden mail. |
||
Aesir Profil |
#8 · Zasláno: 20. 7. 2009, 10:23:33
Alphard:
Určitě ano. Větší počet e-mailů chce určitě vždycky domluvit i ve vlastním zájmu, aby se to kdyžtak směrovalo přes nějaký spolehlivý mailserver. Pokud jde o hodně velký počet e-mailů, je taky dobrá praktika rozesílání uměle zpomalovat - kvůli antispamu. Antispamy ostatně taky nemají rádi ani velký počet bcc. |
||
cistax Profil |
#9 · Zasláno: 20. 7. 2009, 10:51:04
Aesir: to máte asi pravdu, ale ještě se mi to nestalo:)
|
||
Časová prodleva: 15 let
|
0