Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Skrypt do wysyłania e-mail do użytkowników
Forum PHP.pl > Forum > Przedszkole
szczalpi
Witam
Mam skrypt do wysyłania e-maili. Tylko jest błąd a nie wiem gdzie. Otóż to.
1. Jeżeli w pliku mam wpisane np:10 e-maili to wyświetla mi się 10 pól do wysyłania.
2. Jeżeli e-mail już jest wysłany źle wskazuje stronę kodowania wyskakują krzaczki.
Proszę o pomoc w rozwiązaniu problemu.
Pozdrawiam

  1. <head>
  2. <meta http-equiv="Content-Language" content="pl" />
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  4. </head>
  5. <html>
  6. <body>
  7. <?php
  8. // sprawdzamy, czy zmienna $submit jest pusta
  9.  
  10.  
  11. $maile = file("plik.txt");
  12.  
  13. $wyslij=@mail;
  14. $plik = fopen("plik.txt", "r");
  15.  
  16. while ($mail = fgets($plik, 250))
  17.  
  18.  
  19.  
  20. if (empty($_POST['submit'])) {
  21. // wyświetlamy formularz
  22. echo "<table border=\"0\"><form method=\"post\">
  23. <tr>
  24. <td>Treść wiadomości</td>
  25. <td><textarea name=\"tresc\" style=\"width: 250px; height: 100px\"></textarea></td>
  26. </tr>
  27. <tr>
  28. <td>Imię, nazwisko lub nick</td>
  29. <td><input type=\"text\" name=\"imie\" style=\"width: 250px\"></td>
  30. </tr>
  31. <tr>
  32. <td>Adres e-mail</td>
  33. </tr>
  34. <tr>
  35. <td>&nbsp;</td>
  36. <td><input type=\"submit\" name=\"submit\" value=\"Wyślij\">&nbsp;
  37. <input type=\"reset\" value=\"Od nowa\"></td></form>
  38. </tr>
  39. </table>";
  40. }
  41. // sprawdzamy, czy zmienne przesłane z formularza nie są puste
  42. elseif (!empty($_POST['tresc']) && !empty($_POST['imie'])) {
  43. // jeżeli powyższy warunek jest spełniony tworzona jest wiadomość
  44. // zmienna $message zawiera treść wiadomości
  45. $message = "Treść wiadomości:\n$_POST[tresc]\nWysłał: $_POST[imie]";
  46. // zmienna $header zawiera przede wszystkim adres zwrotny
  47. $header = "From: info@eszukaj.com ";
  48. // funkcja mail() za pomocą której wiadomość zostanie wysłana
  49. $wyslij("$mail","Wiadomosc ze strony WWW","$message","$header")
  50. or die('Nie udało się wysłać wiadomości');
  51. // wyświetlenie komunikatu w przypadku powodzenia
  52. echo "<div align=\"center\"><strong>Wiadomość została wysłana poprawnie!</strong></div>";
  53. }
  54. // lub w przypadku nie wypełnienia formularza do końca
  55. else echo "<span style=\"color: #FF0000; text-align: center;\">Wypełnij wszystkie pola formularza!</span>";
  56.  
  57.  
  58. fclose($plik);
  59.  
  60. ?>
  61. </body>
  62. </html>
gorden
Bo te pola tekstowe wstawiasz w pętli, więc się nie dziw.
szczalpi
To jak to zmienić
gorden
Zamień linię 16 na:
  1. $mail = fgets($plik, 250);

