jordan
Goto Top

Mehrere E-Mail Empfänger in Send-Mail Perl-Skript

Hallo zusammen,

ich hatte vorher noch keinen Kontakt mit Perl-Skripten. Nun möchte ich ein bestehendes Perl-Skript für das Versenden von E-Mails auf einer HTML-Homepage bearbeiten.
Ich möchte lediglich mehrere Empfänger hinzufügen. Mit meinen Versuchen das Skript damit zu erweitern funktionieren leider nicht.
Hier das Skript:
#!/usr/bin/perl

# -------> Individuelle Parameter des Skriptes - bitte anpassen!
# --> SMTP-Programm zum Versenden der Mail:
$Sendmail_Prog = "/usr/sbin/sendmail -t -f formular\@example.com"; 
# --> Ziel-Mailadresse, an die gesendet werden soll:
$mailto = 'info@example.com'; 

# -------> Modul für CGI-Scripts einbinden:
use CGI;

# -------> Modul für CGI-Scripts zum Einlesen der Formulardaten anwenden:
$query = new CGI;
@names = $query->param;

# -------> interne Daten aus den erwarteten hidden-Feldern auslesen:
$delimiter = $query->param('delimiter');  # ---> Begrenzerzeichen zwischen name und value 
$returnhtml = $query->param('return');    # ---> URL für Dankeseite 
$subject = $query->param('subject');      # ---> E-Mail-Subject 

# -------> alle Whitespace-Zeichen (Leerzeichen, Tabulator, Newline) in Leerzeichen wandeln
#             VERHINDERT sonst möglichen MISSBRAUCH des Skripts
$subject =~ s/\s/ /g;

# -------> Text der E-Mail aus den Formulardaten ermitteln:
$mailtext = ""; 
foreach(@names) {
  $name = $_;
  @values = ""; 
  @values = $query->param($name);
  if($name ne "return" && $name ne "subject" && $name ne "delimiter") { 
    foreach $value (@values) {
      $mailtext = $mailtext.$name;
      $mailtext = $mailtext.$delimiter;
      $mailtext = $mailtext.$value."\n"; 
    }
  }
}

# -------> E-Mail versenden:
open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n"; 
print MAIL "To: $mailto\n"; 
print MAIL "Subject: $subject\n\n"; 
print MAIL "$mailtext\n"; 
close(MAIL);

# -------> Dankeseite an Browser senden:
print "Location: $returnhtml\n\n"; 

- 2x $mailto untereinander funktioniert nicht. Nur der letzte Eintrag bekommt eine Mail.
$mailto = 'info@example.com';  
$mailto = 'info2@example.com';  
- Kommagetrennt klappt nicht
$mailto = 'info@example.com','info2@example.com;  
- Mit Klammern klappt es auch nicht.
- alle weiteren Versuche klappten auch nicht.
Könnt ihr mir bitte sagen wie dir korrekte Syntax lautet?

Vielen Dank.

Content-Key: 347942

Url: https://administrator.de/contentid/347942

Ausgedruckt am: 28.03.2024 um 10:03 Uhr

Mitglied: em-pie
em-pie 01.09.2017 um 11:32:14 Uhr
Goto Top
Moin,

also deine erste Variante ist ja "logisch" dass die nicht funktioniert:
mit der zweiten Zeile überschreibst du den Inhalt der ersten Zeile...

mit dem zweiten Versuch kann PERL vermutlich auch nichts anfangen, da das Komma ja außerhalb der Hochkommata ist und u.U. beide STrings trennt.

Es gäbe aber zwei Varianten:
a) du schiebst dir die Empfänger in ein Array und läst deinen Mailversand mitteils einer For Each-Schleife versenden oder
b) du schaust einmal hier: https://stackoverflow.com/questions/10521011/sending-email-to-multiple-r ...

Gruß
em-pie
Mitglied: Jordan
Jordan 01.09.2017 um 11:55:40 Uhr
Goto Top
Danke für den Denkanstoß. Den brauchte ich.
Quick and dirty. Für meine Zwecke vollkommen ausreichend.
#!/usr/bin/perl

# -------> Individuelle Parameter des Skriptes - bitte anpassen!
# --> SMTP-Programm zum Versenden der Mail:
$Sendmail_Prog = "/usr/sbin/sendmail -t -f formular\@example.com";  
# --> Ziel-Mailadresse, an die gesendet werden soll:
$mailto1 = 'info@example.com';  
$mailto2 = 'info2@example.com';  

# -------> Modul für CGI-Scripts einbinden:
use CGI;

# -------> Modul für CGI-Scripts zum Einlesen der Formulardaten anwenden:
$query = new CGI;
@names = $query->param;

# -------> interne Daten aus den erwarteten hidden-Feldern auslesen:
$delimiter = $query->param('delimiter');  # ---> Begrenzerzeichen zwischen name und value  
$returnhtml = $query->param('return');    # ---> URL für Dankeseite  
$subject = $query->param('subject');      # ---> E-Mail-Subject  

# -------> alle Whitespace-Zeichen (Leerzeichen, Tabulator, Newline) in Leerzeichen wandeln
#             VERHINDERT sonst möglichen MISSBRAUCH des Skripts
$subject =~ s/\s/ /g;

# -------> Text der E-Mail aus den Formulardaten ermitteln:
$mailtext = "";  
foreach(@names) {
  $name = $_;
  @values = "";  
  @values = $query->param($name);
  if($name ne "return" && $name ne "subject" && $name ne "delimiter") {  
    foreach $value (@values) {
      $mailtext = $mailtext.$name;
      $mailtext = $mailtext.$delimiter;
      $mailtext = $mailtext.$value."\n";  
    }
  }
}

# -------> E-Mail versenden:
open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";  
print MAIL "To: $mailto1\n";  
print MAIL "Subject: $subject\n\n";  
print MAIL "$mailtext\n";  
close(MAIL);

open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";  
print MAIL "To: $mailto2\n";  
print MAIL "Subject: $subject\n\n";  
print MAIL "$mailtext\n";  
close(MAIL);

# -------> Dankeseite an Browser senden:
print "Location: $returnhtml\n\n";