markus jeschar: sendmail verwenden mit einem c - mailer

da ich jetzt gleich am verzweifeln bin, möchte ich die chance nutzen an dieser stelle vielleicht aufklärung zu erfahren. es scheint zwar nicht sehr modern zu sein cgi fähige programme in c zu schreiben aber ich tue es trotzdem. meine literatur hilft mir aber nicht mehr weiter. alles läuft ganz hervorragend nur leider kommt bei mir nichts an. die werteübergabe aus einem html formular habe ich mir jetzt schon verkniffen und die entsprechende verarbeitung aus dem quelltext entfernt. gehe ich über telnet auf den server, läßt sich sendmail problemlos verwenden. ich bin für jeden hinweis dankbar.

#include "mycgi.h"

int main (int argc, char *argv[])
{
  int length;
  char *instring=NULL;
  FILE *out;

printf("Content-type: text/html\n\n");
  printf("<HTML>\n<HEAD>\n<TITLE>Forum</TITLE>\n</HEAD>\n<BODY>\n");
  printf("<H1>forum@medium</H1>\n");
  printf("<BR><BR>VIELEN DANK FÜR DEINE LIEBENSWERTE BOTSCHAFT<BR>");
  length=atoi(getenv("CONTENT_LENGTH"));
  instring = (char*)malloc(length+1);
  /*k_e(instring, length);*/
  /*printf("%s\n", instring);*/
  out = popen("/usr/lib/sendmail -t tester@pharmacy-network.de","w");
  fprintf(out, "testmailbla\n\n");
  pclose(out);
  free(instring);
  printf("<BR><BR><BR><BR><A </BODY>\n</HTML>");
  return 0;
}

  1. Hallo,

    out = popen("/usr/lib/sendmail -t tester@pharmacy-network.de","w");

    ich kann mich ja irren, aber liegt sendmail nicht normalerweise woanders als in /usr/lib?

    Schönen Gruß aus Bilk

    Rainer

    1. Hallo,

      out = popen("/usr/lib/sendmail -t tester@pharmacy-network.de","w");

      ich kann mich ja irren, aber liegt sendmail nicht normalerweise woanders als in /usr/lib?

      Schönen Gruß aus Bilk

      Rainer

      danke für den hinweis aber das ist serverspezifisch und in diesem fall habe ich es direkt über telnet auf dem server ausprobiert. der pfad stimmt.

  2. Hallo,

    da ich jetzt gleich am verzweifeln bin, möchte ich die chance nutzen an dieser stelle vielleicht aufklärung zu erfahren. es scheint zwar nicht sehr modern zu sein cgi fähige programme in c zu schreiben aber ich tue es trotzdem.

    Es ist egal, in welcher Sprache Du schreibst.
    Nein, eigentlich nicht, am besten Du schreibst in der Sprache, die Du am besten kannst ;-)

    meine literatur hilft mir aber nicht mehr weiter. alles läuft ganz hervorragend nur leider kommt bei mir nichts an. die werteübergabe aus einem html formular habe ich mir jetzt schon verkniffen und die entsprechende verarbeitung aus dem quelltext entfernt. gehe ich über telnet auf den server, läßt sich sendmail problemlos verwenden. ich bin für jeden hinweis dankbar.

    #include "mycgi.h"

    Ich nehme einfach mal an, das da alles Nötige inkludiert wird, ja?
    Apropos: was sagt eigentlich der Kompiler mit allen Warnungen eingeschaltet, was Lclint?

    (Zumindest LClint sollte Dir so einiges um die Ohren hauen ;-)

    int main (int argc, char *argv[])
    {
      int length;
      char *instring=NULL;
      FILE *out;

    printf("Content-type: text/html\n\n");
      printf("<HTML>\n<HEAD>\n<TITLE>Forum</TITLE>\n</HEAD>\n<BODY>\n");
      printf("<H1>forum@medium</H1>\n");
      printf("<BR><BR>VIELEN DANK FÜR DEINE LIEBENSWERTE BOTSCHAFT<BR>");
      length=atoi(getenv("CONTENT_LENGTH"));

    Das ist eigentlich überflüssig, das könntest Du doch auch noch selber zählen, oder?  ;-)

    instring = (char*)malloc(length+1);
      /*k_e(instring, length);*/
      /*printf("%s\n", instring);*/

    Was hat er gesagt? Ausreichend lang?
    BTW: wo ist der Test, ob malloc() funktioniert hat? ;-)

    out = popen("/usr/lib/sendmail -t tester@pharmacy-network.de","w");
      fprintf(out, "testmailbla\n\n");
      pclose(out);

    Die Pipes, die popen() öffent sind voll gepuffert, versuch mal ein fflush()
    pclose() gibt den Exitstatus des verbundenen Prozesses (in Deinem Fall sendmail) zurück. Den kannst Du z.B. überprüfen. Siehe auch 'man 3  popen' und 'man 3 wait4' für die Rückgabecodes.

    Ich gehe hierbei natürlich von einem Posix-2 konformem System aus. (wg der Manpages auch von einem Unix, das ist wohl wahr, muß ich zugeben ;-)

    free(instring);
      printf("<BR><BR><BR><BR><A </BODY>\n</HTML>");
      return 0;
    }

    so short

    Christoph Zurnieden

    1. Es ist egal, in welcher Sprache Du schreibst.

      das beruhigt mich dann doch ungemein ;-) ...danke

      #include "mycgi.h"

      Ich nehme einfach mal an, das da alles Nötige inkludiert wird, ja?
      Apropos: was sagt eigentlich der Kompiler mit allen Warnungen eingeschaltet, was Lclint?

      ich benutze lcc32 und hatte damit bisher keine probs ansonsten compiliere ich über gcc unter linux, so wie auf dem webserver.

      (Zumindest LClint sollte Dir so einiges um die Ohren hauen ;-)

      das würde mich konkret interessieren 8-)

      length=atoi(getenv("CONTENT_LENGTH"));

      Das ist eigentlich überflüssig, das könntest Du doch auch noch selber zählen, oder?  ;-)

      die idee dahinter ist die, daß der speicher innerhalb der funktion in k_e und k_v für die entsprechenden pointer nochmal dynamisch zugewiesen wird. aber ne begrenzung wäre sicher nicht verkehrt.

      /*k_e(instring, length);*/

      Was hat er gesagt? Ausreichend lang?

      was du nicht wissen knnst abder die funktion konvertiert den eingabestrom aus html in text/plain

      BTW: wo ist der Test, ob malloc() funktioniert hat? ;-)

      entschuldigung 8-(

      Die Pipes, die popen() öffent sind voll gepuffert, versuch mal ein fflush()
      pclose() gibt den Exitstatus des verbundenen Prozesses (in Deinem Fall sendmail) zurück. Den kannst Du z.B. überprüfen. Siehe auch 'man 3  popen' und 'man 3 wait4' für die Rückgabecodes.

      vielen dank für diesen hinweis. ich habe mich zwar mittlerweile für was eigenes entschieden, wo die nachrichten auf dem server bleiben und mich von sendmail verabschiedet. deine antwort hat mich jetzt jedoch wirklich so interessiert, daß ich diese variante weiterverfolgen werde. thx und cu

      1. Hallo,

        Apropos: was sagt eigentlich der Kompiler mit allen Warnungen eingeschaltet, was Lclint?

        ich benutze lcc32 und hatte damit bisher keine probs ansonsten compiliere ich über gcc unter linux, so wie auf dem webserver.

        Und was führte Dich zu LCC statt GCC? Oder meintest Du den LCCWin32 von dem einen Franzosen, dessen Namen ich mir nie merken kann? Schönes Teil übrigens. Die reinen Tools (Compiler, Linker usw) passen auf eine Diskette! ;-)

        (Zumindest LClint sollte Dir so einiges um die Ohren hauen ;-)
        das würde mich konkret interessieren 8-)

        Und? Schon drüber gejagt? ;-)

        length=atoi(getenv("CONTENT_LENGTH"));

        Das ist eigentlich überflüssig, das könntest Du doch auch noch selber zählen, oder?  ;-)

        die idee dahinter ist die, daß der speicher innerhalb der funktion in k_e und k_v für die entsprechenden pointer nochmal dynamisch zugewiesen wird. aber ne begrenzung wäre sicher nicht verkehrt.

        atoi() ist übrigens so eine Sache, da dort _nichts_ geprüft wird, müßtest Du dann selber machen.

        /*k_e(instring, length);*/

        Was hat er gesagt? Ausreichend lang?
        was du nicht wissen knnst abder die funktion konvertiert den eingabestrom aus html in text/plain

        Mir egal, da nicht zum Problem gehörend. Ich meinte das printf() mit der Längenausgabe.

        BTW: wo ist der Test, ob malloc() funktioniert hat? ;-)
        entschuldigung 8-(

        Jaja ;-)

        Die Pipes, die popen() öffent sind voll gepuffert, versuch mal ein fflush()
        pclose() gibt den Exitstatus des verbundenen Prozesses (in Deinem Fall sendmail) zurück. Den kannst Du z.B. überprüfen. Siehe auch 'man 3  popen' und 'man 3 wait4' für die Rückgabecodes.

        vielen dank für diesen hinweis. ich habe mich zwar mittlerweile für was eigenes entschieden, wo die nachrichten auf dem server bleiben und mich von sendmail verabschiedet. deine antwort hat mich jetzt jedoch wirklich so interessiert, daß ich diese variante weiterverfolgen werde. thx und cu

        Wenn Du nur ein wenig Text verschicken willst und keine Ansprüche hast, dann kannst Du Dir Deinen MTA auch eben selber basteln. Sind vielleicht 50 Zeilen.
        (LibSMTP aber da ist mittlerweile zuviel Zusatz drin finde ich. Ich habe noch die Anfänge hier rumliegen, das reicht auch schon. Bei Interesse ...)

        so short

        Christoph Zurnieden