Forum: PC-Programmierung Email unter C versenden


von max .. (vbc2011)


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

von Fabian (Gast)


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.

von Imon (Gast)


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.

von (prx) A. K. (prx)


Lesenswert?

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

von max .. (vbc2011)


Lesenswert?

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

von (prx) A. K. (prx)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Andreas H. (andreas_h16)


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.

von Imon (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Jasch (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Jasch (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jasch schrieb:
> Bitte auf den Absender achten. Danke.

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

von Jasch (Gast)


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>

von Markus (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.