Ankündigung

Einklappen
Keine Ankündigung bisher.

E-Mail einlesen und unverändert weiterleiten

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • E-Mail einlesen und unverändert weiterleiten

    Hi,

    ich habe einen script, der E-Mails von einem IMAP Konto einliest. E-Mail Inhalte die nicht einem bestimmten Muster entsprechen, sollen an eine bestimmte E-Mail gesendet werden. Aktuell wird eine E.Mail grundsätzlich nur als "text/plain" versendet. Ich komme aber nicht dahinter, wie ich die gesamte E-Mail unverändert weiterleiten kann. Also auch mit eventuellen Anhängen oder integrierten Bildern in der E-Mail. "imap_body" hilft mir auch nicht weiter. Gibt es evtl. schon einen fertigen script der dieses Problem lösen kann? Hier ist mein code:

    PHP-Code:
    <?php
    $Postfach 
    "{xxxxxxxxxxxxxxxxxxxxxxxxxxxxx}INBOX";
    $Benutzername "xxxxxxxxxxxxxxxxxxx";
    $Passwort "xxxxxxxxxxxxxxxxxx";
    $anzahl3 imap_open($Postfach$Benutzername$Passwort);
    $i2=1;
    $mails=imap_num_msg($anzahl3);
    while(
    $i2<$mails+1)
    {
    $orig2 imap_fetchbody($anzahl3$i2,1);
    $head1 imap_header($anzahl3$i2);
    $head2=$head1->from[0]->mailbox;
    $head3=$head1->from[0]->host;
    $von=$head2."@".$head3;
    $betreff=$head1->subject;

    $Absender3    "From:".$von."\n";
    $Absender3   .= "MIME-Version: 1.1\r\n";
    $Absender3   .= "Content-Type: text/plain; charset=utf-8\r\n";
    mail("xxxxxxxxxxxxxxxx@yyyyyyyyyyyyyyyyyyy.de",$betreff,$orig2,$Absender3);
    imap_delete($anzahl3$i2);
    $i2++;
    }
    ?>

  • #2
    Für den Mail-Versand sollte nicht die Funktion mail(), sondern ein richtiger Mailer wie z.B. PHPMailer verwendet werden.

    Kommentar


    • #3
      Du liesst jeden,mal dein ganzes postfach ein um dann alle entsprechenden mails weiterzuschicken.
      scheint mirt sehr suboptimal.

      versuche es mal mit mailfiltern, sieve ist da eine möglichkeit.

      Kommentar


      • #4
        OK, den PHPmailer kann ich einbauen. Aber dadurch wird ja mein Problem nicht gelöst...

        Ich habe mal ein bißchen nach "sieve" gegoogelt. Das scheint mir der richtige Ansatzpunkt zu sein. Ich konnte leider auf die Kürze keine genaueren Einzelheiten finden. Mein Problem ist, dass ich prüfen muß, ob der Dateianhang bestimmte Daten enthält.

        Zu Zeit prüfe ich das, indem ich mittels "imap_fetchbody" die Bereiche 2,2.1 und 2.2 abfrage. Wenn hier etwas vorhanden ist, wird es mittels "base64_decode" decodiert. Wenn in den dann decodierten Anhängen keine bestimmten Daten vorhanden sind, wird die E-Maill zurückgewiesen. Zur Zeit noch mittels dem "mail" Befehl. Kann "Sieve" diese Abfragen genauso ausführen, oder gibt es eine Alternative?

        Kommentar


        • #5
          Zitat von de_Joerg Beitrag anzeigen
          Ich habe mal ein bißchen nach "sieve" gegoogelt. Das scheint mir der richtige Ansatzpunkt zu sein. Ich konnte leider auf die Kürze keine genaueren Einzelheiten finden. Mein Problem ist, dass ich prüfen muß, ob der Dateianhang bestimmte Daten enthält.
          Da wird dann wohl ein bißchen googlen nicht reichen, sonst gehrt es wohl mit procmail, aber sieve ist neuer und mächtiger.
          wenn alle stricke reissen kan man ja über eine lösung mit inotify nachdenken, bin gespannt.

          Kommentar


          • #6
            Hast du das mal ausprobiert?
            https://stackoverflow.com/questions/...y-php-and-imap

            Alternative, die auf jeden Fall z.B. mit Zend Mail geht, ist die originale Mail als Attachment zu versenden.
            sorry, shift-taste kaputt

            Kommentar


            • #7
              Danke für Eure Hilfe und den Tip mit dem Link. Ich habe mir mal den Script auf der Verlinkung angesehen und etwas bearbeitet. Heraus gekommen ist nun die Möglichkeit, das ganze über eine Funktion aufzurufen. Es funktioniert perfekt mit allen Arten von E-Mails. Hier der Code

              PHP-Code:
              function send_all ($mbox,$msgno)
              {
              $mtype = array('text''multipart''message''application''audio',
                             
              'image''video''model''other');
              $mailstructure imap_fetchstructure($mbox$msgnoFT_UID);
              $type $mailstructure->type;
              if (
              $type == && $mailstructure->ifparameters == 1) {
                  
              $parameters $mailstructure->parameters;
                  
              $value $parameters[0]->value;
              }
              $head1 imap_header($mbox$msgno);
              $subject=$head1->subject;
              $head2=$head1->from[0]->mailbox;
              $head3=$head1->from[0]->host;
              $from=$head2."@".$head3;
              $body imap_body($mbox$msgnoFT_UID);
              $headers ="From:" $from "\r\n";
              $headers .="Date: " date("r") . "\r\n";
              $headers .="MIME-Version: 1.0\r\n";
              $headers .="Content-Type: " $mtype[$mailstructure->type] . '/'
                       
              strtolower($mailstructure->subtype) . ";\r\n";
              if (
              $type == 1) {
                  
              $headers .= "\t boundary="" . $value . """."\r\n";
              }
              $erg=array($subject,$body,$headers);
              return 
              $erg;
              }


              $Postfach "{xxxxxxxxxxxxxxxxxxxxxxxxxxxxx}INBOX";
              $Benutzername "xxxxxxxxxxxxxxxxxxx";
              $Passwort "xxxxxxxxxxxxxxxxxx";
              $anzahl3 imap_open($Postfach$Benutzername$Passwort);
              $i2=1;
              $mails=imap_num_msg($anzahl3);
              while(
              $i2<$mails+1)
              {
              $betreff=send_all ($anzahl3,$i2)[0];
              $nachricht=send_all ($anzahl3,$i2)[1];
              $kopf=send_all ($anzahl3,$i2)[2];
              mail("xxxxxxxxxxxxx@yyyyyyyyyyyyyy.de",$betreff,$nachricht,$kopf);
              imap_delete($anzahl3$i2);
              $i2++;





              Kommentar

              Lädt...
              X