www.mikrocontroller.net

Forum: PC-Programmierung Email unter C versenden


Autor: max .. (vbc2011)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
ich möchte mit einem reinen C-Programm eine Email versenden - geht das?? 
wenn ja - wäre ich über jeden sinnvollen tipp froh!
Ich verwende Microsoft Visual Studio 2008.

Danke.
Gruss

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Natives C oder C# ?!

Letzteres bietet Dir schon entsprechende Funktionen. Bei C ist der Weg 
so:
- TCP/IP Verbindung zu einem SMTP Server deiner Wahl aufbauen und dann 
das Protokoll entsprechend der RFC anwenden.

Autor: Imon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein leider geht das mit reihen C Code nicht,
denn Reines C ( Also ISO 9899:1999 ) weiss nichts von Netzwerk Socket 
etc..
also wirst du mindestens eine Erweiterung des C Standart brauchen,
allerdings werden Netzwerk Sockets immer recht ähnlich abgehandelt so 
das du diese wahrscheinlich recht portable abbilden kannst.
Danach musst du dich an die Entsprechenden RFC halten, das darfst du 
dann auch gerne im Reinen ISO C machen.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es nicht ganz so puristisch sein muss und auch der Aufruf eines 
Command-Line Programms zulässig ist, dann wirds einfacher (=> blat).

Autor: max .. (vbc2011)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja ein commandline aufruf ist möglich! hast du da ein beispiel oder 
kannst du mir das prinzipielle vorgehen schildern!??!

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.msxfaq.de/tools/blat.htm

File mit Inhalt erzeugen, und dann system("blat.exe blablabla") 
aufrufen. Für Fortgeschrittene: statt dessen via popen(...) aufrufen und 
Inhalt reinpipen.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Imon schrieb:
> Nein leider geht das mit reihen C Code nicht,
> denn Reines C ( Also ISO 9899:1999 ) weiss nichts von Netzwerk Socket
> etc..
> also wirst du mindestens eine Erweiterung des C Standart brauchen,

Das ist natürlich Humbug, es sei denn, man fasst den Aufruf von zum 
Betriebssystem gehörenden Funktionen als "Erweiterung des C Standar_D_" 
auf.

Autor: Andreas H. (andreas_h16)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Visual Studio 2008 und reines C ? Kann ich mir nicht vorstellen, daß 
jemand sowas macht ;-)

Aber wenn MFC, dann CPJNSMTPConnection v2.92 An MFC class to encapsulate 
the SMTP protocol, http://www.naughter.com/smtp.html.

Wenn kein MFC, dann das selbige in eine DLL packen (Wrapper für REINES C 
drumrum ;-) ), und von Deinem Programm aufrufen.

Autor: Imon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. Firefly schrieb:
> Imon schrieb:
>> Nein leider geht das mit reihen C Code nicht,
>> denn Reines C ( Also ISO 9899:1999 ) weiss nichts von Netzwerk Socket
>> etc..
>> also wirst du mindestens eine Erweiterung des C Standart brauchen,
>
> Das ist natürlich Humbug, es sei denn, man fasst den Aufruf von zum
> Betriebssystem gehörenden Funktionen als "Erweiterung des C Standar_D_"
> auf.

Natürlich ist das Aufrufen einer zum Betriebsystem gehörenden Funktion 
eine erweiterung des C Standards, wenn du dein Programm auf einen 
anderen Betriebsystem oder sogar ohne Betriebsystem laufen lässt, geht 
es nicht weil eben die möglichkeiten welche die Funktion des 
Betriebsystem liefert nicht im C Standard enthalten ist.

Sicherlich würde man in der Praxis es so hinnehmen das es da eine 
Betriebsystemfunktion gibt um den Bildschirm zu lösen den Socket zu 
Öffnen oder was auch immer. Aber das sind nun mal Erweiterungen welche 
der Reihe C Standard nicht kennt. Ergo ist das Programm im zweifel nicht 
in Reinen C Geschrieben..
Allerdings bin ich mir auch der Tatsache bewusst das man es, mit reinen 
C schwer hat ein reales Problem zu lösen. Aber man sollte im zweifel 
wenigsten Wissen, habe ich ein Problem mit der Sprache C , oder denn 
Erweiterungen des Betriebssystems.

und der ISO Standard für C kennt nun mal kein Netzwerk, deshalb wird es 
nur möglich sein mit einer Erweiterung der Sprache C das Problem Email 
senden erfolgreich zu lösen.

