PERLentaucher: FormMailer: Absender in Header übernehmen

Hallo,

mein FormMailer läuft nun dank tatkräftiger Unterstützung aus diesem Forum. Eine Sache wäre nun noch ganz nett: wenn in der versandten Mail nicht als Absender eine interne Adresse meines Providers, sondern die vom User angegebene Adresse stehen würde. So dass man dann einfach den "Antworten" Button im Mail-Programm nutzen kann.

Jemand ne Idee, wie man das bewerkstelligen könnte?

Vielen Dank

..taucher.

  1. Hallo,

    welches Modul benutzt Du denn um Mails zu verschicken?
    Und kannst Du das Stück Source schicken, daß die Mail verschickt?

    Viele Grüße

    Sasha

    1. #!/usr/bin/perl

      -------> SMTP-Programm zum Versenden der Mail:

      my $Sendmail_Prog = "/usr/sbin/sendmail";

      -------> Modul für CGI-Scripts einbinden:

      use CGI;
      use strict;

      -------> Modul für CGI-Scripts zum Einlesen der Formulardaten anwenden:

      my $query = new CGI;
      my @names = $query->param;

      -------> interne Daten aus den erwarteten hidden-Feldern auslesen:

      my $delimiter = ':';
      my $mailto = 'address@domain.de';
      my $returnhtml = $query->param('return');
      my $subject = 'Irgendwas';

      -------> Text der E-Mail aus den Formulardaten ermitteln:

      my $mailtext = "";
      my $name;
      my @values;
      my $value;

      foreach(@names) {
        $name = $_;
        @values = "";
        @values = $query->param($name);
        if($name ne "mailto" && $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";

      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

      <html><head></head><body>

      <form action="http://www.....de/cgi-bin/mailer.pl" method="post">

      <input type="hidden" name="return" value="http://www.....de/danke.html">
      <input type="hidden" name="delimiter" value=": ">
      <input type="hidden" name="subject" value="Feedback-Formular">
      <input type="Text" name="name" value="" size="50" maxlength="50">
      <input type="Text" name="mailtext" value="" size="50" maxlength="50">
      <input type="submit"><input type="reset">
      </form>
      </body></html>

      was meinst Du mit "Modul" @ sasha??

      1. Hi,

        [...]

        -------> E-Mail versenden:

        my $from=$query->param('absendeemailadresse')

        open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";
          print MAIL "To: $mailto\n";

        print MAIL "From: $frim\n";

        print MAIL "Subject: $subject\n\n";
          print MAIL "$mailtext\n";
        close(MAIL);
        [...]

        Anstatt 'absendeemailadresse' musst du halt den Namen des Feldes im HTML-Formular angeben, in das die Mailsdresse eingetragen wird.

        HTH

        Margin-Auto

        1. kurz und bündig. Danke. gibt das evtl. Sicherheitsrisiken??

          1. kurz und bündig. Danke. gibt das evtl. Sicherheitsrisiken??

            Ja, gibt es.
            Damit nicht jeder Dein Mailformular manipulieren kann, solltest Du prüfen ob nur eine E-Mail Adresse im Epfänger steht, sonst kann man durch Kommatar getrennt beliebig viele eintragen, und Dein Form zum spammen benutzen.
            Außerdem solltest Du Zeilenumbrüche (\n) rausparsen, da man sonst die sendmail Befehle manipulieren kann.

            Viele Grüße

            Sasha

            1. Damit nicht jeder Dein Mailformular manipulieren kann, solltest Du prüfen ob nur eine E-Mail Adresse im Epfänger steht, sonst kann man durch Kommatar getrennt beliebig viele eintragen, und Dein Form zum spammen benutzen.
              Außerdem solltest Du Zeilenumbrüche (\n) rausparsen, da man sonst die sendmail Befehle manipulieren kann.

              jetzt trennt sich wohl die Spreu vom Weizen ;-) , ich kann das nämlich nicht ganz nachvollziehen... wie soll das zum Spammen genutzt werden. Der Empfänger der "Form" ist ja fix im .pl , nur der Absender soll ja ausgelesen werden... und wenn da zig Absender drinstehen ist doch egal, so lang ich nicht aus versehen "allen antworten" benutze, oder??!??

              1. Du kannst mithilfe von \n den Sendmail Befehl manipulieren, um es zum spammen zu benutzen.
                Ich hatte übersehen, daß Dein Empfänger nicht variabel ist, was schon mal ganz praktisch ist, aber parse Empfänger, Absender und Betreff trozdem besser nach \n.
                Ersetzt alle \n durch nichts in $var:
                $var =~ s/\n//g;

                Viele Grüße

                Sasha

                1. Du kannst mithilfe von \n den Sendmail Befehl manipulieren, um es zum spammen zu benutzen.
                  Ich hatte übersehen, daß Dein Empfänger nicht variabel ist, was schon mal ganz praktisch ist, aber parse Empfänger, Absender und Betreff trozdem besser nach \n.
                  Ersetzt alle \n durch nichts in $var:
                  $var =~ s/\n//g;

                  Also wie folgt??

                  ...

                  -------> interne Daten aus den erwarteten hidden-Feldern auslesen:

                  my $delimiter = ':';
                  my $mailto = 'webapprentice@junkpile.de';
                  $mailto =~ s/\n//g;
                  my $returnhtml = $query->param('return');
                  my $subject = 'junkpile.de';
                  $subject =~ s/\n//g;
                  ...

                  -------> E-Mail versenden:

                  my $from=$query->param('absender');
                  $from =~ s/\n//g;
                  open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";
                    print MAIL "To: $mailto\n";
                    print MAIL "From: $from\n";
                    print MAIL "Subject: $subject\n\n";
                    print MAIL "$mailtext\n";
                  close(MAIL);

                  aber wozu ich fixe Werte wie empfänger und subject parsen soll, hab ich noch nicht verstanden. Wie soll das gehen den Sendmail mit /n zu manipulieren??

                  taucher.

                  1. Also wie folgt??

                    Im Prinzip ja.

                    aber wozu ich fixe Werte wie empfänger und subject parsen soll, hab ich noch nicht verstanden. Wie soll das gehen den Sendmail mit /n zu manipulieren??

                    Musst du natürlich nicht. Nur Werte die von aussen kommen.

                    Struppi.

                    1. Im Prinzip ja.

                      Nur im Prinzip? oder ja?  ;-)

                      thx.

                      1. Im Prinzip ja.

                        Nur im Prinzip? oder ja?  ;-)

                        Im Prinzip geht es so, ist aber aus den von dir genannten Gründen nicht notwendig.

                        Struppi.

            2. [...]

              -------> E-Mail versenden:

              my $from=$query->param('absendeemailadresse')

              open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";
                print MAIL "To: $mailto\n";

              print MAIL "From: $frim\n";

              print MAIL "Subject: $subject\n\n";
                print MAIL "$mailtext\n";
              close(MAIL);
              [...]

              Das ist die aktuelle Form (wie von Margin-Auto vorgeschlagen), und soweit ich das sehe, klappt bisher alles ganz gut. Deinen anderen Beitrag (@ sasha) konnte ich leider mit meinen bescheidenen Fach-Kenntnissen nicht entschlüsseln ;-) .

              Kann hier noch jemand offensichtliche Probleme ausmachen? Genannt war unter anderem was von "SPAMmern" und "Mehrfach-Absender-Eingabe".

              thanx again.

              ...taucher.

              1. Das ist die aktuelle Form (wie von Margin-Auto vorgeschlagen), und soweit ich das sehe, klappt bisher alles ganz gut. Deinen anderen Beitrag (@ sasha) konnte ich leider mit meinen bescheidenen Fach-Kenntnissen nicht entschlüsseln ;-) .

                Ich hatte doch nur Deinen Code kopiert??? Und die Zeile mit dem From und eine Variable, die den Absender beinhaltet hinzugefügt?
                Vielleicht bin ich auch durcheinander und weiß nicht was Du meinst...

                Und dann hatte ich Dir noch ein paar fertige Perl Module empfohlen, mit welchen das Mail versenden leicht und einfach geht...

                Schönen Feierabend noch...

                Sasha

      2. Hallo,

        da Du direkt Sendmail benutzt, mußt Du auch die direkten Sendmail Befehle benutzen.
        Der Absender befindet sich dabi in 'From':

        my $absender = 'absender@absender.de';

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

        So sollte es gehen, habe es aber nicht getestet. Ich benutzte zum versenden von Mails in Perl mit Sendmail immer Mail::Sendmail
        http://search.cpan.org/~abeltje/Test-Smoke-1.19/lib/Mail/Sendmail.pm
        oder noch lieber, da etwas vielfältiger Mime::Lite
        http://search.cpan.org/~yves/MIME-Lite-3.01/lib/MIME/Lite.pm
        Beide sind CPAN Module

        Viele Grüße

        Sasha

  2. Es soll sich niemand gezwungen sehen, hier komplette Lösungen anzubieten.

    Ich wäre schon zufrieden, wenn mir jemand sagen könnte, ob überhaupt, und wenn ja, in welche Richtung ich mich schlau machen müsste.

    thx.