Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt mail() php nie czyta znaków HTML
Forum PHP.pl > Forum > PHP
mielekwalinko
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
404
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
Tomplus
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.
mielekwalinko
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ł
Tomplus
file_get_contents
Pobierasz, wstawiasz jako string, a potem dane explode'ujesz po \n albo po przecinku, spacji etc
mielekwalinko
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
Tomplus
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).
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.