Schrift
[thread]8798[/thread]

mails verschicken an mehrere Personen

Leser: 1


<< >> 6 Einträge, 1 Seite
vayu
 2007-02-28 16:09
#74684 #74684
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
Hallo,

die Module Mail::Sender und Mail::Sendmail sind mir schon bekannt, aber dort gibt es immer nur die Möglichkeit EINEN empfänger anzugeben.

Weiss jemand ob und wie es möglich ist mehrere Empfänger dort einzufügen?

hab es mit Kommasepariertem string probiert, mit Semikolon, mit nem Array. Hat aber alles nicht funtkioniert :(

edit: nein ich möchte keine spammails verschicken ^^ soll ne automatisierte Raucherinnerung werden :P

gruss Vayu\n\n

<!--EDIT|vayu|1172672141-->
renee
 2007-02-28 16:16
#74685 #74685
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nö, CPAN:Mail::Sender kann definitiv mehr (und die anderen sehr wahrscheinlich auch).

Aus der Doku:
Quote
to

=> the recipient's address(es)

This parameter may be either a comma separated list of email addresses or a reference to a list of addresses.


Also bei to eine Arrayreferenz übergeben...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
vayu
 2007-02-28 16:29
#74686 #74686
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
hmm ok das muss ich nochmal probieren, aber bei ner kommaseparierten Liste gabs zwar keinen Fehler, es kam aber auch keine mail an ... ich schau mal

Edith sagt es funktioniert. Danke.\n\n

<!--EDIT|vayu|1172673501-->
havi
 2007-03-02 11:31
#74687 #74687
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Hab mir vor einiger Zeit mal etwas selbst dafuer geschrieben - funktioniert aber nur fuer/mit MS-Outlook.

Bei meinen Skript gibt es 4 Eingabedateien.

1. die Emailadressen (emailadresse.txt)
Inhalt:
Code: (dl )
1
2
3
4
5
[EMAIL=ich@email.at]ich@email.at[/EMAIL]
[EMAIL=ich@domain.de]ich@domain.de[/EMAIL]
[EMAIL=mustermann@domain.com]mustermann@domain.com[/EMAIL]
[EMAIL=mustermann@domain.de]mustermann@domain.de[/EMAIL]
usw.


2. das Subject (subject.txt)
Inhalt:
Code: (dl )
Testemail


3. den Body (body.txt)
Inhalt:
Code: (dl )
1
2
3
4
5
Hallo!

Ich bin ein Testemail.

Gruss


4. das Attachments (in diesem Fall Attach.txt) - wird mit geschickt wenn vorhanden (auch mehrere moeglich)

Der Code des Moduls:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
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__


Der Code des Skripts (im Prinzip nur der Aufruf)
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl

use warnings;
use strict;
use mod_EmailVersand qw( su_EmailUeberpruefen su_EmailSenden );

su_EmailUeberpruefen();
su_EmailSenden();

print "Fertig.\n";

1;


Gruss,
havi\n\n

<!--EDIT|havi|1172828016-->
bloonix
 2007-03-02 11:39
#74688 #74688
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo Havi,

[quote=havi,02.03.2007, 10:31]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
      # 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,}$/;
[/quote]

Um Mail-Adressen zu verifizieren, lohnt ein Blick auf CPAN:Mail::RFC822::Address. :)

Viele Grüße,
opi
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
betterworld
 2007-03-02 13:36
#74689 #74689
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Hallo havi,

Du solltest local $_; jeweils vor while (<...>) schreiben.
<< >> 6 Einträge, 1 Seite



View all threads created 2007-02-28 16:09.