PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Bilder in html-mails (https://www.php-resource.de/forum/php-developer-forum/25821-bilder-in-html-mails.html)

YellowSky 10-09-2003 19:59

Bilder in html-mails
 
hallo zusammen,

ich hab mir heut mithilfe eures forums eine klasse geschrieben, die html- oder text-mails mit und ohne attachment als multipart-messages versendet. eure scripts und beiträge dazu waren sehr hilfreich :)

es gibt nur eine sache, die ich nicht hinbekommen habe und bei der mir die suche im forum auch keine hilfreichen beiträge liefern konnte.

wenn ich eine html-email versende (bah, sowas macht man nicht, aber mancher kunde wills haben), und in dieser email bilder verwende (z.b. ein logo), wieso taucht das logo dann nicht in der mail auf, obwohl es mit gleichem namen attached wurde?

beispiel: <html><body><img src="logo.jpg"> firmenname</body></html>
an der email hängt die datei logo.jpg an ... wird auch richtig angezeigt, wenn ich die datei öffne. trotzdem wird es mir in der html-ansicht (outlook) nicht angezeigt :(

muss ich bei den pfaden irgendetwas beachten oder bin ich komplett auf dem falschen dampfer. klar könnte ich auch einen externen link auf das imageverzeichnis der domain des kunden benutzen, aber sowas ist ja noch furchtbarer, als html-mails selbst


hat jemand nen tip für mich?


vielen dank vorab
YellowSky

TobiaZ 10-09-2003 20:36

du musst das logo als cid im quelltext angeben.

vergleich mal die quelltexte deine newsletter datei und zumbeispiel einer outlookdatei.

OffTopic:
Nix gegen HTML-Mails :D

YellowSky 10-09-2003 20:51

Zitat:

Original geschrieben von TobiaZ
du musst das logo als cid im quelltext angeben.
ach gottchen ... so ein umstand.

funktioniert das dann auch mit anderen mailreadern? speziell: was sagt aol dazu?? dann ist die methode mit dem nachladen des bildes vom server wohl doch die bessere!?

aber ich hab gerade gesehen, dass die dateien doch nicht korrekt übertragen werden. ich schätze mal, da sind irgendwo zu viele oder zu wenige umbrüche ... siehst du zufällig, wo?

(ausschnitt)
PHP-Code:

$this->attached[]=    "\n--$this->boundary".
    
"\nContent-Type: application/octet-stream; name=\"$fileName\"".
    
"\nContent-Transfer-Encoding: base64".
    
"\nContent-Disposition: attachment; filename=\"$fileName\"".
    
"\n\n".chunk_split(base64_encode($fileContent)); 


Zitat:

Original geschrieben von TobiaZ
Nix gegen HTML-Mails :D
ich hab nix gegen html-mails ... zumindest nix wirksames :))


grüsse
YellowSky

TobiaZ 10-09-2003 20:57

also mit der cid das packen eben alle reader, die das packen
(klasse auskunft) :D Naja, also outlook hats, mit aol hab ich nichts am hut, wenn der überhaupt html kann. aber denke die die multipart mit html könenn, können diese eingebetteten images auch machen.

ich bin zufällig grade am selben thema dran. denke der user soll selber entscheiden, ob er eingebettet haben will, oder ausm web, oder als text. hat alles vor und nachteile

Zitat:

"\n\n".chunk_split(base64_encode($fileContent));
warum zwei \n? ist aber denke ich nicht der fehler:dontknow:

Zitat:

ich hab nix gegen html-mails ... zumindest nix wirksames )
der ist fies!

YellowSky 10-09-2003 21:09

Zitat:

Original geschrieben von TobiaZ
also mit der cid das packen eben alle reader, die das packen
(klasse auskunft) :D Naja, also outlook hats, mit aol hab ich nichts am hut, wenn der überhaupt html kann. aber denke die die multipart mit html könenn, können diese eingebetteten images auch machen.

