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.txt") or die $!;
open(EMAILADRAUS, ">emailAdressen.neu") or die $!;
while(<EMAILADREIN>) {
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.txt") or die $!;
my $subject = <SUBJECT>; # Subject direkt aus Datei laden
close(SUBJECT) or die $!;
open(BODY, "<body.txt") or die $!;
my @body = <BODY>; # Body direkt aus Datei in Array laden
close(BODY) or die $!;
open(EMAILADR, "<emailAdressen.neu") or die $!;
while(<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__