package mod_EmailVersand; use warnings; use strict; use Win32::OLE; BEGIN {   use Exporter;   our @ISA         = qw( Exporter );   our @EXPORT      = qw( );   our %EXPORT_TAGS = ( );   our @EXPORT_OK   = qw( &su_EmailUeberpruefen &su_EmailSenden ); } # BEGIN sub su_EmailUeberpruefen {   open(EMAILADREIN, "emailAdressen.neu") or die $!;   while() {      chomp;      my @emailAdr = ();      @emailAdr    = split(/\t/);      foreach (@emailAdr) {         s%^\s+%%g; # fuehrende und         s%\s+$%%g; # abschliessende Blanks entfernen      } # foreach      defined $emailAdr[0] or $emailAdr[0] = ""; # To-Adresse      defined $emailAdr[1] or $emailAdr[1] = ""; # Cc-Adresse      my ($kennzTo, $kennzCc, $kennzToDub, $kennzCcDub) = ("OK", "OK", "OK", "OK"); # Kennzeichen      my (%uniqueAdrTo, %uniqueAdrCc)                   = ( (), () );               # Dubletten      # Erklaerung der Regex      # ^              vom Anfang      # [\w.+-]+       mindestens ein Buchstabe, Zahl, . - + _      # \@             das @-Zeichen      # [a-zA-Z0-9.-]* keine oder beliebig viele Buchstaben, Zahlen, . -      # [a-zA-Z0-9]    genau einen Buchstaben oder eine Zahl      # [a-zA-Z0-9.-]* keine oder beliebig viele Buchstaben, Zahlen, . -      # \.             ein Punkt      # [a-zA-Z]{2,}   zwei oder mehr Buchstaben      # $              bis zum Ende      $kennzTo = "KO" if $emailAdr[0] !~ m/^[\w.+-]+\@[a-zA-Z0-9.-]*[a-zA-Z0-9][a-zA-Z0-9.-]*\.[a-zA-Z]{2,}$/;      $kennzCc = "KO" if $emailAdr[1] !~ m/^[\w.+-]+\@[a-zA-Z0-9.-]*[a-zA-Z0-9][a-zA-Z0-9.-]*\.[a-zA-Z]{2,}$/;      # Cc-Adresse wird zu To-Adresse, wenn diese leer      if (not($emailAdr[0])) {         $emailAdr[0] = $emailAdr[1];         $emailAdr[1] = "";      } # if      $kennzToDub = "KO" if ++$uniqueAdrTo{$emailAdr[0]} > 1; # Dublette wenn email      $kennzCcDub = "KO" if ++$uniqueAdrCc{$emailAdr[1]} > 1; # groesser 1      print EMAILADRAUS join("\t", @emailAdr, $kennzTo, $kennzCc, $kennzToDub, $kennzCcDub), "\n";   } # while   close(EMAILADREIN) or die $!;   close(EMAILADRAUS) or die $!; } # su_EmailUeberpruefen sub su_EmailSenden {   open(SUBJECT, "; # Subject direkt aus Datei laden   close(SUBJECT) or die $!;   open(BODY, "; # Body direkt aus Datei in Array laden   close(BODY) or die $!;   open(EMAILADR, ") {      my $outlook = Win32::OLE->new('Outlook.Application') or die $!; # Outlook Application oeffnen      my $items   = $outlook->CreateItem(0) or die $!;      chomp;      my @emailAdr = ();      @emailAdr    = split(/\t/);      my ($emailTo, $emailCc, $kennzTo, $kennzCc, $kennzToDub, $kennzCcDub) = ("", "", "", "", "", ""); # Kennzeichen      $emailTo    = $emailAdr[0]; defined $emailAdr[0] or $emailTo    = "";      $emailCc    = $emailAdr[1]; defined $emailAdr[1] or $emailCc    = "";      $kennzTo    = $emailAdr[2]; defined $emailAdr[2] or $kennzTo    = "";      $kennzCc    = $emailAdr[3]; defined $emailAdr[3] or $kennzCc    = "";      $kennzToDub = $emailAdr[4]; defined $emailAdr[4] or $kennzToDub = "";      $kennzCcDub = $emailAdr[5]; defined $emailAdr[5] or $kennzCcDub = ""; #      $items->{'From'}    = "max\@mustermann.at";      $items->{'To'}      = $emailTo if $kennzTo eq "OK" and $kennzToDub eq "OK"; # To-Adresse zuweisen      $items->{'CC'}      = $emailCc if $kennzCc eq "OK" and $kennzCcDub eq "OK"; # Cc-Adresse zuweisen      $items->{'Subject'} = $subject;        # Subject zuweisen      $items->{'Body'}    = join("", @body); # Body mit Hilfe von join zuweisen (ohne funktioniert das nicht)      # Attachments      foreach my $attach (@ARGV) {         die $! if not -e $attach;         my $attachments = $items->Attachments();         $attachments->Add($attach);      } # foreach      $items->Send();      my $error = Win32::OLE->LastError();      print "Email konnte nicht versendet werden.\n" if $error;   } # while   close(EMAILADR) or die $!; } # su_EmailSenden 1; __END__