Ewentualnie umieść treść formularza poza pętlę.
szczalpi
Teraz mam tak :
  1. <head>
  2. <meta http-equiv="Content-Language" content="pl" />
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  4. </head>
  5. <html>
  6. <body>
  7. <?php
  8. // sprawdzamy, czy zmienna $submit jest pusta
  9.  
  10.  
  11. $maile = file("plik.txt");
  12.  
  13. $wyslij=@mail;
  14. $plik = fopen("plik.txt", "r");
  15.  
  16. $mail = fgets($plik, 250);
  17. if (empty($_POST['submit'])) {
  18. ?>
  19.  
  20.  
  21. <table border="0"><form method="post">
  22. <tr>
  23. <td>Treść wiadomości</td>
  24. <td><textarea name="tresc" style="width: 250px; height: 100px"></textarea></td>
  25. </tr>
  26. <tr>
  27. <td>Imię, nazwisko lub nick</td>
  28. <td><input type="text" name="imie" style="width: 250px"></td>
  29. </tr>
  30. <tr>
  31. <td>Adres e-mail</td>
  32. </tr>
  33. <td>&nbsp;</td>
  34. <td><input type="submit" name="submit" value="Wyślij">&nbsp;
  35. <input type="reset" value="Od nowa"></td></form>
  36.  
  37. </table>
  38.  
  39. <?
  40. }
  41.  
  42. // sprawdzamy, czy zmienne przesłane z formularza nie są puste
  43. elseif (!empty($_POST['tresc']) && !empty($_POST['imie'])) {
  44. // jeżeli powyższy warunek jest spełniony tworzona jest wiadomość
  45. // zmienna $message zawiera treść wiadomości
  46. $message = "Treść wiadomości:\n$_POST[tresc]\nWysłał: $_POST[imie]";
  47. // zmienna $header zawiera przede wszystkim adres zwrotny
  48. $header = "From: info@eszukaj.com ";
  49. // funkcja mail() za pomocą której wiadomość zostanie wysłana
  50. $wyslij("$mail","Wiadomosc ze strony WWW","$message","$header")
  51. or die('Nie udało się wysłać wiadomości');
  52. // wyświetlenie komunikatu w przypadku powodzenia
  53. echo "<div align=\"center\"><strong>Wiadomość została wysłana poprawnie!</strong></div>";
  54. }
  55. // lub w przypadku nie wypełnienia formularza do końca
  56. else echo "<span style=\"color: #FF0000; text-align: center;\">Wypełnij wszystkie pola formularza!</span>";
  57.  
  58.  
  59. fclose($plik);
  60.  
  61. ?>
  62. </body>
  63. </html>
gorden
No ale napisz czy jest dobrze, z czym jeszcze problem, czego brakuje etc. i wklej zawartość tego plik.txt (jeśli problem nadal występuje).
szczalpi
to w pliku.txt jest tak :
info@eszukaj.com;
info@ff.pl;
Pierwszego e-maila wysyła, ale niestety już kolejnych nie chce.
Problem jest jeszcze z kodowaniem. Zamiast polskich znaków wyświetlają mi się krzaczki, po wysłaniu wiadomości na klienta poczty.
benio101
@Szczalpi, sorka, ale myślę, że każdy umie zamienić linię kodu.
Jaki jest sens wypisywania na nowo zmienionego kodu?

edt: No ale znacznik code się kłania.
16. usuń,

Przed 44. wepchnij:

  1. while ( ($line = fgets($plik,250)) !== false) {


Po 53. natomiast dodaj:
  1. }

Działa?

  1. // A byś dał kod, a nie mamy zgadywać, o co chodzi
szczalpi
działa, ale podwójnie wysyła e-mail do tego samego użytkownika.
gorden
To spróbuj tak:
  1. $file = file_get_contents('plik.txt');
  2. $file = trim($file);
  3. $ex = explode(';', $file);
  4. $num = 0;
  5. while(true) {
  6. if($ex[$num+1] !== null) {
  7. $num++;
  8. mail($ex[$num], 'temat', 'tresc');
  9. } else break;
  10. }
szczalpi
To daje cały kod jaki mam:
kontakt.php
  1. <head>
  2. <meta http-equiv="Content-Language" content="pl" />
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  4. </head>
  5. <html>
  6. <body>
  7. <?php
  8. // sprawdzamy, czy zmienna $submit jest pusta
  9.  
  10.  
  11. $maile = file("plik.txt");
  12.  
  13. $wyslij=@mail;
  14. $plik = fopen("plik.txt", "r");
  15.  
  16. $mail = fgets($plik, 250);
  17. if (empty($_POST['submit'])) {
  18. ?>
  19.  
  20.  
  21. <table border="0"><form method="post">
  22. <tr>
  23. <td>Treść wiadomości</td>
  24. <td><textarea name="tresc" style="width: 250px; height: 100px"></textarea></td>
  25. </tr>
  26. <tr>
  27. <td>Imię, nazwisko lub nick</td>
  28. <td><input type="text" name="imie" style="width: 250px"></td>
  29. </tr>
  30. <tr>
  31. <td>Adres e-mail</td>
  32. </tr>
  33. <td>&nbsp;</td>
  34. <td><input type="submit" name="submit" value="Wyślij">&nbsp;
  35. <input type="reset" value="Od nowa"></td></form>
  36.  
  37. </table>
  38.  
  39. <?
  40. }
  41.  
  42. // sprawdzamy, czy zmienne przesłane z formularza nie są puste
  43. elseif (!empty($_POST['tresc']) && !empty($_POST['imie'])) {
  44. while ( ($line = fgets($plik,250)) !== false) {
  45. // jeżeli powyższy warunek jest spełniony tworzona jest wiadomość
  46. // zmienna $message zawiera treść wiadomości
  47. $message = "Treść wiadomości:\n$_POST[tresc]\nWysłał: $_POST[imie]";
  48. // zmienna $header zawiera przede wszystkim adres zwrotny
  49. $header = "From: info@eszukaj.com ";
  50. // funkcja mail() za pomocą której wiadomość zostanie wysłana
  51. $wyslij("$mail","Wiadomosc ze strony WWW","$message","$header")
  52. or die('Nie udało się wysłać wiadomości');
  53. }
  54. // wyświetlenie komunikatu w przypadku powodzenia
  55. echo "<div align=\"center\"><strong>Wiadomość została wysłana poprawnie!</strong></div>";
  56. }
  57. // lub w przypadku nie wypełnienia formularza do końca
  58. else echo "<span style=\"color: #FF0000; text-align: center;\">Wypełnij wszystkie pola formularza!</span>";
  59.  
  60.  
  61. fclose($plik);
  62.  
  63. ?>
  64. </body>
  65. </html>


