Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: WinAPI ::  Email mit Dateien perWinAPI versenden??     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Programmer85
Unregistrierter




Beitrag Programmer85 Unregistrierter 20:38:00 17.08.2002   Titel:   Email mit Dateien perWinAPI versenden??            Zitieren

Hi Leutz!

Wie man ein Email sendet, weiss ich.
Aber wie muss man das machen, oder den code Abändern, um eine DATEI zu versenden??

mfg
Programmer
JMM2002
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.08.2002
Beiträge: 5
Beitrag JMM2002 Mitglied 04:23:00 18.08.2002   Titel:              Zitieren

Hallo,
Zitat:
vielleicht hilft dir das weiter:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  MapiRecipDesc recipient =
  {
    0, MAPI_TO,  
    "jemand",    
    "SMTP:jemand@abc.com",    // empfänger
    0, NULL
  };
 
 
  MapiFileDesc attachment = {0,            // ulReserved, muss 0 sein
                             0,            // keine flags, da Datei
                             (ULONG)-1,    // position unbekannt
                             "c:\\myfile.zip",         // pfadname
                             "my_file.zip",         // original dateiname
                             NULL};        // kein MapiFileTagExt
 
  MapiMessage message =
  {
    0, "blah blah blah ...",
    "'ne Nachricht für dich!",
    NULL, NULL, NULL, 0, NULL, 1, &recipient, 1, &attachment
  };
 
  lpfnMAPISendMail = (LPMAPISENDMAIL)GetProcAddress(hMAPILib,"MAPISendMail");
  (*lpfnMAPISendMail)(lhSession, 0, &message, 0, 0);

Zitat:
ciao,JMM2002
TheBeginner
Unregistrierter




Beitrag TheBeginner Unregistrierter 05:03:00 18.08.2002   Titel:              Zitieren

hi,

>Wie man ein Email sendet, weiss ich.

wie machst du es dann, über das SMTP-Protokoll. Wenn ja, musst du die Datei, die du schicken willst, vorher kodieren. Hier kommen 2 Verfahren in Frage : Das UUENCODE und das MIME-Verfahren.

Wenn du genau das suchst, kann ich dir weiterhelfen. Ich musste in einem Praktikum mit VBA ein Email-Client entwicklen, den man direkt mittels einen neuen Menüeintrages in MS Word zum email-versenden benutzen kann. (habe auch das MIME-Verfahren benutzt).

Den Client habe ich auch mittlerweile in C (und winapi) portiert, (Ist eine GUI-Anwendung), und kann auch Dateien versenden, leider nur eine auf ein mal, habe immer noch ein Problem 3 oder mehr Dateien zu versenden.

Hoffe, koennte helfen.

The Beginner.