hmm, dann muss ich das mal bei aol testen. dummerweise haben die kunden immer nen aol-account und die grössten probleme, wenn man html-mails oder mails mit anhängen schickt :((


Zitat:

Original geschrieben von TobiaZ
ich bin zufällig grade am selben thema dran. denke der user soll selber entscheiden, ob er eingebettet haben will, oder ausm web, oder als text. hat alles vor und nachteile
welcher user? der empfänger? wie soll man das denn realisieren? ob html oder text kann man während des sendens entscheiden bzw. bekommt der empfänger eine multipart-message mit html- und text-teilen gesendet.

Zitat:

Original geschrieben von TobiaZ
warum zwei \n?
gute frage, bei text-teilen müssen 2 zeilenumbrüche, damit die trennung zwischen header und text erkannt wird ... ich nehme mal an, dass das bei base64-teilen genauso gehen sollte ... aber auch mit einem umbruch ändert sich nix :(


grüsse
YellowSky

Günni 10-09-2003 21:14

Schau mal in den CodeSchnipsel nach, dort sollte eine Klasse drin sein mit der du sowas machen kannst...

TobiaZ 10-09-2003 21:22

@Günni: Du spielverderber! Da hat er sich mühevoll ne eigene klasse gebaut, und jetzt muss er ne fertig nehmen und die ganze arbeit umsonst??? :D

bei mir können die user im profil entscheiden, was sie erhalten wollen. oder das system erkennt das autom.

YellowSky 10-09-2003 21:25

Zitat:

Original geschrieben von Günni
Schau mal in den CodeSchnipsel nach, dort sollte eine Klasse drin sein mit der du sowas machen kannst...
danke, die hab ich schon gefunden. deine klasse ist eigentlich die basis von meiner version. aber ich hab sie noch ein wenig erweitert bzw. vereinfacht :)

und selbstgebaut ist schneller verstanden ;)


trotzdem danke
YellowSky

TobiaZ 10-09-2003 21:26

da hast du recht!

wie war doch gleich der autor?

YellowSky 10-09-2003 21:32

@TobiaZ: welcher autor?

@Günni: magst du vielleicht mal nen blick drauf werfen ... vielleicht fällt dir was auf.

PHP-Code:

class sendmail {

  var 
$from    "";
  var  
$to      = array();
  var  
$subject  "";
  var  
$text    "";
  var  
$attached  = array();

  function 
sendmail$f=''$t=''$s=''$b=''$a='' ) {
    
$this->boundary    strtoupper(md5(uniqid(time())));
    if( !empty(
$f) )  $this->from$f );
    if( !empty(
$t) )  $this->to$t );
    if( !empty(
$s) )  $this->subject$s );
    if( !empty(
$b) )  $this->text$b );
    if( !empty(
$a) )  $this->attachment$a );
  }

  function 
from$f$n='' ) {
    
$this->from    = empty($n) ? $f "$n <$f>";
  }

  function 
to$t ) {
    
$this->to    is_array($t) ? $t : array($t);
  }

  function 
subject$s ) {
    
$this->subject  $s;
  }

  function 
text$t )    {
    
$this->text  =  /* html text */
            
"\n--$this->boundary".
            
"\nContent-Type: text/html; charset=\"iso-8859-1\"".
            
"\nContent-Transfer-Encoding: 8bit".
            
"\n\n$t".
            
/* plain text */
            
"\n--$this->boundary".
            
"\nContent-Type: text/plain; charset=\"iso-8859-1\"".
            
"\nContent-Transfer-Encoding: quoted-printable".
            
"\n\n".strip_tags($t);
  }

  function 
attachment$f$n='' ) {
    
$fileContent    =  is_file($f) ? join(""file($f)) : $f;
    
$fileName      =  empty($n) ? ( is_file($f) ? basename($f) : "attachment".count($attached).".dat" ) : $n;
    if( !empty(
$fileContent) )
                
/* attach files */
      
$this->attached[]=  "\n--$this->boundary".
                
"\nContent-Type: application/octet-stream; name=\"$fileName\"".
                
"\nContent-Transfer-Encoding: base64".
                
"\nContent-Disposition: attachment; filename=\"$fileName\"".
                
"\n\n".chunk_split(base64_encode($fileContent));
  }

  function 
send() {
    
$headers  =  /* multipart header */
            
"From: $this->from".
            
"\nReply-To: $this->from".
            
"\nX-Mailer: sendmail.class v.2 by future media".
            
"\nMIME-Version: 1.0".
            
"\nContent-Type: multipart/mixed; boundary=\"$this->boundary\"".
            
"\n\nThis is a multi-part message in MIME format.".
            
/* add text */
            
$this->text.
            
/* add attachments */
            
join""$this->attached).
            
/* end mail */
            
"--$this->boundary--";

    
$mailError  =  0;
    foreach( 
$this->to as $to )
      if( @
mail$to$this->subject""$headers ) ) $mailError--;

    
// debug
    
echo  "<textarea style='width:800;height:300'>$headers</textarea>";
  }

}

// test

$MM  = new sendmail"MultipartMail <server@actionscripter.de>""tobias@actionscripter.de""testmail""das ist ein <img src='test.jpg'> <b>test</b>" );
$MM->attachment"test.jpg" );
$MM->send(); 


danke
YellowSky

TobiaZ 10-09-2003 21:48

die originalklasse

YellowSky 10-09-2003 21:58

Zitat:

Original geschrieben von TobiaZ
die originalklasse
von Günni

YellowSky 10-09-2003 22:07

ah, ich habs gefunden :))

es muss so heissen:

PHP-Code:

$fileContent        =    is_file($f) ? fread(fopen($f,"rb"),filesize($f)) : $f

mit file($f) liest man die datei nicht binär aus, sondern als ascii ...

EDIT:

übrigends wird jetzt auch das bild in der mail angezeigt ohne dass ich was ändern muss




danke für eure hilfe
YellowSky

Günni 11-09-2003 00:16

Poste deine Klasse wenn Sie fertig is auch noch in die Codeschnipsel...

YellowSky 11-09-2003 00:23

klar, wenn du dich damit nicht übergangen fühlst :)
wie gesagt mit mails hab ich mich bisher nicht beschäftigt gehabt und mir mein wissen hier (hauptsächlich von dir) zusammengeklaut ...


grüsse
YellowSky


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:43 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG