INDY - emaile z załącznikiem i html.

0

Witam,
mam problem z komponentem IdSMTP. W sieci jest wiele informacji i próbowałem z nich korzystać ale bez rezultatu. Chcę wysyłać maile z programu z załącznikiem w formacie html. Gdy nie mam załącznika format html jest poprawny i są polskie znaki. Gdy jednak dodaję załącznik znika format html i polskie znaki. Wskazówki w necie okazują się nieskuteczne pomimo, że robię identycznie jak podpowiadają inni. Próbuję już od dawna uporać się z tym problemem ale już nie mam pomysłu. Proszę o jakąś podpowiedź. Przeglądałem to np.: http://www.projectindy.org/Sockets/Blogs/RLebeau/2005_08_17_A.EN.aspx
Nie mam już pomysłów...

0

masz błąd w 167 linii kodu.

0

Hehe :) No właśnie @Dyspenser - bez konkretnego kodu albo chociaż jego framentów, to możemy tak sobie "wróżyć" jak poprzednik. Może zajrzyj na: http://4programmers.net/Forum/Delphi_Pascal/212217-wyslanie_maila_z_wtopionymi_obrazami?p=926184#id926184 - ja Z indy nie pomogę, bo go nie tykam. Natomiast pod Synapse bez problemów wysyłałem e-maile z załącznikami z treścią w plain text. Pewnie i z htmlem by się dało. I od htmla byłbym jak najdalej. Wysyłanie treści w htmlu, o ile ktoś nas o to nie prosił to łamanie Netykiety. Z tego co się orientuje.

W czasach świetności usenetu było to tępione, a i wiele osób nawet se stałymi łączami nie tolerowało tego na prywatne skrzynki mailowe. Zwrócając uwagę na to wyyłającemu albo jadąc po nim niemiłośiernie. Według mnie na przykład gmail narzucając taki format trochę uczy użytkowników złych nawykow. Jeżeli jednak upierasz się przy Indy i htmlu, to być może @kAzek albo @Juhas vide tamten wątek będą mogli coś więcej doradzić. Tylko potrzeba więcej informacji od Ciebie, a przede wszystkim kod, kod, kod! :)

0

Panowie rozumiem, że bez kodu ani rusz ale napisałem też, że robię identycznie jak np.: podałem w przykładowym linku więc kod jakiś jest. W tym problem, że ten kod nie działa tak jak powinien. Ale wstawię to co źle działa:

MessageSend.Clear;
MessageSend.ContentType := 'text/html';
MessageSend.CharSet:='WINDOWS-1250';
MessageSend.Body.Append('Witaj,');
MessageSend.Body.Append('zakończenie czeskiego dnia.');
MessageSend.From.Name := 'Adres Nadawcy';
MessageSend.From.Address := '[email protected]';
MessageSend.Recipients.EMailAddresses := adresat;
MessageSend.CCList.EMailAddresses:=cc;
MessageSend.Subject := 'Zakonczenie dnia';
MessageSend.Priority:=mpNormal;
MessageSend.ContentType := 'plain/text';
TIdAttachment.Create(MessageSend.MessageParts, ExtractFilePath(Application.ExeName)+'Czechy_'+dzien+'.xls');


SMTP.UserName := login;
smtp.Port:=port;
SMTP.Password :=  haslo;
SMTP.Host :=  serwer;
SMTP.AuthenticationType:=atLogin; // autoryzacja SMTP
SMTP.Connect;
 try
  SMTP.Send(MessageSend); //wyślij
  Application.MessageBox('Kartka została wysłana.',nazwa+wersja,MB_ICONINFORMATION+MB_OK);
 finally
  SMTP.Disconnect;
 end; 

@olesio na 4p również szukałem i próbowałem robić tak jak tam ktoś próbował jednak również bez rezultatu. Myślę, że tu chodzi o dodatkowe nagłówki. Klient pokazuje mi w dostarczonej wiadomości coś takiego:

This is a multi-part message in MIME format