kontakt_send.php
  1. <head>
  2. <title><?php echo $tytul_kat; ?>Bezpłatne Ogłoszenia, Darmowe Ogłoszenia | www.ogloszeniabezplatne.com <?php echo''.$tytul_ogl[1][0].' '.$tytul_dod.'';?></title>
  3. <meta http-equiv="Content-Language" content="pl" />
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  5. <meta name="description" content="Witamy w serwisie ogłoszeniowym www.ogloszeniabezplatne.com. Strona powstała, aby zapewnić Państwu szybki dostęp do drobnych ogłoszeń z całej Polski, ale również innych miast Polski. Opublikuj swoje darmowe ogłoszenie w naszym serwisie ogłoszeniowym, my zajmiemy się resztą. Wszystkie wpisy są pogrupowane w odpowiednie kategorie, przez co przeglądanie jest niezwykle proste i precyzyjne, a to wszystko za darmo. Nie ważne czy chodzi ci o nieruchomości, maszyny, usługi, pracę czy ogłoszenia dotyczące zwierząt bądź wynajmu mieszkań - Bezpłatne Ogłoszenia to najprostszy i właściwy wybór."</>
  6. </head>
  7. <?php
  8.  
  9. if ((empty($_POST['imie'])) OR (empty($_POST['nazwisko'])) OR (empty($_POST['email'])) OR (empty($_POST['tresc'])))
  10. echo'Proszę wypełnić wszystkie pola. <a href="java script:history.back()">Spróbuj ponownie...</a>';
  11.  
  12. if(!eregi($_POST['email']))
  13. echo'Proszę wpisać poprawny adres e-mail. <a href="java script:history.back()">Spróbuj ponownie...</a>';
  14.  
  15. $wiadomosc=($_POST['tresc'])."\n Wiadomosc od: ".$_POST['imie']." ".$_POST['nazwisko']." <".$_POST['email'].">";
  16. //$headers = "MIME-Version: 1.0\n";
  17. //$headers .= "Content-type: text/html; charset=iso-8859-2\n";
  18. $headers .= "From: OgloszeniaPoznan";
  19. mail("'".$zapytanie[1][0]."'", "Zapytanie z serwisu ogłoszeniowego","'". $wiadomosc."'","'".$headers."'");
  20.  
  21.  
  22. echo' Twoje zapytanie zostało wysłane do naszego serwisu ogłoszeniowego.<br />Pozdrawiamy Serwis ogłoszeniowy.';
  23.  
  24.  
  25.  
  26. ?>
