Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PHPmailer i przekazywanie wiadomości z wbudowanymi obrazkami
Derwu
post
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 2.11.2003

Ostrzeżenie: (10%)
X----


Witam,

używam "PHP mailer'a" do tworzenia i wysyłania e-maili z witryny. Do każdego e-maila dodaje obrazki, które nie są dołączone jako załącznik tylko wbudowane w treść wiadomości (tzw. Embed Images).

Wiadomość dociera do odbiorcy, obrazki są widoczne, ale gdy chcę przekazać wiadomość dalej obrazki stają się niewidoczne.
Problem występuje na Thunderbirdzie, a na starym Outlook Express jest wszystko w porządku (innych nie testowałem). To nie jest jednak wina Thunderbirda, bo mam kilka wiadomości wygenerowanych z innych stron też ze wstawionymi obrazkami, które mogę przesyłać dalej za pomocą Thunderbirda i obrazki nie znikają. Jesto to więc kwestia wysłania wiadomości z poziomu PHP.

Proszę o jakieś rady/sugestie.
Go to the top of the page
+Quote Post
vokiel
post
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


No to pokaż jak dołączasz te obrazki
Go to the top of the page
+Quote Post
piotr94
post
Post #3





Grupa: Zarejestrowani
Postów: 331
Pomógł: 30
Dołączył: 11.11.2008
Skąd: Kraków

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


no właśnie, pokaż jak dołączasz to obrazki
Go to the top of the page
+Quote Post
Derwu
post
Post #4





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 2.11.2003

Ostrzeżenie: (10%)
X----


Obrazki dołączam tak:
  1. $mail->AddEmbeddedImage("images/print/logo.png","logo.png");


A w mailu:
  1. <img id="logo" src="cid:logo.png" alt="Logo" />


Czy ktoś pomoże ?
Go to the top of the page
+Quote Post
piotr94
post
Post #5





Grupa: Zarejestrowani
Postów: 331
Pomógł: 30
Dołączył: 11.11.2008
Skąd: Kraków

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


tak (IMG:style_emoticons/default/dry.gif)
  1. <html>
  2. <head>
  3. <title>PHPMailer - SMTP basic test with authentication</title>
  4. </head>
  5. <body>
  6.  
  7. <?php
  8.  
  9. //error_reporting(E_ALL);
  10. //error_reporting(E_STRICT);
  11.  
  12. date_default_timezone_set('Europe/Warsaw');
  13.  
  14. require_once('../class.phpmailer.php');
  15. //require_once('classes/class.phpmailer.php');
  16. try{
  17. $mail = new PHPMailer(true);
  18. $mail->Mailer = 'smtp'; // telling the class to use SMTP
  19. $mail->SMTPAuth = true; // enable SMTP authentication
  20. $mail->Host = '*'; // sets the SMTP server
  21. $mail->Port = 25; // set the SMTP port
  22. $mail->Username = '*'; // SMTP account username
  23. $mail->Password = '*'; // SMTP account password
  24.  
  25. $mail->SetFrom('*', 'PR', false);
  26.  
  27. $mail->AddReplyTo('*', 'SENDER');
  28.  
  29. $mail->Subject = 'TEST';
  30.  
  31. // $mail->AddEmbeddedImage("images/print/logo.png","logo.png");
  32. $mail->AddEmbeddedImage("images/phpmailer.gif",1001,"phpmailer.gif",'base64','image/gif');
  33. //wyjaśniam poniżej zmiany
  34. $mail->AddAddress('*', 'RECIVER');
  35. $mail->MsgHTML("abcdef<br/><b>ghi</b><br /><img id=\"logo\" src=\"cid:1001\" alt=\"Logo\" />");
  36. $mail->Send();
  37. $error_mail=0;
  38. } catch (phpmailerException $e) {
  39. trigger_error($e->errorMessage(),E_USER_WARNING);
  40. $error_mail=1;
  41. //addinfo('Wystąpił błąd podczas wysyłania wiadomości e-mail.');
  42. } catch (Exception $e) {
  43. trigger_error($e->getMessage(),E_USER_WARNING);
  44. //addinfo('Wystąpił błąd podczas wysyłania wiadomości e-mail.');
  45. $error_mail=1;
  46. }
  47. if($error_mail){
  48. echo('ERR');
  49. }else{
  50. echo('OK');
  51. }
  52. ?>
  53.  
  54. </body>
  55. </html>

a więc tak:
1. jako CID zaleca się używać liczb, dlatego tak będzie po prostu pewniej, że nie będzie z tym problemów
2. żeby obrazek był poprawnie dołączony trzeba jeszcze go odpowiednio zakodować (base64) i podać jego typ (image/gif w moim przypadku)
i śmiga jak należy
Mam nadzieję, że pomogłem, sorry, że tak późno, ale nie miałem wcześniej czasu
Go to the top of the page
+Quote Post
Derwu
post
Post #6





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 2.11.2003

Ostrzeżenie: (10%)
X----


piotr94, dzięki! Pomogłeś mi w znalezieniu przyczyny.

Nie był tu problemem literowy CID (może zawierać litery, u mnie zmiana nazw obrazków byłaby problematyczna), a kodowanie "base64" włącza się domyślnie.

Problemem był "Content-Type". Domyślnie klasa PHPmailer, w funkcji AddEmbeddedImage ma typ "application/octet-stream". Na swoje potrzeby zmodyfikowałem jedną linię kodu z clasy PHPmailer z:
  1. public function AddEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = 'application/octet-stream') {

na:
  1. public function AddEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = 'image/png') {


Obrazki załączam nadal w ten sam sposób:
  1. $mail->AddEmbeddedImage("images/print/logo.png","logo.png");

Oczywiście można ustawiać typ obrazka bezpośrednio podczas jego inkludowania, jednak ja na swoje potrzeby wyedytowałem klasę, aby zaoszczędzić na kodzie.

Teraz przekazywanie wiadomości z obrazkami działa. Jeszcze raz dzięki piotr94, naprowadziłeś mnie na źródło problemu.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.12.2025 - 22:32