Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Skrypt mail() php nie czyta znaków HTML
mielekwalinko
post 30.12.2015, 16:31:27
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 30.12.2015

Ostrzeżenie: (0%)
-----


Witam. Sklepałem formularz kontaktowyvlecz mam problem z wysyłaniem znaków html, niby tekst wysyła się jako html np po wpisaniu w formularzu <h1> aaaa teks </h1> treśc maila dochodzi tak jak powinna czyli duży napis "aaaa teks", problem jest gdy próbuję dodać kod html zdjęcia, wydaje mi się że mam złe kodowanie bo podczas wysyłki kod html zdjęcia coś się zmienia i dlatego już w otrzymanej wiadomości email nie wyświetla się fotka.

Oto mój formularz
Kod
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>      
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="Keywords" content="wyraz1, wyraz2, wyraz3..." />
    <meta name="description" content="Opis strony" />
    
</head>
<body>
<form action="mail.php" method="post">
    <fieldset>
    <legend></b>FORMULARZ</b></legend>
                

        <label for="temat">Temat: </label><br>
        <input type="text" id="temat" name="temat"/>
                    <br>
        <label for="wiadomosc">Wiadomość:</label><br>
        <textarea id="wiadomosc" name="wiadomosc" cols="40" rows="10"></textarea>
                    <br>
        <input type="submit" value="wyslij" id="send" name="send" />
    </fieldset>
</form>
</body>
</html>


a tu .php
Kod
<?php
//filtruje dane użytkownika
$mail = "mojastrona@dsa.pl";
$temat =  htmlspecialchars(trim($_POST['temat']));
$wiadomosc = $_POST['wiadomosc'];
$wiadomosc = addslashes($wiadomosc);
$wiadomosc = iconv("UTF-8","ISO-8859-2",$wiadomosc);
$send = $_POST['send'];
//mail na który będa wysyłane wiadomości
$odbiorca = "odbiooorca@dsa.pl";
$charset = 'iso-8859-2';
//nagłówki
$header =
      "MIME-Version: 1.0\r\n" .
      "Content-Type: text/plain; charset=$charset\r\n" .
      "Content-Transfer-Encoding: 8bit";

$header = "Content-type: text/html; charset=utf-8\r\nFrom: $mail";


    //Sprawdzam czy są błędy i wysyłam wiadomość
    if (empty($error))
        {
        $list = "$wiadomosc";
        
        if (mail($odbiorca, $temat, $list, $header))  
        {
         $error .= "Twoja wiadomość została wysłana";
         }
        else
            { $error .= "Wystąpił błąd podczas wysyłania wiadomości, spróbuj później.";}  
        }
    
?>


Jeszcze jedno pytanie, mianowicie gdy chce wysłać maila muszę ciągle edytować plik mail.php
w jaki sposób zrobić tak żeby scrypt wysyłający maile pobierał adresy z notatnika.txt np wpisuje do notatnika 10 maili jeden pod drugim i żeby scrypt je ściągał i wysyłał.
Z góry dziękuje za pomoc smile.gif
Go to the top of the page
+Quote Post
404
post 31.12.2015, 11:14:11
Post #2





Grupa: Zarejestrowani
Postów: 226
Pomógł: 25
Dołączył: 22.05.2011

Ostrzeżenie: (0%)
-----


1. Czemu używasz ISO-8859-2, a nie UTF-8?
2. Wstaw sobie do kodu coś takiego:
  1. // ...
  2. $wiadomosc = $_POST['wiadomosc'];
  3. file_put_contents('log1.log');
  4. $wiadomosc = addslashes($wiadomosc);
  5. file_put_contents('log2.log');
  6. // ...
