Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Załącznik w e-mailu
Forum PHP.pl > Forum > Przedszkole
Polak149
Witam.

Napisałem kawałek kodu, który wysyła mi ze strony obrazek na mój e-mail. Samo tworzenie załącznika działa poprawnie, lecz w e-mailu brakuje zawartości tekstowej, którą dodaję do wiadomości.

  1. <?php
  2. $informacja = "success_img";
  3. $flaga = TRUE;
  4. $adresat = 'podsmoczymdiamentem@gmail.com';
  5.  
  6. if (!isset($_POST['submit']))
  7. {
  8. $informacja = "error_submit";
  9. $flaga = FALSE;
  10. }
  11.  
  12.  
  13. $upload_name=$_FILES["upload"]["name"];
  14. $upload_type=$_FILES["upload"]["type"];
  15. $upload_size=$_FILES["upload"]["size"];
  16. $upload_temp=$_FILES["upload"]["tmp_name"];
  17.  
  18. if ($upload_size > 1048576)
  19. {
  20. $informacja = 'error_img_size';
  21. $flaga = FALSE;
  22. }
  23.  
  24. $pieces = explode("/", $upload_type);
  25. if ($pieces[0] != "image")
  26. {
  27. $informacja = 'error_img_type';
  28. $flaga = FALSE;
  29. }
  30.  
  31. if ($upload_temp == ''){
  32. $informacja = 'error_img_none';
  33. $flaga = FALSE;
  34. } else
  35. {
  36. $fp = fopen($upload_temp, "rb");
  37. $file = fread($fp, $upload_size);
  38.  
  39. $file = chunk_split(base64_encode($file));
  40. $num = md5(time());
  41. }
  42.  
  43. $autor = $_POST['autor'];
  44. $autorTemp = str_replace(' ', '', $autor);
  45. if ($autorTemp == '')
  46. {
  47. $informacja = 'error_name';
  48. $flaga = FALSE;
  49. }
  50.  
  51. $nadawca = $_POST['e-mail'];
  52. $nadawcaTemp = str_replace(' ', '', $nadawca);
  53. if ($nadawcaTemp == '')
  54. {
  55. $informacja = 'error_email';
  56. $flaga = FALSE;
  57. }
  58.  
  59. $komentarz = $_POST['komentarz'];
  60. $tresc = "Witaj Marcinie. Użytkownik <b>$autor</b> nadesłał obrazek do twej karczmy. Jakbyś chciał się z nim
  61.  
  62. skontaktować, tu jest jego adres:<br><a href='mailto:$nadawca'>$nadawca</a><br><br> Zdjęcie jest w
  63.  
  64. załączniku.<br><br><b>Komentarz:</b><br> $komentarz";
  65.  
  66. $subject = "$autor nadesłał zdjęcie.";
  67.  
  68. $headers = "From: Pod Smoczym Diamentem<podsmoczymdiamentem@gmail.com>\r\n";
  69. $headers .= "MIME-Version: 1.0\r\n";
  70. $headers .= "Content-Type: multipart/mixed; ";
  71. $headers .= "boundary=".$num."\r\n";
  72. $headers .= "--$num\r\n";
  73.  
  74. $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
  75. $headers .= "Content-Transfer-Encoding: 8bit\r\n";
  76. $headers .= $tresc."\n";
  77. $headers .= "--".$num."\n";
  78.  
  79.  
  80. $headers .= "Content-Type:".$upload_type." ";
  81. $headers .= "name=\"".$upload_name."\"r\n";
  82. $headers .= "Content-Transfer-Encoding: base64\r\n";
  83. $headers .= "Content-Disposition: attachment; ";
  84. $headers .= "filename=\"".$upload_name."\"\r\n\n";
  85. $headers .= "".$file."\r\n";
  86. $headers .= "--".$num."--";
  87.  
  88. $subject = "=?UTF-8?B?".base64_encode($subject)."?=";
  89.  
  90.  
  91. if ($flaga == TRUE)
  92. {
  93. $mail_sent = @mail( $adresat, $subject, $tresc, $headers);
  94. if($mail_sent == FALSE)
  95. {
  96. $informacja = "error_send";
  97. }
  98. }
  99. if ($upload_temp != '')
  100. {
  101. fclose($fp);
  102. }
  103.  
  104. $url = 'location:http://podsmoczymdiamentem.blogspot.com/2013/08/przeslij-grafike.html?info=';
  105. $url .= $informacja;
  106. header($url);
  107. ?>


Musi tu być gdzieś jakiś błąd. Normalnie nie pracuję na PHP i ciężko mi znaleźć co jest nie tak. Czy ktoś byłby w stanie powiedzieć mi, czemu $tresc nie jest widoczna w samej wiadomości e-mail? Dostaję jedynie sam załącznik.

Pozdrawiam
timon27
Męczysz się z hedersami i jak widać powoduje to błędy.
Zaincluduj phpmailer i nie będziesz miał żadnych kłopotów.
Chcesz dodać załącznik? - dodajesz po nazwie
Chcesz zmienić kodowanie na base64 - jedna linijka
Chcesz wysyłać ze swojej skrzynki? - jedna linijka
itd.
Polak149
W efekcie końcowym pewnie będę musiał tak zrobić. Ale póki co z samej ciekawości chciałbym wiedzieć co jest nie tak. Lubię gromadzić doświadczenia.
Turson
Wyłącz wygłuszanie błędów (@) przy wysyłaniu wiadomości to może się dowiesz
Polak149
No niestety wywaliłem tłumienie, ale cały kod przy wywołaniu parsuje bez nawet zająknięcia. Jest taka możliwość, że funkcja mail po prostu nie umie poskładać maila z treścią i załącznikiem równocześnie?
Turson
Wywalaj po kolei nagłówki i załącznik i na bieżąco sprawdzasz rezultat a dojdziesz do fragmentu, który powoduje problem
com
var_dump() i poznasz odp wink.gif
Polak149
No i udało się. Po długich kombinacjach znalazłem dobre headersy tak, że wysyła mi i załącznik, i tekst (nawet z html).

  1. $headers = "From: Pod Smoczym Diamentem<podsmoczymdiamentem@gmail.com>\r\n";
  2. $headers .= "MIME-Version: 1.0\r\n";
  3. $headers .= "Content-Type: multipart/mixed; ";
  4. $headers .= "boundary=".$num."\r\n";
  5. $headers .= "--$num\r\n";
  6.  
  7. $headers .= "Content-Type:".$upload_type." ";
  8. $headers .= "name=\"".$upload_name."\"r\n";
  9. $headers .= "Content-Transfer-Encoding: base64\r\n";
  10. $headers .= "Content-Disposition: attachment; ";
  11. $headers .= "filename=\"".$upload_name."\"\r\n\n";
  12. $headers .= "".$file."\r\n";
  13. $headers .= "--".$num."\n";
  14.  
  15. $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
  16. $headers .= "Content-Transfer-Encoding: 8bit\r\n";


Dzięki serdeczne wszystkim za pomoc ^^.
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.