Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Mailing, html.
Forum PHP.pl > Forum > Przedszkole
assasin
Witam, mam baze gdzie jest +1000 kont użytkowników z meilami... no i chce zrobić mailing
  1. <?php
  2.  
  3. //polaczenie z baza
  4.  
  5. $sql = mysql_query( 'SELECT mail FROM maile' );
  6. while( $mail = mysql_fetch_assoc($sql))
  7. {
  8. $header = "From: ktos@serwer.pl \nContent-Type:".
  9. ' text/plain;charset="iso-8859-2"'.
  10. "\nContent-Transfer-Encoding: 8bit";
  11. mail($mail['mail'], '', 'tresc mail', $header);
  12. }
  13.  
  14. ?>


Ten skrypt wysyła tylko zwykły tekst, czy ktoś wie jak wysłać sformatowany tekst w html?
cros
np tak smile.gif
  1. $header = 'MIME-Version: 1.0' . "\r\n";
  2. $header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  3. mail($mail['mail'], '', 'tresc mail', $header);


W tresci juz mozesz stosowac tagi html...
assasin
Hmm zastosowałem twoje wskazówki do innego skryptu:

  1. <?PHP
  2. $adresat = 'malacz@os.pl'; // pod ten adres zostanie wysłana // wiadomosc
  3. @$email = $_POST['email'];
  4. @$content = $_POST['content'];
  5.  
  6. $header = 'MIME-Version: 1.0' . "\r\n";
  7. $header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  8. $header = "From: ktos@serwer.pl \nContent-Type:".
  9. ' text/plain;charset="iso-8859-2"'.
  10. "\nContent-Transfer-Encoding: 8bit";
  11. if (mail($adresat, 'List ze strony', $content, $header))
  12. echo '<p>działa</p>';
  13. else
  14. echo '<p><b>NIE</b> wysłano maila!</p>';
  15. ?>


i formularz:
  1. <div>
  2. <form action="skrypt.php" method="post">
  3. <input type="text" name="email" /><br />
  4. <textarea name="content" cols="30" rows="6"></textarea>
  5. <input type="submit" value="wyślij" />
  6. </form>
  7. </div>


No i w formularzu wrzucam kod html... i w takiej samej formie przychodzą mi wiadomości a po otwarciu wiadomości powinna się wyświetlić zakodowana strona.
cros
Cytat(assasin @ 24.04.2010, 20:06:30 ) *
Hmm zastosowałem twoje wskazówki do innego skryptu:

  1. <?PHP
  2. $adresat = 'malacz@os.pl'; // pod ten adres zostanie wysłana // wiadomosc
  3. @$email = $_POST['email'];
  4. @$content = $_POST['content'];
  5.  
  6. $header = 'MIME-Version: 1.0' . "\r\n";
  7. $header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  8. $header = "From: ktos@serwer.pl \nContent-Type:".
  9. ' text/plain;charset="iso-8859-2"'.
  10. "\nContent-Transfer-Encoding: 8bit";
  11. if (mail($adresat, 'List ze strony', $content, $header))
  12. echo '<p>działa</p>';
  13. else
  14. echo '<p><b>NIE</b> wysłano maila!</p>';
  15. ?>


A zwrociles uwage ze nadpisujesz zmienna $header swoimi danymi?
  1. $header = "From: ktos@serwer.pl \nContent-Type:".
  2. ' text/plain;charset="iso-8859-2"'.
  3. "\nContent-Transfer-Encoding: 8bit";

Usun to.

Cala sztuka polega na tym, zeby wyslac odpowiedni naglowek ($header), dzieki ktoremu wiadomo z czym mamy do czynienia, czy tresc maila jest zwyklym tekstem:
  1. $header = "From: ktos@serwer.pl \nContent-Type:".
  2. ' text/plain;charset="iso-8859-2"'.
  3. "\nContent-Transfer-Encoding: 8bit";


czy moze jest to dokument html
  1. $header = 'MIME-Version: 1.0' . "\r\n";
  2. $header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

Ale jak ty, ustawiasz pierw Content-type na "text/html", a zaraz potem na "text/plain" to czemu sie dziwisz? winksmiley.jpg
assasin
Hmm, nadal nie działa...
cros
Cytat(assasin @ 24.04.2010, 20:16:44 ) *
Hmm, nadal nie działa...

No to bardzo dziwne, bo ja tego uzywam na swojej stronie i dziala od dawna smile.gif
Cos musiales, ze tak sie wyraze, sss..zepsuc smile.gif
Wklej zrodlo.
assasin
Źródło czego? skryptu:
<?PHP
$adresat = 'malacz@os.pl'; // pod ten adres zostanie wysłana // wiadomosc
@$email = $_POST['email'];
@$content = $_POST['content'];

