Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wysyłanie maila przez php
Forum PHP.pl > Forum > PHP
marekpb
Witam
Jestem w trakcie nauki PHP, staram się kształcić swoje umiejętności, lecz napotkałem na pewną trudność którą nie wiem jak obejść. Mam formularz z kodem php do wysyłania maili. Odnośnie niego mam kilka zapytań:
1) Pierwsza sprawa nie ma polskich znaków nie wiem co zrobić żeby było OK, niby wstawiłem kodowanie w nagłówku utf-8 ale nic z tego,
2) Kolejna rzecz to aby wysyłać to na 2 maile jednocześnie. Zrobiłem to ale bardzo prostacko, skopiowałem jeszcze raz tą komendę if i mail i wywaliłem tekst który ma się pojawiać po poprawnym lub niepoprawnym wysłaniu (żeby mi 2 nie wyskoczyły tylko jeden komunikat). Czy ktoś może mi to powiedzieć jak zapisać to poprawnie ?
3) Jest jeszcze jedna rzecz, po IF w sekcji ELSE tam gdzie powinien być komunikat w razie błędu. Napisałem, że wiadomość wysłana poprawnie, ponieważ mimo błędu wysyłało wiadomość, a nie wiedziałem jak to poprawić. Co można zrobić żeby było dobrze składniowo i mimo wszystko nie wykazywało błędu.

Byłbym Wam niezmiernie wdzięczny za pomoc w rozwiązaniu problemów, przyjmę wszelkie podpowiedzi i rady, ale też nie pogniewam się jak mi ktoś napisze jak to ma być ;] Z góry dzięki.


  1. <?php
  2. $do = "mail1@cos.pl";
  3. $do2 = "mail2@cos.pl";
  4. $mail = $_POST['email'];
  5.  
  6. function ValidEmail($email) {
  7. if (!eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$" , $email)) {
  8. return false;
  9. }
  10. return true;
  11. }
  12.  
  13. if(isSet($_POST['imie']) || isSet($_POST['email']) || isSet($_POST['opis'])){
  14.  
  15. if (empty($_POST['imie']) || empty($_POST['email']) || empty($_POST['opis'])) {
  16. echo "<p style=\"color: #FF0000; text-align: center;\">Wypełnij wszystkie pola formularza !";
  17. }
  18. else{
  19. if (ValidEmail("$mail")) {
  20. $wiadomosc = "Imie i nazwisko: $_POST[imie]\nFirma: $_POST[firma]\nStanowisko: $_POST[stanowisko]\nE-mail: $_POST[email]\nTelefon: $_POST[telefon]\nAdres: $_POST[adres]\nTresc wiadomosci:\n$_POST[opis]\n\nPreferuje kontakt: $_POST[pemail] $_POST[ptelefon] $_POST[poferta]\nO firmie dowiedziałem się: $_POST[polecenie]";
  21. $header = "From: $_POST[imie] <$_POST[email]>".PHP_EOL."Content-type: text/plain; charset=utf-8";
  22. if(mail($do,"Torsystem","$wiadomosc","$header")){
  23. echo "<p align=\"center\"><strong>Wiadomość została wysłana poprawnie!</strong></p>";
  24. }
  25. else{
  26. echo "<p style=\"color: #FF0000; text-align: center;\">Wiadomość została wysłana poprawnie.</p>";
  27. }
  28. if(mail($do2,"Torsystem","$wiadomosc","$header")){
  29. echo "";
  30. }
  31. else{
  32. echo "";
  33. }
  34.  
  35. }
  36.  
  37. else { echo "<p style=\"color: #FF0000; text-align: center;\">Niepoprawny adres e-mail</p>"; }
  38.  
  39.  
  40. }
  41.  
  42. }
  43. else {"<p style=\"color: #FF0000; text-align: center;\">Wypełnij wszystkie pola formularza !";}
  44.  
  45.  
  46. ?>


Dalsza część, to już typowy formularz do tego.

  1. <form from="<?php echo $SCRIPT_NAME; ?>" method="post">
  2. <tr>
  3. <td>Imię i nazwisko*</td><td><input type="text" name="imie" size="53" /></td>
  4. </tr>
  5. <tr>
  6. <td>Firma</td><td><input type="text" name="firma" size="53" /></td>
  7. </tr>
  8. <tr>
  9. <td>Stanowisko</td><td><input type="text" name="stanowisko" size="53" /></td>
  10. </tr>
  11. <tr>
  12. <td>Adres email*</td><td><input type="text" name="email" size="53" /></td>
  13. </tr>
  14. <tr>
  15. <td>Telefon</td><td><input type="text" name="telefon" size="53" /></td>
  16. </tr>
  17. <tr>
  18. <td>Adres firmy</td><td><textarea name="adres" cols="40" rows="4"></textarea></td>
  19. </tr>
  20. <tr>
  21. <td>Opis zapytania*</td><td><textarea name="opis" cols="40" rows="6"></textarea></td>
  22. </tr>
  23. <tr>
  24. <td>Preferuję kontakt</td><td>
  25. <input type="checkbox" name="pemail" value="email, " />email<br />
  26. <input type="checkbox" name="ptelefon" value="telefon, " />telefon<br />
  27. <input type="checkbox" name="poferta" value="pisemna oferta, " />pisemna oferta<br />
  28. </td>
  29. </tr>
  30. <tr>
  31. <td>O firmie dowiedziałem się*</td><td><select name="polecenie">
  32. <option>Dzięki stronie</option>
  33. <option>Polecono mi usługi</option>
  34. <option>Za pomocą katalogów adresowych</option>
  35. <option>Dzięki reklamie</option>
  36. <option>Nic z powyższych</option>
  37. </select>
  38. </td>
  39. </tr>
  40. <tr>
  41. <td></td><td><input type="submit" name="submit" value="Wyślij" /></td>
  42. </tr>
  43. </form>
