PERL: E-Mails mit Anhang versenden - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 
    Beitrag von Bernd (213 Beiträge) am Freitag, 1.Oktober.2010, 16:05.
    PERL: E-Mails mit Anhang versenden

      Hallo, liebes Forum,

      ich habe eine Frage zum Mailversand mit Perl.

      Ein Mailversand wie in der Doku (http://doku.baseportal.de/714.html) beschrieben funktioniert bei mir, wie er soll.

      Frage: Ich möchte den Mails jetzt einen Anhang mitgeben.
      Der Anhang soll aus einem von BP erzeugten PDF bestehen.
      Die Erzeugung des PDF für sich läuft.

      Kann ich dieses PDF jetzt auch als Anhang versenden?
      (Und falls ja: wie sag´ ich´s meinem Perlchen?)

      Begründung: Der Versand eines Links zum PDF funzt natürlich auch,
      wird aber empfängerseitig oft von übereifrigen Firewalls oder
      Sicherheitseinstellungen angemeckert.


      Danke und Grüße Bernd


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von Bernd (213 Beiträge) am Freitag, 1.Oktober.2010, 16:05.
    PERL: E-Mails mit Anhang versenden

      Hallo, liebes Forum,

      ich habe eine Frage zum Mailversand mit Perl.

      Ein Mailversand wie in der Doku (http://doku.baseportal.de/714.html) beschrieben funktioniert bei mir, wie er soll.

      Frage: Ich möchte den Mails jetzt einen Anhang mitgeben.
      Der Anhang soll aus einem von BP erzeugten PDF bestehen.
      Die Erzeugung des PDF für sich läuft.

      Kann ich dieses PDF jetzt auch als Anhang versenden?
      (Und falls ja: wie sag´ ich´s meinem Perlchen?)

      Begründung: Der Versand eines Links zum PDF funzt natürlich auch,
      wird aber empfängerseitig oft von übereifrigen Firewalls oder
      Sicherheitseinstellungen angemeckert.


      Danke und Grüße Bernd

     Antworten

    Beitrag von Bernd (16 Beiträge) am Freitag, 1.Oktober.2010, 21:45.
    Re: PERL: E-Mails mit Anhang versenden

      Hallo zusammen,

      ich habe zwischenzeitlich das Beispiel in der BIB entdeckt,
      es werden jedoch nur leere Mails, also ohne den Inhalt $Text
      und ohne Anhang erzeugt.

      Für $File habe ich die URL der von BP erzeugten PDF gesetzt.
      Die Erzeugung an sich funzt. Fraglich ist, ob man das so
      direkt in einer Mail verwurschteln darf.

      Auch ein Versuch mit einer einfachen GIF-Datei schlägt fehl.

      Kann jemand das Prob erkennen?

      Danke und Gruß Bernd


      Hier mein Code:







      <perl>
      if ($xyz eq "losgehts")
      

      {

      $file="http://de3.abc.de/cgi-bin/baseportal.pl?htx=/abc.de/inform/pdf&Id=$Id&Bild=$Bild";
       
      ####Die Erzeugung des PDF funzt für sich alleine###
      $text=<<EOF;
       
      
      TEXT
      Hier kommt ein PDF
      ####der kommt nicht an###
      

      EOF

      # file holen und in base64 verpacken
      

      my $res=pack("u", get $file);


      $res=~ s/^.//mg;
      $res=~ s/\n//g;
      $res=~ tr|` -_|AA-Za-z0-9+/|;
      my $padding=(3 - length($_[0]) % 3) % 3;
      $res=~ s/.{$padding}$/'=' x $padding/e if $padding;
      $res=~ s/(.{1,76})/$1\n/g;
       
      

      # mail verschicken

      mail "$Mail1", "Email mit Anhang", "",'info@absender.de',"Vorname Nachname Absender","Vorname Nachname Empfänger",'','', <<EOF;
      Content-Type: multipart/mixed; boundary="------------5EA074EB219D41A1BE62431F"
      Dies ist eine mehrteilige Nachricht im MIME-Format.
      --------------5EA074EB219D41A1BE62431F
      Content-Type: text/plain
      Content-Transfer-Encoding: 8bit



      $text
       
      
      --------------5EA074EB219D41A1BE62431F
      Content-Type: application/pdf; name="irgendwas.pdf"
      Content-Disposition: attachment; filename="irgendwas.pdf"
      Content-Transfer-Encoding: base64



      $res
       
      
      --------------5EA074EB219D41A1BE62431F--
      EOF





      }
      

      </perl>

     Antworten

    Beitrag von Sander (8126 Beiträge) am Freitag, 1.Oktober.2010, 23:11.
    Re: Re: PERL: E-Mails mit Anhang versenden

     Antworten

    Beitrag von Bernd (213 Beiträge) am Samstag, 2.Oktober.2010, 17:19.
    Re: Re: Re: PERL: E-Mails mit Anhang versenden

      Hallo und Danke für den Tipp,

      ich habe das Skript einmal angepasst, s. unten.
      Es macht leider keinen Mucks.

      No Mail - no fun.

      Kann jemsnd das Prob sehen?

      Danke und Grüße Bernd



      ============

      if ($send eq "send")
      {
      $pdf=get "http://de3.xxxxxxx.de/cgi-bin/baseportal.pl?htx=/xxxxxxx.de/xxx/pdf&Id=$Id&Bild=$Bild";
      $subject="Subjekt der Mail";
      

      $text="tralalalala";

      $html="";
      $mail4="bbb@mmm.de";
      $name4="bb mm";
      $mail5="aaa@cc.de";
      $name5="aaa ccc";
      $type="application/pdf";
      # #############################################################################
      # Versenden vom eMails
      # 
      # Öffentliche Methoden:
      # --------------------
      # new - als Konstruktor
      # sunject - Subject hinzufügen
      # addRecipient - Empfänger hinzufügen
      # setSender - Absender hinzufügen
      # setText - Textausgabe der Email einfügen
      # setHTML - html-teil der Email einfügen
      # copyto - cc-empfänger hinzuügen
      # blindcopy - bcc-empfänger hinzufügen
      # attachmentByFile - Einen Anhang von einer Website einfügen
      # attachmentByData - Anhnag von Rohdaten
      # submit - absenden
      # #############################################################################
      
      package sendmail;

      # #############################################################################
      # Konstruktor der Klasse
      # #############################################################################
      sub new {
      my $this = shift;
      my $Referenz = {};
      bless($Referenz,$this);
              $this->{charset} = "iso-8859-1";
      return($Referenz);
      }
      

      #############################################################################
      # Setzen des charsets.
      # #############################################################################
      

      sub charset{
      my ($this,$charset)=@_;
      if ($charset){
      $this->{charset}=$charset;
              }
      }
      #############################################################################
      # Setzen der Betreffzeile der Mail auf dem übergebenen String $subject.
      # #############################################################################
      sub subject{
      my ($this,$subject)=@_;
      # Betreff der Mail
      $this->{subject} = $subject;
      }
      

      # #############################################################################
      # Hinzufügen eines Mailempfängers $email und seinem Namen $name.
      # Die eMail-Addresse und der Empfängername werden zusammengefasst und
      # das interne Array, das alle Empfänger behinhaltet, wird um einen Schlüssel
      # erweitert.
      # #############################################################################
      sub addRecipient{
      my ($this,$Mail1,$Name1)=@_;
      

      ## $Mail1 und $Name kommen von einer Formulareingabe, sie können an dieser Stelle per "out" angezeugt werden, sind also da##

      if ($Name1 ne ''){
      $email = "$Name1 <$Mail1>";
      }
      push @{$this->{mailTo}}, $email;
      }
      

      # #############################################################################
      # Setzen der Absenderaddresse $email und des Namens $name.
      # #############################################################################
      sub setSender{
      my ($this,$Mail2,$team)=@_;
      # Absender festlegen
      $this->{from_email} = $Mail2;
      $this->{from_name} = $team;
      }
      ##siehe oben: Formular...#
      

      # ###################
      # Textinhalt der Mail
      # ###################
      sub setText{
      my ($this,$text)=@_;
      $this->{plaintext} = $text;
      }
      

      # ####################
      # HTML-Inhalt der Mail
      # ####################
      sub setHTML{
      my ($this,$html)=@_;
      $this->{htmltext} = $html;
      $this->{useHTML} = 1;
      }
      

      # ###############################################################
      # Kopie-Empfänger Name und eMail, es wir hier ein Array bebildet,
      # so das hier mit jeden Aufruf ein zusätzlicher Emfänger
      # angelegt wird
      # ###############################################################
      sub copyto{
      my ($this,$email,$name)=@_;
      # Namen und Empfänger der Mail zusammenfassen
      if ($name ne ''){
      $email = "$name <$email>";
      }
      # Kopie-Empfänger auf die Liste setzen
      push @{$this->{copyTo}},$email;
      }
      

      # ####################################################################
      # Blindkopie-Empfänger Name und eMail, es wir hier ein Array bebildet,
      # so das hier mit jeden Aufruf ein zusätzlicher Emfänger
      # angelegt wird
      # ####################################################################
      

      sub blindcopy{
      my ($this,$Mail1,$team)=@_;
      # Namen und Empfänger der Mail zusammenfassen
      if ($team ne ''){
      $email = "$team <$Mail1>";
      }
      # Kopie-Empfänger auf die Liste setzen
      push @{$this->{blindcopy}},$email;
      }
      

      sub blindcopy{
      my ($this,$mail4,$name4)=@_;
      # Namen und Empfänger der Mail zusammenfassen
      if ($name4 ne ''){
      $email = "$name4 <$mail4>";
      }
      # Kopie-Empfänger auf die Liste setzen
      push @{$this->{blindcopy}},$email;
      }
      sub blindcopy{
      my ($this,$mail5,$name5)=@_;
      # Namen und Empfänger der Mail zusammenfassen
      if ($name5 ne ''){
      $email = "$name5 <$email5>";
      }
      # Kopie-Empfänger auf die Liste setzen
      push @{$this->{blindcopy}},$email;
      }
      # ##################################################
      # Dateianhang aus Datei einfügen
      # $name : Name, mit dem der Anhang versandt wird
      # $type : Inhaltstyp des Anhanges
      # $host: Quelle im Internet
      # ##################################################
      sub attachmentByFile{
      my($this,$name,$type,$host)=@_;
      # Datei holen
      my $data=main::get $host;
      # Array für die Anhänge aufbauen
      push @{$this->{attachment}{name}},$Name;
      push @{$this->{attachment}{type}},$type;
      push @{$this->{attachment}{data}},$this->base64($data);
      # Flag für die Anhänge
      $this->{flgAttachments} = 1;
      }
      

      # ##################################################
      # Dateianhang aus Daten einfügen
      # $name : Name, mit dem der Anhang versandt wird
      # $type : Inhaltstyp des Anhanges
      # $data: Rohdaten des Anhangs
      # ##################################################
      

      sub attachmentByData{
      my($this,$Name,$type,$data)=@_;
      # Array für die Anhänge aufbauen
      push @{$this->{attachment}{name}},$Name;
      push @{$this->{attachment}{type}},$type;
      push @{$this->{attachment}{data}},$this->base64($pdf);
      # Flag für die Anhänge
      $this->{flgAttachments} = 1;
      }
      

      # #################
      # Absenden der Mail
      # #################
      sub submit{
      my $this=shift;
      my ($bound,$content,$type,$boundary);
      

      # Empfänger zusammenfassen
      $this->{mailTo} = join ",",@{$this->{mailTo}};
      # Kopf der Nachricht zusammensetzen
      $this->buildMailHeader();
      # Behandlung von Text und HTML-Teils der Mail
      if ($this->{useHTML}){
      # Trennzeichen
      $bound = $this->boundary;
      # Inhalt der Mail zusammensetzen
      $content = $this->parsePlainText($bound).$this->parseHTML($bound);
      # Inhaltsangabe für header
      $type = "Content-Type: multipart/alternative; boundary=\"$bound\"";
      } else {
      # Inhalt ist der Text
      $content = $this->{plaintext};
      }
      

      # Keine Attachments vorhanden
      if (!$this->{flgAttachments}){
      # mit HTML-Teil
      if ($this->{useHTML}){
      # Kopfzeilen vor dem Versand erweitern
      $this->{mailheader} .= $type;
      }
      # Rückgabewert des Mailprogrammes
      main::mail $this->{mailTo},$this->{subject},$content,$this->{from_email},'',$this->{from_name},'','',$this->{mailheader};
      return;
      }
      # Versand mit Attachments
      # Trennzeichen erzeugen
      $boundary = $this->boundary;
      # HTML/Text-Teile der Nachricht
      if ($this->{useHTML}){
      # Mit HTML, 
      $content = "--$boundary\n$type\n\n\n$content\n--$bound--\n\n";
      } else {
      # ohne HTML
      $content = $this->parsePlainText($boundary);
      }
      

      # Hinweis auf Multipart-Nachricht
      $content = "This is a multi-part message in MIME format.\n\n$content";
      

      # Inhaltsangabe für Header
      $type = "Content-Type: multipart/mixed; boundary=\"$boundary\"";
      # Attachements anhängen
      

      $content .= $this->parseAttachments($boundary);
      # Kopfzeilen vor dem Versand erweitern
      $this->{mailheader} .= $type;
      # Rückgabewert des Mailprogrammes
      main::mail $this->{mailTo},$this->{subject},$content,$this->{from_email},'',$this->{from_name},'','',$this->{mailheader};
      return;
      }
      }
      

      </perl>

     Antworten

    Beitrag von Sander (8126 Beiträge) am Samstag, 2.Oktober.2010, 19:40.
    Re: Re: Re: Re: PERL: E-Mails mit Anhang versenden

      da haste was falsch gemacht - oje, ich sehe gerade, der Teil der Beschreibung fehlt.
      Hier ist ein Beispiel:
      http://baseportal.de/cgi-bin/baseportal.pl?show=/sander/sendmail_bsp
      dabei seh ich gerade, das bei attachmentByFile nur der link angegeben werden muß, dann brauchst du es nicht einmal vorher holen.

      kurzform:
      $mail=sendmail->new();
      $mail->subject("testmail mit anhang");
      $mail->setSender('von@domain.tld',"sendername");
      $mail->addRecipient('an1@domain.tld',"empfängername1");
      $mail->setText('viel text in der mail');
      $mail->attachmentByFile('anlage.pdf','application/pdf','http://de3.xxxxxxx.de/cgi-bin/baseportal.pl?htx=/xxxxxxx.de/xxx/pdf&Id=$Id&Bild=$Bild');
      

      $mail->submit();
      out "verschickt";
      


      am Template sendmail brauchst du eigentlich nix zu ändern, du bindest das sendmail einfach nur mit include ein
      <include src=sendmail>
      

      So wirds sicher was

     Antworten

    Beitrag von Bernd (213 Beiträge) am Sonntag, 3.Oktober.2010, 11:49.
    Re: Re: Re: Re: Re: PERL: E-Mails mit Anhang versenden

      Danke, das macht einen sehr übersichtlichen und eindeutigen Eindruck!

      Zu einem Fehler ("Nicht vorhandene Seite")führt jedoch

      <include=sendmail>, 
      

      eine Änderung des Pfades zu <include=/usr/sbin/sendmail>, weil sendmail dort liegen soll, brachte keinen Erfolg.

      Grüße Bernd

     Antworten

    Beitrag von Sander (8126 Beiträge) am Sonntag, 3.Oktober.2010, 12:39.
    Re: Re: Re: Re: Re: Re: PERL: E-Mails mit Anhang versenden

      <include src=sendmail> (hat nix mit dem /usr/sbin/sendmail zu tun - das template mit dem code heißt nur so.)
      

     Antworten

    Beitrag von Bernd (16 Beiträge) am Sonntag, 3.Oktober.2010, 14:51.
    Re: Re: Re: Re: Re: Re: Re: PERL: E-Mails mit Anhang versenden

      Hallo Sander,

      so langsam dämmert`s, danke.

      Nochmalige Suche im Forum ergab einge Verweise auf Beispiel-Templates
      in der BIB. Die Links funzen aber scheinbar nicht.
      Gibt´s anderweitige Möglichkeiten, so etwas einmal zu sehen?

      Dabke und Grüße Bernd

     Antworten

    Beitrag von Sander (8126 Beiträge) am Sonntag, 3.Oktober.2010, 18:57.
    Re: Re: Re: Re: Re: Re: Re: Re: PERL: E-Mails mit Anhang versenden

      na das beispiel hab ich dir doch hier gepostet.

      aus der bib kopieren und dann ein neues template machen mit
      <include src="sendmail">
      <perl>
      $mail=new sendmail();
      $mail->....
      
      usw...
      $mail->submit();
      </perl>
      

      abschicken, ausführen, mail erhalten

     Antworten


     
 Liste der Einträge von 6000 bis 6150:Einklappen Zur Eingabe 
Neueste Einträge << 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Neuere Einträge < Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.10s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!