$header = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
if (mail($adresat, 'List ze strony', $content, $header))
echo '<p>działa</p>';
else
echo '<p><b>NIE</b> wysłano maila!</p>';
?>

formularza?
  1. <div>
  2. <form action="skrypt.php" method="post">
  3. <input type="text" name="email" /><br />
  4. <textarea name="content" cols="30" rows="6"></textarea>
  5. <input type="submit" value="wyślij" />
  6. </form>
  7. </div>


cros
Cytat(assasin @ 24.04.2010, 20:24:05 ) *
Źródło czego? skryptu:

No przeciez nie o formularzu tylko o mailu rozmawiamy winksmiley.jpg
No teraz naglowki masz dobrze ustawione, wiec wysylane maile sa mailami html.
A czemu odbierasz je jako NIE html, to juz nie mam pojecia.

EDIT:
Problemem jest zdaje sie textarea, bo formularz wysyla tagi html odpowiednio sformatowane, wiec nie sa one juz tagami.
Poszukaj odpowiedniej funkcji, ktora ten proces odwraca.
Np.
Kod
$tresc = stripslashes($tresc);
$tresc = htmlspecialchars_decode($tresc);

Dla pewnosci wyslij maila recznie ustawiajac jego tresc np $tresc="<B>GRUBY</B> tekst" i zobacz co odbierzesz.
assasin
Wszystko już działa, dziękuje za pomoc.

Mam jeszcze problem z tym:

  1. <?php
  2.  
  3. $ip = "fffa:3306";
  4. $user = "asf";
  5. $pass = "ff";
  6. $sql = "ff";
  7.  
  8. $adresat = 'bleble@ow.pl'; // pod ten adres zostanie wysłana // wiadomosc
  9. @$email = $_POST['email'];
  10. @$content = $_POST['content'];
  11.  
  12. $con = @mysql_connect($ip, $user, $pass);
  13. if (!$con) {
  14. error_s("Nie można połączyć się z bazą: ".mysql_error());
  15. }
  16.  
  17. $sql = mysql_query( 'SELECT mail FROM account' );
  18. while( $mail = mysql_fetch_assoc($sql))
  19. {
  20. $header = 'MIME-Version: 1.0' . "\r\n";
  21. $header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  22. if (mail($mail['mail'], 'http://www.worldofwarcraft.pl', $content, $header));
  23.  
  24. }
  25.  
  26.  
  27. ?>


Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in .... on line 18 jakiś pomysł?

Jakieś sugestie?
cros
W kodzie wszystko OK, ale ten komunikat wskazuje na to, ze masz jakis blad w zapytaniu.
Moze masz tabele accountS a nie account, moze masz z duzej litery, sprawdz to pod tym katem, bo kod jest ok.
Trudno mi cokolwiek powiedziec, bo nie widze twojej bazy danych etc, ale strzelam ze to jakas literowka bedzie na 99%.

Praktycznie blad musi byc tutaj, bo do reszty zapytan do sql, masz obsluge bledow (komunikaty), wiec skoro ich nie widzisz to musza byc OK winksmiley.jpg
Zrob tak
  1. $sql = mysql_query( 'SELECT mail FROM account' ) or die("Tutaj pies pogrzebany");

i bedziesz mial pewnosc gdzie szukac.
assasin
aaaa THX, literówka nie mail tylko email. Dzięki.
Jeszcze jedno:
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

jeśli mam iso, to polskich znaków nie przepości?
cros
Cytat(assasin @ 26.04.2010, 19:05:22 ) *
aaaa THX, literówka nie mail tylko email. Dzięki.
Jeszcze jedno:
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

jeśli mam iso, to polskich znaków nie przepości?

Zobacz charset=iso-8859-2.
assasin
Hmm nie wiem jakim cudem ale skrypt nadal nie działa
$sql = mysql_query( 'SELECT email FROM account' ) or die("Tutaj pies pogrzebany");

wywala

Tutaj pies pogrzebany

A literówka poprawiona...
cros
Cytat(assasin @ 26.04.2010, 21:04:40 ) *
Hmm nie wiem jakim cudem ale skrypt nadal nie działa
$sql = mysql_query( 'SELECT email FROM account' ) or die("Tutaj pies pogrzebany");

wywala

Tutaj pies pogrzebany

A literówka poprawiona...

Skoro nie ma innych literowek, to jedyna opcja jaka tu widze, to to ze nie polaczyles sie z baza (blad w loginie, hasle, etc.)
Zamien to:
  1. $con = @mysql_connect($ip, $user, $pass);
  2. if (!$con) {
  3. error_s("Nie można połączyć się z bazą: ".mysql_error());
  4. }

na to:
  1. $con = @mysql_connect($ip, $user, $pass) or die("Nie moge polaczyc z baza");

i zobacz co sie stanie.
Najlepiej przepatrz caly kod odpowiedzialny za laczenie, dodawanie, pobieranie z bazy mysql, pod katem literowek, blednych hasel itp.
assasin
Nie mam już pomysłów... prześledziłem cały kod już ze 100 razy i nic;/ wszystko dobrze... cały czas:
Cytat
Tutaj pies pogrzebany
cros
Cytat(assasin @ 26.04.2010, 23:25:42 ) *
Nie mam już pomysłów... prześledziłem cały kod już ze 100 razy i nic;/ wszystko dobrze... cały czas:

A zrobiles tak jak pisalem?
Jestes pewien ze jestes polaczony z baza mysql?
Jesli tak, to czy napewno laczysz sie z ta baza co trzeba?
Wiem, ze walkuje to samo, ale jeden blad (literowke) juz wykrylismy, wiec prawdopodobnie jest gdzies kolejny.
Kod jest OK, wiec to musi byc wina polaczenia z baza, zapytania etc.
Wklej mi caly plik, gdzie laczysz sie z baza i gdzie masz petle do wysylania maili.
Dodaj tez strukture (nazwe bazy, nazwy tabeli, rekordy etc), oczywiscie hasla i inne wazne dane mozesz pozmieniac.
Ja jutro jeszcze raz to przejrze (i tak leze w lozku winksmiley.jpg )
Pozdro

PS: A masz wogole jakies wpisy w bazie email?
assasin
  1. <?php
  2. $ip = "127.0.0.1:3306";
  3. $user = "login";
  4. $pass = "hasło";
  5. $sql = "baza";
  6.  
  7. $adresat = 'strona@os.pl'; // pod ten adres zostanie wysłana // wiadomosc
  8. @$email = $_POST['email'];
  9. @$content = $_POST['content'];
  10.  
  11. $con = @mysql_connect($ip, $user, $pass) or die("Nie moge polaczyc z baza");
  12.  
  13. $sql = mysql_query( 'SELECT email FROM account' ) or die("Tutaj pies pogrzebany");
  14. while( $mail = mysql_fetch_assoc($sql))
  15. {
  16. $header = 'MIME-Version: 1.0' . "\r\n";
  17. $header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  18. if (mail($mail['mail'], 'http://www.test.pl', $content, $header));
  19.  
  20. }
  21.  
  22.  
  23. ?>


  1. SET FOREIGN_KEY_CHECKS=0;
  2. -- ----------------------------
  3. -- Table structure for `account`
  4. -- ----------------------------
  5. DROP TABLE IF EXISTS `account`;
  6. CREATE TABLE `account` (
  7. `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Identifier',
  8. `username` varchar(32) NOT NULL DEFAULT '',
  9. `sha_pass_hash` varchar(40) NOT NULL DEFAULT '',
  10. `gmlevel` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
  11. `sessionkey` longtext,
  12. `v` longtext,
  13. `s` longtext,
  14. `email` text,
  15. `joindate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  16. `last_ip` varchar(30) NOT NULL DEFAULT '127.0.0.1',
  17. `failed_logins` int(11) UNSIGNED NOT NULL DEFAULT '0',
  18. `locked` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
  19. `last_login` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  20. `online` tinyint(4) NOT NULL DEFAULT '0',
  21. `expansion` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
  22. `mutetime` bigint(40) UNSIGNED NOT NULL DEFAULT '0',
  23. `locale` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
  24. `vote` int(255) NOT NULL,
  25. `timestamp` int(11) DEFAULT NULL,
  26. `points` int(255) NOT NULL,
  27. PRIMARY KEY (`id`),
  28. UNIQUE KEY `idx_username` (`username`),
  29. KEY `idx_gmlevel` (`gmlevel`)
  30. ) ENGINE=MyISAM AUTO_INCREMENT=120225 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Account System';
  31.  
  32. -- ----------------------------
  33. -- Records of account
  34. -- ----------------------------
  35. INSERT INTO `account` VALUES ('93998', 'Powe', 'bfff7d4b4de549187cf1cbc9329f71710caa1b8b', '0', '156EA6D04AB868F36B644695E454C177BFEBCEC9FA73492CD99D7CA5F1AC17F49DE53CB371989C3D', '6559A64347C9F69B1B8DBE4F06514822FD3F81CE8176FBE1E42BA49B7832143A', 'CE84E25D2A0ED6EECE87A310C5C716AAB49B6F6B0AB0D05C601B4302C1D48E2F', 'test@os.pl', '2009-05-29 18:37:27', '81.219.102.131', '5', '0', '2009-07-07 13:32:21', '0', '1', '0', '0', '0', NULL, '0');


Nie wiem nadal nie działa...
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.