Email TTS Ausgabe

Aus folgendem Beitrag benutze ich diese großartige Funktion.
Das klappt auch sehr gut, wobei ich gerne das vorlesen
der Emailadresse des Senders ausfiltern möchte.

Im Moment ließ die TTS Instanz den Seder und die emailadresse vor.
Ich habe mir schon mal probehalber den Inhalt in eine String Var geschrieben.
Da steht zwar der Name und alles andere, aber die Emailadresse steht nicht mit drin,
vorgelesen wird sie aber :confused:
Habe das Skript mal mit angefügt, mit der Bitte für einen Tipp.

<?

/*
******************************************************
e-Mails vom Server abrufen (POP3) und vorlesen per TTS
******************************************************
File     : emailtts.ips.php
Trigger  : none
*/
include "36786.ips.php";   // tts_play.ips

### Funktionen zum Auslesen eines bestimmten MIME-Types ########################

function get_mime_type(&$structure)
{
    $primary_mime_type = array("TEXT", "MULTIPART", "MESSAGE", "APPLICATION", "AUDIO", "IMAGE", "VIDEO", "OTHER");
    if ($structure->subtype) {
        return $primary_mime_type[(int) $structure->type] . '/' . $structure->subtype;
    }
    return "TEXT/PLAIN";
}

function get_part($stream, $msg_number, $mime_type, $structure = false, $part_number = false)
{
$prefix = "";
    if (!$structure) {
        $structure = imap_fetchstructure($stream, $msg_number);
    }
    if ($structure) {
        if ($mime_type == get_mime_type($structure)) {
            if (!$part_number) {
                $part_number = "1";
            }
            $text = imap_fetchbody($stream, $msg_number, $part_number);
            if ($structure->encoding == 3) {
                return imap_base64($text);
            } else if ($structure->encoding == 4) {
                return imap_qprint($text);
            } else {
                return $text;
            }
        }
        if($structure->type == 1) /* multipart */
        {
            while (list($index, $sub_structure) = each($structure->parts)) {
                if ($part_number) {
                    $prefix = $part_number . '.';
                }
                $data = get_part($stream, $msg_number, $mime_type, $sub_structure, $prefix . ($index + 1));
                if ($data) {
                    return $data;
                }
            }
        }
    }
    return false;
}
### hier Script mit den Benutzerdaten des POP3-Servers konfigurieren ###########

$hostname = "*****";
$username = "*****.net";
$kennwort = "*****";

### Nachrichten holen ##########################################################

$mailbox = imap_open("{".$hostname."}", $username, $kennwort);
// $mailbox = imap_open ("{".$hostname.":110/pop3}INBOX", $username, $kennwort); // für GMX und andere bekannte Freemailer

$mails = imap_fetch_overview($mailbox,"1:*", FT_UID); // Holt eine Übersicht aller Emails
$nachricht_tell = "";

$size=count($mails); // Anzahl der Nachrichten
$cmsg = 0;           // Zur Ausgabe einer fortlaufenden Nummer

for ($i=$size-1; $i>=0; $i--) { // für alle vorhandenen Mails durchlaufen

    $cmsg++;
    $value = $mails[$i];

    $mail = get_part($mailbox, $value->msgno, "TEXT/PLAIN"); // aus der Nachricht den Plaintext holen

### Vorlesetext zusammenbasteln.... ############################################

$content = GetValue(57329  /*[Email\Content]*/); // Abfrage ob Mail Content auch vorgelesen werden soll
	 IF ($content == false)
		 {
		$nachricht_tell = $nachricht_tell .= "Nachricht Nummer ".$cmsg." von ".$value->from.". Betreff: ".$value->subject.".";
		 }
	 IF ($content == true)
		 {
		$nachricht_tell = $nachricht_tell .= "Nachricht Nummer ".$cmsg." von ".$value->from.". Betreff: ".$value->subject.".";
		$nachricht_tell .= "Inhalt: ".$mail.".";
		 }
SetValue(15054 /*[Email\last_string]*/ ,$nachricht_tell); // Als String in Variable schreiben

}
imap_close($mailbox); // Verbindung zum POP3-Server beenden

tts_play(1,$nachricht_tell,"hinweis",3); // Per TTS vorlesen lassen

?>

was ließt TTS bei „Nachricht Nummer XXX von YYY“ vor?

Ist YYY die E-Mail Adresse, oder der Name beim vorlesen?

YYY wäre erst der Name und dann die emailadresse zusammen.

lass Dir mal in der Console mit

echo $value->from

ausgeben.

Was steht da z.B. drin?

So was wie „<abc@domain.de> Max Mustermann“?

Da sollten E-Mail Adresse und Name dabei sein.

Dann muss man es nur noch auseinandernehmen …

Oder habe ich es falsch verstanden?

Habe das Problem gelöst.
Folgende 2 Zeilen habe ich hinzugefügt, Danke für den Denkanstoß.

$name = explode("<",$value->from);
$name = $name[0];

Desweiteren hatte ich vergessen das die Checkbox in der Console auf HTML filtern stand.
Da konnte ich auch die email-adresse sehen die sich vorher versteckt hatte :smiley:

immer wieder gern :slight_smile:

Eine Frage hätte ich noch.
Bei mails mit sonderzeichen steht dann zB:

Nachricht 3 von „immowelt.de“ . Betreff: =?utf-8?Q?6_neue_Immobilienangebote_f=C3=BCr_Sie?= .

soll heißen:
6 neue Immobilienangebote für Sie

Wie kann ich das fixen? Den weg andersrum schein ich gefunden zu haben.

probier es mal mit utf8_decode.

klappt leider nicht.

	$string = GetValue(15054 /*[Email\last_string]*/); // Variable holen
	echo $string."
";
	$string = utf8_decode($string);
	echo $string;

String bleibt unverändert. Was mache ich falsch?