--=_NextPart_2rfkindysadvnqw3nerasdf
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

Witam,
w zalaczeniu przesylam plik zamkniecia hali Branch w dniu 2013-01-19
OBSZAR SPRAWDZONY I GOTOWY DO ZAMKNIECIA
Pozdrawiam

--=_NextPart_2rfkindysadvnqw3nerasdf
Content-Type: application/octet-stream;
name="Lista kontrolna zamknięcia hali Branch.xlsx"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="Lista kontrolna zamknięcia hali Branch.xlsx"
(nie zwracajcie uwagi na to, że różnią się nazwy załączników czy tematy).
Chodzi mi głównie o linie:

Content-Type: text/plain
Content-Transfer-Encoding: 7bit

Pomimo ustawienia text/html i 8bit tu ciągle otrzymuję jak powyżej. Gdy nie ma załącznika wszystko jest ok, a z załącznikiem rozjeżdża się. Rozumiem, że brak polskich znaków spowodowane jest właśnie tym 7bit. Tylko dlaczego nie można zmienić na 8? W powyższym przykładzie nie ma deklaracji ale próbowałem ze zmianą.
Czytałem jakiś czas temu o Synapse ale niezbyt odpowiada moim wymaganiom (min. że może być problem z formatem html, a przynajmniej trzeba się pewnie nagimnastykować).

0

fragment kodu...

 Mail.ContentType := 'multipart/related; type="multipart/alternative"';
  Mail.CharSet := CharSet;

  Mail.Subject := MyMessage.Subject;  // temat wiadomosci
  Mail.Body.Add(MyMessage.BodyText.Text); //tresc wiadomosci

  TXTPart := TIdText.Create(Mail.MessageParts);
  TXTPart.ContentType := 'text/plain';
  TXTPart.Body.Text := '';

  HTMLpart := TIdText.Create(Mail.MessageParts, MyMessage.BodyText);
  HTMLpart.ContentType := 'text/html';
0

Niestety nie mogłem sobie poradzić z powyższym kodem ale znalazłem gdzieś w necie kod, który dla mnie jest w miarę jasno napisany i działa - może komuś przyda się.

var
  idAttach: TidAttachment;
  idText1: TidText;
  idText2: TidText;
  p: TidMessageParts;
  slBody: TStringList;
begin
  p := idMessage1.MessageParts;
  slBody := TstringList.Create;

  try
    slBody.Add('<html>');
    slBody.Add('<head>');
    slBody.Add('</head>');
    slBody.Add('<body>');
    slBody.Add('<br /><br /><b><font color="red">Here is the image: </font></b><br /><br /><br />');
    slBody.Add('<img src="cid:sm101yellow.jpg" />');
    slBody.Add('</body>');
    slBody.Add('</html>');

    idText1 := TidText.Create(p, slBody);
    idText1.ContentType := 'text/html';
    idText2 := TidText.Create(p);
    idText2.ContentType := 'text/plain';
    idText2.Body.Text := '';

    idAttach := TidAttachment.Create(p, 'c:\sm101yellow.jpg');
    idAttach.ContentType := 'image/jpeg';
    idAttach.ContentDisposition := 'inline';
    idAttach.ExtraHeaders.Values['content-id'] := 'sm101yellow.jpg';

    idMessage1.Body.Assign(slBody);
    idAttach.DisplayName := 'sm101yellow.jpg';
    idMessage1.ContentType := 'multipart/mixed';

    idSMTP1.Connect;
    idSMTP1.Send(idMessage1);
  finally
    idSMTP1.Disconnect;
    slBody.Free;
    Showmessage('done');
  end;
end;

Źródła niestety nie pamiętam ale znaleźć ten kod w necie jest bardzo prosto. Dziękuję za pomoc :)

0

Podobny wątek był już na forum http://4programmers.net/Forum/Delphi_Pascal/212217-wyslanie_maila_z_wtopionymi_obrazami. Przeczytaj ostatni post z tego wątku a unikniesz zaskoczenia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1