SMTP - problem z formatowaniem | kodowaniem treści

SMTP - problem z formatowaniem | kodowaniem treści
PR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 304
0

Witam. Mam problem z wysyłaniem maili przez PHP, na wstępie dodam że nie mogę używać nic co byłoby wbudowane w PHP (funkcja mail etc), a więc wykorzystałem taki prosty kod

Kopiuj
<?php
class SMTPClient{
 public function SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body){
  $this->SmtpServer = $SmtpServer;
  $this->SmtpUser = base64_encode ($SmtpUser);
  $this->SmtpPass = base64_encode ($SmtpPass);
  $this->from = $from;
  $this->to = $to;
  $this->subject = $subject;
  $this->body = $body;
  if($SmtpPort=="") $this->PortSMTP=25; else $this->PortSMTP=$SmtpPort;
 }
 public function SendMail(){
  if($SMTPIN=fsockopen($this->SmtpServer,$this->PortSMTP)){
   fputs ($SMTPIN, "EHLO ".$HTTP_HOST."\r\n");  
   $talk["hello"] = fgets ( $SMTPIN, 1024 ); 
   fputs($SMTPIN, "auth login\r\n");
   $talk["res"]=fgets($SMTPIN,1024);
   fputs($SMTPIN, $this->SmtpUser."\r\n");
   $talk["user"]=fgets($SMTPIN,1024);  
   fputs($SMTPIN, $this->SmtpPass."\r\n");
   $talk["pass"]=fgets($SMTPIN,256);
   fputs ($SMTPIN, "MAIL FROM: <".$this->from.">\r\n");  
   $talk["From"] = fgets ( $SMTPIN, 1024 );  
   fputs ($SMTPIN, "RCPT TO: <".$this->to.">\r\n");  
   $talk["To"] = fgets ($SMTPIN, 1024); 
   fputs($SMTPIN, "DATA\r\n");
   $talk["data"]=fgets( $SMTPIN,1024 );
   fputs($SMTPIN, "To: <".$this->to.">\r\nFrom: <".$this->from.">\r\nSubject:".$this->subject."\r\n\r\n".$this->body."\r\n.\r\n");
   $talk["send"]=fgets($SMTPIN,256);
   fputs ($SMTPIN, "QUIT\r\n");  
   fclose($SMTPIN); 
  } 
  return $talk;
 }     
}
?>

Wysyła ładnie, ale niektóre serwisy a raczej programy pocztowe wyświetlają krzaki, no to kodowanie sobie pomyślałem i zrobiłem tak

Kopiuj
fputs($SMTPIN, "To: <".$this->to.">\r\nFrom: <".$this->from.">\r\nContent-type: text/html; charset=utf-8\r\nSubject:".$this->subject."\r\n\r\n".$this->$this->body."\r\n.\r\n");

Ładnie kodowanie wyświetla ALE nie czyta już poprawnie przejścia do następnej linii.

Kopiuj
fputs($SMTPIN, "To: <".$this->to.">\r\nFrom: <".$this->from.">\r\nSubject:".$this->subject."\r\n\r\n".iconv('utf-8','iso-8859-2'$this->body)."\r\n.\r\n");

i takie konwertowanie przez iconv też nie pomogło z liniami ja już nie wiem czemu tak się dzieje, myślałem że przez to że są same \r ale po dodaniu \n nic się nie zmieniło. Od razu mówię że nie mogę też używać jakichś skomplikowanych narzędzi bo cały system się rozleci, i tak ledwo się trzyma kod z 2003 dla PHP 4 (a teraz stoi na 5.3).
Proszę o pomoc bo mnie już się pomysły skończyły.

dzek69
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
0

A nie możesz użyć PHPMailera? Możliwe, że jakieś stare wersje będą dla PHP4 (ale skoro działa to teraz na PHP 5.3 to nie widzę powodów, żeby tego nie użyć jak trzeba). Robienie czegoś takiego jak Ty to jakaś sieczka

PR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 304
0

ŁF dzięks nie wpadłem na to bo bez deklarowanego kodowania normalnie brał te rn'ki ale żebym na to nie wpadł :D,
@dzek69
Pisałem że to się ledwo trzyma, jak by Ci bardziej zobrazować, to nawet nie było klejone mąka a potrzebuje tytanowego szkieletu bo superglue jest za słaby...
Jedna mała zmiana może to rozsypać. To było pisane przez dziesiątki ludzi więc nie wiem czy jak zmienię linijkę to się wszystko nie rozsypie i to jeszcze w 2003 roku.
Wielkie dzięki za pomoc.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.