tehaha
1. Takie kodowanie musisz również ustawić na stronie z formularzem.
2. do wysyłania 2 maili możesz użyć pętli for, ale skoro wysyłasz 2 razy to samo to lepiej wysłać ukrytą kopie do drugiego adresata, pozwolę sobie wkleić kawałek z manuala:
  1. $headers = "From: MSA SHIPPING <webmaster@msashipping.com>\n";
  2. $headers .= "Reply-To: MSA Shipping <webmaster@msashipping.com>\n";
  3. $headers .= "BCC: dumidesign@gmail.com";
  4. $headers .= "MIME-Version: 1.0\n";
  5. $headers .= "Content-Type: multipart/alternative; boundary=\"$mime_boundary\"\n";


w to BCC wstawiasz tego drugiego maila

lub aby do większej liczby adresatów wysłać ten sam e-mail tutaj masz jak to zrobić http://www.phpeveryday.com/articles/PHP-Em...e-BCC-P136.html

3. nie bardzo rozumem o co chodzi z tym że mimo błędu wysłało wiadomość
marekpb
1) Ja mam stronkę zrobioną w ten sposób, że mi wczytuje przez require nagłówek i stopkę (żeby można było łatwo edytować), i właśnie w tym nagłówku meta mam ustawione kodowanie na utf-8, lecz mimo to źle wysyła tą pocztę, bez polskich znaków. Co jest źle ? Co trzeba zrobić żeby to jakoś działało ?

2) To rozumiem, jeszcze nie sprawdzałem, ale pewno wszystko będzie ok. O tym nie pomyślałem ;]

3) Zobacz że:
  1. if(mail($do,"Torsystem","$wiadomosc","$header")){
  2. echo "<p align=\"center\"><strong>Wiadomość została wysłana poprawnie!</strong></p>";
  3. }
  4. else{
  5. echo "<p style=\"color: #FF0000; text-align: center;\">Wiadomość została wysłana poprawnie.</p>";
  6. }


To po if pisze, że wiadomość wysłana pomyślnie, a dalej gdzie jest ELSE (tu powinien być komunikat, że błąd bo tutaj oznacza to, że coś jest nie tak. U mnie tu i tu jest ten sam komunikat, bo dałem tak specjalnie (już mówię dlaczego). Ponieważ jak sobie w tym drugim napisałem np. "Wystąpił błąd przy wysyle wiadomości" to w rzeczywistości wiadomość przychodziła na maila i niby wszystko OK. Ale coś mimo wszystko nie działa bo wychodzi treść z ELSE. Ciężko mi to określić ... Mam nadzieje, że rozumiesz.

Proszę o pomoc.
tehaha
Co do polskich liter spróbuj użyć takiego nagłówka:
  1. $headers = 'MIME-Version: 1.0' . "\r\n";
  2. $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  3. $headers .= "From: " . $from . "\r\n";
oraz zapisać pliki z kodowaniem UTF-8, w edytorze pewnie masz taką opcję jeżeli nie używasz notatnika, co do tego, powiedz mi jeszcze czy w tym wysłanym mailu zamieszczane są dane z formularza? bo takie bezpośrednie wstawienie $_POST wewnątrz zmiennej to chyba nie jest dobry sposób, przynajmniej mój edytor od razu to podkreśla jako błąd, więc może to jest powodem tego, że else wypada . Powinno być raczej tak:
  1. $wiadomosc = "Imie i nazwisko: ".$_POST['imie']."\nFirma: ".$_POST['firma']."\nStanowisko: ".$_POST['stanowisko']."\nE-mail: ";
itd. A i tak na marginesie zamiast
, powinieneś użyć
  1. preq_match()
marekpb
Udało się zrobić z polskimi znakami z Twoimi radami. Lecz nie mogę dojść do ładu z tym jak wysyłać tą ukrytą kopię. Przecież nie mogę chyba wrzucić całego tego co mi podałeś bo tam są podane oba adresy mail na które ma się wysłać a to idzie do nagłówka lecz przecież funkcji mail trzeba nakazać gdzie się ma wysyłać. Więc tu i tu będzie podany mail ? Możesz mi napisać albo kod albo jakoś szerzej o tym jak mam to zrobić ? ;] Będę bardzo wdzięczny za odpowiedź.

P.S nie chciało mi przełamać lini tym /n więc użyłem zwykłego <br> i działa smile.gif
tehaha
Tak, głównego adresata dajesz w funkcji mail tak jak zrobiłeś a ukrytych adresatów w nagłówku, to wtedy działa tak samo jak w kliencie poczty dajesz "wyślij ukrytą kopię do:"
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.