PS.
Unglaublich, das System zeigt mich immer als unregistriert, obwohl ich mich angemeldet habe :(((
TKool
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.03.2002
Beiträge: 647
Beitrag TKool Mitglied 08:43:00 18.08.2002   Titel:              Zitieren

Ich hatte den Code aus der FAQ mal um Datei-Anhänge ergänzt.
Das Beispiel verschickt 2 Dateien:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
int _tmain(void)
{
  LPMAPISENDMAIL pfnSendMail;
  MapiRecipDesc  rdOriginator;
  MapiRecipDesc  rdRecipient[1];
  LPMAPILOGOFF   pfnLogoff;
  LPMAPILOGON    pfnLogon;
  MapiMessage    mapimsg;
  HINSTANCE      hDll;
  LHANDLE        lHnd;
  MapiFileDesc   mapifiledesc[20];
 
    if(NULL == (hDll = LoadLibrary(TEXT("MAPI32.DLL"))))
    {
        _tprintf(TEXT("could not load mapi32.dll, ErrorCode: %u"), GetLastError());
        return(0);
    }
 
    pfnLogon    = (LPMAPILOGON)   GetProcAddress(hDll, "MAPILogon");
    pfnLogoff   = (LPMAPILOGOFF)  GetProcAddress(hDll, "MAPILogoff");
    pfnSendMail = (LPMAPISENDMAIL)GetProcAddress(hDll, "MAPISendMail");
 
    pfnLogon(0, NULL, NULL, 0, 0, &lHnd);
 
    mapimsg.ulReserved          = 0;
    mapimsg.lpszSubject         = "Subject";
    mapimsg.lpszNoteText        = "Hi!\n\nAnbei ist eine Datei!\n\nGruß\nIch\n"; // Text des EMails
    mapimsg.lpszMessageType     = NULL;
    mapimsg.lpszDateReceived    = NULL;
    mapimsg.lpszConversationID  = NULL;
    mapimsg.flFlags             = 0;
    mapimsg.lpOriginator        = &rdOriginator;
    mapimsg.nRecipCount         = NUM_ELEMENTS(rdRecipient);
    mapimsg.lpRecips            = rdRecipient;
    mapimsg.nFileCount          = 2; //2 Dateien anhängen
    mapimsg.lpFiles             = &mapifiledesc[0];
 
    rdOriginator.ulReserved     = 0;
    rdOriginator.ulRecipClass   = MAPI_ORIG;
    rdOriginator.lpszName       = "rdOriginator";
    rdOriginator.lpszAddress    = "ich@sender.de"; // Sender
    rdOriginator.ulEIDSize      = 0;
    rdOriginator.lpEntryID      = NULL;
 
    rdRecipient[0].ulReserved   = 0;
    rdRecipient[0].ulRecipClass = MAPI_TO;
    rdRecipient[0].lpszName     = "ich@empfänger.de"; // Empfänger
    rdRecipient[0].lpszAddress  = "";
    rdRecipient[0].ulEIDSize    = 0;
    rdRecipient[0].lpEntryID    = NULL;
 
    mapifiledesc[0].ulReserved = 0;
    mapifiledesc[0].flFlags = 0;
    mapifiledesc[0].nPosition = -1;
    mapifiledesc[0].lpszPathName = "C:\\Autostart.bat"; // Die Datei
    mapifiledesc[0].lpszFileName = "Datei.txt"; // so heisst die Datei im Anhang des EMails
    mapifiledesc[0].lpFileType = 0;
 
// Für die2te Datei kann man sich dann hierauf beschränken:
    mapifiledesc[1].ulReserved = 0;
    mapifiledesc[1].flFlags = 0;
    mapifiledesc[1].nPosition = -1;
    mapifiledesc[1].lpszPathName = "C:\\Bootlog.txt";
    mapifiledesc[1].lpszFileName = "Log.txt";
    mapifiledesc[1].lpFileType = 0;
 
    pfnSendMail(lHnd, NULL, &mapimsg, 0, 0);
 
    pfnLogoff(lHnd, 0, 0, 0);
 
    FreeLibrary(hDll);
 
  return(0);
}


[ Dieser Beitrag wurde am 18.08.2002 um 08:53 Uhr von TKool editiert. ]

_________________
www.winapi.net jetzt mit Forum!
Programmer85
Unregistrierter




Beitrag Programmer85 Unregistrierter 09:14:00 18.08.2002   Titel:              Zitieren

Jo, danke!!

es klappt soweit!
Genau das hab ich gesucht
TheBeginner
Unregistrierter




Beitrag TheBeginner Unregistrierter 09:19:00 18.08.2002   Titel:              Zitieren

wenn man eine email mit dem SMTP-Protokoll schicken will, muss man eine reine Socket-Verbindung zum SMTP-Server herstellen. Es kommt hier oft im Forum, dass man irgendwelche MAPI-Schnittstelle oder Befehle benutzt. Ich wuerde gerne wissen, was das eigentlich ist, und warum es oft benutzt wird.

Spielt es in diesem Falle nicht eine Rolle, welches Email Client man benutzt, wird es nicht unbedingt nur mit Outlook benutzt.

Was ist, wenn ich eine Email verscchicken will, ohne das auf mein System ein Email Client läuft.

Liege ich richtig oder daneben??

TheBeginner.
TKool
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.03.2002
Beiträge: 647
Beitrag TKool Mitglied 13:51:00 18.08.2002   Titel:              Zitieren

SimpleMAPI ist eine einfache und schnelle Möglichkeit EMAils zu verschicken.
Funktioniert aber nur mit der passenden DLL.
Möglicherweise auch nur mit Outlook, allerdings habe ich es auch mit keinem anderen Programm versucht..

Wenn man direkt über SMTP verschickt ist man von Outlook oder vergleichbaren unabhängig.
Das ist aber vile mehr an Aufwand zu betreiben als wie mit SimpleMAPI.

_________________
www.winapi.net jetzt mit Forum!
ChrisK
Mitglied

Benutzerprofil
Anmeldungsdatum: 24.06.2001
Beiträge: 482
Beitrag ChrisK Mitglied 14:12:00 09.06.2003   Titel:              Zitieren

HILFE! Auch ich arbeite nach dem obigen Beispiel!
Aber ich muss eine E-Mail an meherere... Vielleicht bis zu 20 E-Mail Adressen verschicken können... Das soll kein Hacktool werden sondern ein Programm für Clans, die Nachrichten an alle Clanmitglieder vesenden wollen. Wie versende ich an 10 Leute gleichzeitig??? Nach diesem Beispiel nach????

PLZ HELP

_________________
==> http://www.ckleiner.de http://www.thelword-online.de
-King-
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.01.2002
Beiträge: 2136
Beitrag -King- Mitglied 14:31:00 09.06.2003   Titel:              Zitieren

Das sind die Empfänger:
C++:
MapiRecipDesc  rdRecipient[1];


Zurzeit ist das also nur einer. Mach das Array grösser, fülle auch die zusätzlichen Strukturen aus und gebe die neue Array-Größe bekannt (mapimsg.nRecipCount, erledigt NUM_ELEMENTS im Beispiel automatisch).

_________________
http://www.winapi.net/
ChrisK
Mitglied

Benutzerprofil
Anmeldungsdatum: 24.06.2001
Beiträge: 482
Beitrag ChrisK Mitglied 16:17:00 09.06.2003   Titel:              Zitieren

OK THX!

_________________
==> http://www.ckleiner.de http://www.thelword-online.de
ChrisK
Mitglied

Benutzerprofil
Anmeldungsdatum: 24.06.2001
Beiträge: 482
Beitrag ChrisK Mitglied 18:38:00 09.06.2003   Titel:              Zitieren

NOchmal help plz....
ich hab ne funktion geschrieben... szAdress enthält dann z.B sowas:

"erste@mail;zweite@mail;dritte@mail"

und die funktion schneidet sie sozusagen auseinander und setzt die werde des MAPI structs.... das ergebnis stimmt fast... aus dem obigenbeispiel steht aber dann im outlook fenster:

"SMTP:dritte@mail;SMTP:dritte@mail;SMTP:dritte@mail"

also faaast richtig. die mails sollten noch stimmen, aber ich finde nicht raus warum überall "dritte@mail" steht :(((

was is da los?

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
void Mail_Send(const char *szToName, const char *szAddress, const char *szMyName, const char *szMyMail, const char *szSubject, const char *szText)
{
    int iCCs = 2;
    for(int i=0; i<(int)strlen(szAddress); i++) if(szAddress[i] == ';') iCCs++;
 
    LPMAPISENDMAIL pfnSendMail;
    MapiRecipDesc  rdOriginator;
    MapiRecipDesc  rdRecipient[30];
    LPMAPILOGOFF   pfnLogoff;
    LPMAPILOGON    pfnLogon;
    MapiMessage    mapimsg;
    HINSTANCE      hDll;
    LHANDLE        lHnd;
 
    char szMsg[MAX_PATH];
 
    if((hDll = LoadLibrary(TEXT("MAPI32.DLL"))) == NULL)
    {
        MessageBox(hMainDlg, "ERROR!\nmapi32.dll konnte nicht geladen werden.", "Member Manager", MB_ICONERROR);
        return;
    }
 
    pfnLogon    = (LPMAPILOGON)GetProcAddress(hDll, "MAPILogon");
    pfnLogoff   = (LPMAPILOGOFF)GetProcAddress(hDll, "MAPILogoff");
    pfnSendMail = (LPMAPISENDMAIL)GetProcAddress(hDll, "MAPISendMail");
 
    pfnLogon(0, NULL, NULL, 0, 0, &lHnd);
 
    mapimsg.ulReserved   = 0;
    mapimsg.lpszSubject  = (char *)szSubject;
    mapimsg.lpszNoteText = (char *)szText;
    mapimsg.lpszMessageType    = NULL;
    mapimsg.lpszDateReceived   = NULL;
    mapimsg.lpszConversationID = NULL;
    mapimsg.flFlags      = 0;
    mapimsg.lpOriginator = &rdOriginator;
    mapimsg.nRecipCount  = iCCs-1;
    mapimsg.lpRecips     = rdRecipient;
    mapimsg.nFileCount   = 0;
 
    rdOriginator.ulReserved   = 0;
    rdOriginator.ulRecipClass = MAPI_ORIG;
    rdOriginator.lpszName     = (char *)szMyName;
    rdOriginator.lpszAddress  = (char *)szMyMail;
    rdOriginator.ulEIDSize    = 0;
    rdOriginator.lpEntryID    = NULL;
 
    int iNo = 0;
    int iPos = 0;
    char szCurMail[MAX_PATH];
 
    if(iCCs == 2)
    {
        rdRecipient[0].ulReserved   = 0;
        rdRecipient[0].ulRecipClass = MAPI_TO;
        rdRecipient[0].lpszName     = (char *)szToName;
        sprintf(szMsg, "SMTP:%s", szAddress);
        rdRecipient[0].lpszAddress  = szMsg;
        rdRecipient[0].ulEIDSize    = 0;
        rdRecipient[0].lpEntryID    = NULL;
    }
    else
    {
        for(int i=0; i<(int)strlen(szAddress); i++)
        {
            if(szAddress[i] == ';')
            {
                szCurMail[iPos] = '\0';
                rdRecipient[iNo].ulReserved   = 0;
                rdRecipient[iNo].ulRecipClass = MAPI_TO;
                rdRecipient[iNo].lpszName     = (char *)szToName;
                sprintf(szMsg, "SMTP:%s", szCurMail);
                rdRecipient[iNo].lpszAddress  = (char *)szMsg;
                rdRecipient[iNo].ulEIDSize    = 0;
                rdRecipient[iNo].lpEntryID    = NULL;
                iPos = 0;
                szCurMail[0] = '\0';
                iNo++;
            }
            else
            {
                szCurMail[iPos] = szAddress[i];
                iPos++;
            }
        }
 
        szCurMail[iPos] = '\0';
        rdRecipient[iNo].ulReserved   = 0;
        rdRecipient[iNo].ulRecipClass = MAPI_TO;
        rdRecipient[iNo].lpszName     = (char *)szToName;
        sprintf(szMsg, "SMTP:%s", szCurMail);
        rdRecipient[iNo].lpszAddress  = (char *)szMsg;
        rdRecipient[iNo].ulEIDSize    = 0;
        rdRecipient[iNo].lpEntryID    = NULL;
    }
 
    pfnSendMail(lHnd, NULL, &mapimsg, 0, 0);
    pfnLogoff(lHnd, 0, 0, 0);
    FreeLibrary(hDll);
}


[ Dieser Beitrag wurde am 09.06.2003 um 18:39 Uhr von ChrisK editiert. ]

_________________
==> http://www.ckleiner.de http://www.thelword-online.de
ChrisK
Mitglied

Benutzerprofil
Anmeldungsdatum: 24.06.2001
Beiträge: 482
Beitrag ChrisK Mitglied 22:24:00 09.06.2003   Titel:              Zitieren

habs.
rdRecipient[iNo].lpszAddress = (char *)szMsg;
hat immer auf die selbe speicheradresse gezeigt. (danke fatbull) *G*G*

_________________
==> http://www.ckleiner.de http://www.thelword-online.de
C++ Forum :: WinAPI ::  Email mit Dateien perWinAPI versenden??   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.