ziegenpeter: Mail, UTF8 und Sonderzeichen

Hallo,

ich verschicke mit PHP eine Email:

mail($user['username'] . '<' . $user['email'] . '>', 'Subject', utf8_decode($message), $header)

Anwendung ist in UTF8, Umlaute kommen in der Mail korrekt an, nur statt folgender Anführungszeichen: „“ erscheinen nur Fragezeichen.

Wie bekomme ich die richtig angezeigt?

Danke, ziegenpeter

  1. Hallo,

    ich verschicke mit PHP eine Email:

    Ach ja, eine Text-Mail.

    ziegenpeter

    1. hi,

      ich verschicke mit PHP eine Email:
      Ach ja, eine Text-Mail.

      Die Header müssen das korrekt deklarieren, dann wird die Mail auch richtig angezeigt, der erste Header wäre hiezu:

      Content-Type: text/plain; Charset=UTF-8

      Nun zur Message, Charset ist ein Ding. Das andere Ding ist das Transfer-Encoding, nochn Header:
      Content-Transfer-Encoding: quoted-printable

      oder
      Content-Transfer-Encoding: base64

      Die Message wäre also base64 oder quoted-printable zu encoden.

      --
      57
  2. Tach!

    ich verschicke mit PHP eine Email:
    mail($user['username'] . '<' . $user['email'] . '>', 'Subject', utf8_decode($message), $header)
    Anwendung ist in UTF8, Umlaute kommen in der Mail korrekt an, nur statt folgender Anführungszeichen: „“ erscheinen nur Fragezeichen.

    utf_decode() dekodiert UTF-8 zu ISO-8859-1. Diese Anführungszeichen sind darin nicht enthalten, gehen also verloren.

    Wie bekomme ich die richtig angezeigt?

    Mail UTF-8-kodiert schicken oder nach Windows-1252 kodieren. Aber auch bei letzterem können dir Zeichen verlorengehen.

    dedlfix.

  3. Lieber ziegenpeter,

    ich habe das für meine Bedürfnisse (als Methode einer Klasse) so gelöst:

    	public  function send_mail ($to, $from, $subject, $text, $return_path) {  
    		$header = sprintf(  
    			"MIME-Version: 1.0\r\n"  
    				. "Content-Type: text/plain; charset=utf-8\r\n"  
    				. "Content-Transfer-Encoding: 8bit\r\n"  
    				. 'From: "%1$s" <%2$s>'."\r\n"  
    				. '%3$s',  
    			$from['name'],  
    			$from['address'],  
    			(empty($return_path) ? '' : sprintf(  
    				"Reply-To: %s\r\n",  
    				$return_path  
    			))  
    		);  
      
    		$subject = sprintf(  
    			'=?UTF-8?B?%s?=',  
    			base64_encode($subject)  
    		);  
      
    		// send mail  
    		return mail(  
    			$to,  
    			$subject,  
    			wordwrap($text, 60),  
    			$header,  
    			"-f $to"  
    		);  
    	}
    

    Vielleicht nützt es Dir ja etwas...

    Liebe Grüße,

    Felix Riesterer.

    --
    "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
    1. hi tami,

      hi ziegenpeter,

      oder http://forum.de.selfhtml.org/archiv/2014/5/t217437/#m1493705 und bezüglich UTF8: http://framework.zend.com/manual/1.12/de/zend.mail.character-sets.html

      bzw.
      http://framework.zend.com/manual/2.0/en/modules/zend.mail.message.html
      "By default, the Message class assumes ASCII encoding for your email. If you wish to use another encoding, you can do so; setting this will ensure all headers and body content are properly encoded using quoted-printable encoding.

      $message->setEncoding("UTF-8");  
      
      ~~~"  
        
      mfg  
        
      tami