gorden
kontakt.php
  1. <head>
  2. <meta http-equiv="Content-Language" content="pl" />
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  4. </head>
  5. <html>
  6. <body>
  7. <?php
  8. // sprawdzamy, czy zmienna $submit jest pusta
  9.  
  10.  
  11. $maile = file("plik.txt");
  12.  
  13. $wyslij=@mail;
  14. $plik = fopen("plik.txt", "r");
  15.  
  16. $mail = fgets($plik, 250);
  17. if (empty($_POST['submit'])) {
  18. ?>
  19.  
  20.  
  21. <table border="0"><form method="post">
  22. <tr>
  23. <td>Treść wiadomości</td>
  24. <td><textarea name="tresc" style="width: 250px; height: 100px"></textarea></td>
  25. </tr>
  26. <tr>
  27. <td>Imię, nazwisko lub nick</td>
  28. <td><input type="text" name="imie" style="width: 250px"></td>
  29. </tr>
  30. <tr>
  31. <td>Adres e-mail</td>
  32. </tr>
  33. <td> </td>
  34. <td><input type="submit" name="submit" value="Wyślij"> 
  35. <input type="reset" value="Od nowa"></td></form>
  36.  
  37. </table>
  38.  
  39. <?
  40. }
  41.  
  42. // sprawdzamy, czy zmienne przesłane z formularza nie są puste
  43. elseif (!empty($_POST['tresc']) && !empty($_POST['imie'])) {
  44. foreach ($maile as $linia => $lina_tresc) {
  45. $linia_tresc = trim($linia_tresc);
  46. $linia_tresc = str_replace(';', '', $linia_tresc)
  47.  
  48. // jeżeli powyższy warunek jest spełniony tworzona jest wiadomość
  49. // zmienna $message zawiera treść wiadomości
  50. $message = "Treść wiadomości:\n$_POST[tresc]\nWysłał: $_POST[imie]";
  51. // zmienna $header zawiera przede wszystkim adres zwrotny
  52. $header = "From: info@eszukaj.com ";
  53. // funkcja mail() za pomocą której wiadomość zostanie wysłana
  54. $wyslij("$linia_tresc","Wiadomosc ze strony WWW","$message","$header")
  55. or die('Nie udało się wysłać wiadomości');
  56. }
  57. // wyświetlenie komunikatu w przypadku powodzenia
  58. echo "<div align=\"center\"><strong>Wiadomość została wysłana poprawnie!</strong></div>";
  59. }
  60. // lub w przypadku nie wypełnienia formularza do końca
  61. else echo "<span style=\"color: #FF0000; text-align: center;\">Wypełnij wszystkie pola formularza!</span>";
  62.  
  63.  
  64. fclose($plik);
  65.  
  66. ?>
  67. </body>
  68. </html>
benio101
Zamiast

  1. $header = "From: info@eszukaj.com ";


daj

  1. $header ="From: eSzukaj <info@eszukaj.com>\r\n";
  2. $header .="Reply-To: Nie odpowiem <nie_odpowiem@o2.pl>\r\n";
  3. $header .="Return-Path: Nie odpowiem <nie_odpowiem@o2.pl>\r\n";
  4. $header .='X-Mailer: PHP/'.phpversion()."\r\n";
  5. $header .='MIME-Version: 1.0'."\r\n";
  6. $header .='Content-type: text/html; charset=iso-8859-2'."\r\n";
  7. $header .="Content-transfer-encoding: iso-8859-2\r\n";
  8. $header .="X-Priority: 1\r\n";


Zamiast iso-8859-2 (w 2 miejscach) daj kodowanie takie, jakiego używasz, zapewne utf-8, ale to już wiesz Ty sam.
U mnie działa bez żadnych problemów.

From: ten napis eSzukaj zamień na co zechcesz, ale samego adresu mailowego nie dawaj, nieładnie wygląda.
Ten napis (w przykłądzie eSzuwaj) pokaże się w polu Od.

Podobną składnię używasz w Reyply-To (jakby ktoś chciał odpowiedzieć na tego maila, zalecam podać jakiegoś maila nieistniejącego, żeby nie zasypywali Ci poczty.
No, chyba, że chcesz, aby mogli Ci Użytkownicy odpowiadać na tego samego maila, to daj również napis typu eSzukaj <info@eszukaj.com>
ReturnPath to adres, gdzie wysłane będzie info o ewentualnym niepowodzeniu (o ile dobrze pamiętam).
X-mailer pozostaw, zapobiegnie ewentualnym odrzuceniom maila, tak samo MimeVersion, wg uznania,. contenty - jak już napisałem - zmień kodowanie na takie, jakiego używasz.
x-priority to priorytet, nie ma zazwyczaj znaczenia, ale czasem parametr 1(najszybszy) może zadecydować o tym, że Twój mail dojdzie natychmiast, a inne będą przychodzić z opóźnieniem, ale nie Twój.

To taka mała pomoc z mojej strony, piszę na podstawie samemu używanego algorytmu i doświadczenia w milionach wysłanych maili automatycznie z tego właśnie ustawienia.
Bo to była część problemu, ta z krzakami, no nie?
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.