Die Formell Korrekte Antwort muss also lauten. Nein es ist nicht möglich 
mit den Reinen C Funktionen, die im ISO oder K&R beschrieben sind, das 
Problem zu lösen.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Spracherweiterung ist etwas anderes als Libraries, die 
Schnittstellen zu Betriebssystemfunktionen zur Verfügung stellen. Denn 
bereits die Standard-C-Library tut genau das, wenn es um 
Speicherverwaltung oder Zugriffe aufs Dateisystem geht. Das Dateisystem 
nämlich ist kein Sprachbestandteil von C, sondern gehört dem 
Betriebssystem, wobei es auch Betriebssysteme gibt, die gar keines 
haben.

Lies Dir die entsprechenden Abschnitte in der zweiten Ausgabe des K&R 
mal genauer durch.

Dein "reines C" ist daher nur "rein", wenn es ohne Standardlibrary 
betrachtet wird.

Ich habe aber das Gefühl, daß eine Diskussion mit Dir darüber sinnlos 
sein dürfte.

Außerdem dürfte der Threadstarter mit "reinem C" gemeint haben, daß er 
eben weder C++ noch C# verwenden will, sondern eben C. C im Sinne von 
ANSI-C (C89), denn was neueres kennt der MS-Compiler nach wie vor nicht.

Autor: Jasch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. Firefly schrieb:
> Eine Spracherweiterung ist etwas anderes als Libraries, die
> Schnittstellen zu Betriebssystemfunktionen zur Verfügung stellen. Denn
> bereits die Standard-C-Library tut genau das, wenn es um

"Standard-C-Library" - gemerkt?

> Speicherverwaltung oder Zugriffe aufs Dateisystem geht. Das Dateisystem
> nämlich ist kein Sprachbestandteil von C, sondern gehört dem
> Betriebssystem, wobei es auch Betriebssysteme gibt, die gar keines
> haben.
>
> Lies Dir die entsprechenden Abschnitte in der zweiten Ausgabe des K&R
> mal genauer durch.

K&R (1 oder 2) != ISO/IEC 9899.

> Dein "reines C" ist daher nur "rein", wenn es ohne Standardlibrary
> betrachtet wird.

Du meinst das ganze Kapitel 7 "Library" im C99-Standard ist da nur aus 
Jux und Dollerei drin?

Bwahaha, ja, genau. So wird es sein.

> Außerdem dürfte der Threadstarter mit "reinem C" gemeint haben, daß er
> eben weder C++ noch C# verwenden will, sondern eben C. C im Sinne von
> ANSI-C (C89), denn was neueres kennt der MS-Compiler nach wie vor nicht.

Traurig für den MS-Compiler. Wobei ich schätze der kann zumindest ein 
Subset der C99-Features, was dem TS aber auch nicht hilft.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. Firefly schrieb:
> Ich habe aber das Gefühl, daß eine Diskussion mit Dir darüber sinnlos
> sein dürfte.

Autor: Jasch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. Firefly schrieb:
> Rufus Τ. Firefly schrieb:
>> Ich habe aber das Gefühl, daß eine Diskussion mit Dir darüber sinnlos
>> sein dürfte.

Bitte auf den Absender achten. Danke.

Du scheinst zu glauben das sowas:

----------------->8 ---------------------
#include <stdlib.h>

int main(void) {
    void* foo = malloc(4711);
    free(foo);
    return 0;
}
----------------->8 ---------------------

nicht (für Hosted Environments, wovon hier geredet wird) komplett vom 
Standard abgedeckt ist.

Das finde ich ehrlich gesagt, ummm, beunruhigend.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jasch schrieb:
> Bitte auf den Absender achten. Danke.

Ich darf mich selbst zitieren. Das hast Du mir nicht abzusprechen.

Autor: Jasch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. Firefly schrieb:
> Jasch schrieb:
>> Bitte auf den Absender achten. Danke.
>
> Ich darf mich selbst zitieren. Das hast Du mir nicht abzusprechen.

<Grins>Oooooo. Kaayyyyyy...</Grins>

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jasch schrieb:
> Rufus Τ. Firefly schrieb:
>> Jasch schrieb:
>>> Bitte auf den Absender achten. Danke.
>>
>> Ich darf mich selbst zitieren. Das hast Du mir nicht abzusprechen.
>
> <Grins>Oooooo. Kaayyyyyy...</Grins>

Haha

So isser halt, der Rufus.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ich bereits schrieb, ist die Diskussion sinnlos, da sie komplett an 
dem vorbeigeht, was der Threadstarter wissen wollte.

Der wollte in C eine Email versenden und verwandte die etwas 
unglückliche Formulierung "reines C", um sich von C++ oder gar C# 
abzugrenzen.

Weitere Spitzfindigkeiten eher pseudoakademischer Natur sind hier nicht 
sinnvoll.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.