Następnie spróbuj wysłać wiadomość z obrazkiem...
3. Czemu używasz mail? Użyj Swift Mailera (http://swiftmailer.org).
4.
Cytat
w jaki sposób zrobić tak żeby scrypt wysyłający maile pobierał adresy z notatnika.txt np wpisuje do notatnika 10 maili jeden pod drugim i żeby scrypt je ściągał i wysyłał.
file_get_contents
explode

Ten post edytował 404 31.12.2015, 11:14:24
Go to the top of the page
+Quote Post
Tomplus
post 31.12.2015, 11:17:24
Post #3





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Emaile odbiorców musisz zrobić w pętli.

W ogóle, może pokażesz kod wysłanej wiadomości?
Bo może czyta, tylko wysyłasz jako tekst, a nie jako HTML.

Na koniec, aby wysłać, proponuję skorzystać z PHPMailer, https://github.com/PHPMailer/PHPMailer dobra biblioteka.
Go to the top of the page
+Quote Post
mielekwalinko
post 31.12.2015, 11:29:27
Post #4





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 30.12.2015

Ostrzeżenie: (0%)
-----


Dzięki za pomoc, zrobiłem tak i juz śmiga wszystko

  1. <?php
  2. //filtruje dane użytkownika
  3. $mail = "jajaja@ja.pl";
  4. $temat = htmlspecialchars(trim($_POST['temat']));
  5. $wiadomosc = $_POST['wiadomosc'];
  6. $send = $_POST['send'];
  7. //mail na który będa wysyłane wiadomości
  8. $contacts = array(
  9. "mail1@o2.pl",
  10. "mail2@o2.pl",
  11. //....as many email address as you need
  12. );
  13. $charset = 'iso-8859-2';
  14. //nagłówki
  15. $header = "From: $wiadomosc\r\n";
  16. $header = "Content-type: text/html; charset=utf-8\r\n" . $header;
  17.  
  18. $header = "Content-type: text/html; charset=utf-8\r\nFrom: $mail";
  19.  
  20.  
  21. //Sprawdzam czy są błędy i wysyłam wiadomość
  22.  
  23.  
  24. foreach($contacts as $contact) {
  25.  
  26. $odbiorca = $contact;
  27.  
  28. if (mail($odbiorca, $temat, $wiadomosc, $header))
  29. {
  30. $error .= "Twoja wiadomość została wysłana";
  31. }
  32. else
  33. { $error .= "Wystąpił błąd podczas wysyłania wiadomości, spróbuj później.";}
  34. }
  35.  
  36. ?>


Problem mam ze zrobieniem aby pobierał maile do wysłania z pliku.txt
Mógł by mi ktoś przerobić ten kod ? Bo nie za bardzo umiem użyć tych funkcji które kolega podesłał
Go to the top of the page
+Quote Post
Tomplus
post 31.12.2015, 13:20:39
Post #5





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


file_get_contents
Pobierasz, wstawiasz jako string, a potem dane explode'ujesz po \n albo po przecinku, spacji etc
Go to the top of the page
+Quote Post
mielekwalinko
post 1.01.2016, 15:43:17
Post #6





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 30.12.2015

Ostrzeżenie: (0%)
-----


Zrobiłem tak\

  1. <?php
  2. //filtruje dane użytkownika
  3. $mail = "xxxxx@xxxxl";
  4. $temat = htmlspecialchars(trim($_POST['temat']));
  5. $wiadomosc = $_POST['wiadomosc'];
  6. $send = $_POST['send'];
  7. //mail na który będa wysyłane wiadomości
  8. $file = file_get_contents('maile.txt', true);
  9.  
  10.  
  11. $pieces = explode("\n", $file);
  12. $string = $pieces;
  13. $charset = 'iso-8859-2';
  14. //nagłówki
  15. $header = "From: $wiadomosc\r\n";
  16. $header = "Content-type: text/html; charset=utf-8\r\n" . $header;
  17.  
  18. $header = "Content-type: text/html; charset=utf-8\r\nFrom: $mail";
  19.  
  20.  
  21. //Sprawdzam czy są błędy i wysyłam wiadomość
  22.  
  23.  
  24. foreach($string as $string) {
  25.  
  26. $odbiorca = $string;
  27. echo $string;
  28. if (mail($string, $temat, $wiadomosc, $header))
  29. {
  30. $error .= "Twoja wiadomość została wysłana";
  31. }
  32. else
  33. { $error .= "Wystąpił błąd podczas wysyłania wiadomości, spróbuj później.";}
  34. }
  35.  
  36. ?>



i niby coś tam działa, wpisuje do pliku txt kilka maili np 10 a dochodzi tylko 9, dodam 20 dojdzie 19 lub 18 mailii ktoś coś podpowie ? smile.gif

Ten post edytował mielekwalinko 1.01.2016, 19:05:37
Go to the top of the page
+Quote Post
Tomplus
post 2.01.2016, 10:46:09
Post #7





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Zupełnie nie rozumiem dlaczego zrobiłeś:

  1. $pieces = explode("\n", $file);
  2. $string = $pieces;


wystarczy:

  1. $string = explode("\n", $file); // a najlepiej aby było wiadomo co to za string i nazwany był $listaAdresow


A co do listy, zanim wykonasz pętlę, zobacz co masz w tablicy $string przy pomocy print_r($string).
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 05:53