Mail senden --> Adresse, Anhang und Text bereits ausgeben
-
Hallo zusammen,
bin noch recht neu auf dem Gebiet und benötige Eure hilfe.
Ich möchte über eine DLL eine Mail senden.
In der Mail soll die jeweilige E-Mail Adresse, ein Anhang sowie die Betreffzeile vorbelegt werden. Es soll somit nur noch der Text eingegeben werden können bevor die Mail von dem jeweiligen User verschickt wird.
Über die Forum- und Googlesuche habe ich folgende Anhaltspunkte erhalten:
mailto, ShellExecute, MAPI, SimpleMAPI usw.Was wäre nun für mein Programm nötig?
Ich habe versucht über die Funktionen "mailto und ShellExecute" zumindest mal die Adresse und den Betreff mir anzeigen zu lassen! Aber das blieb leider ohne Erfolg!
Kann mir hier jemand weiter helfen!

Nina
-
Die FAQ lebt:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-97725.htmlZum Anhang wüsste ich jetzt leider auch grad nix auswendig. Gibt es da auch ein "Code" für das MailTo? Müsste man mal im Inet nachschauen ^^
[Edit]
MailTo Erklärungen:http://de.selfhtml.org/navigation/suche/index.htm?Suchanfrage=mailto
[/Edit]Grüssli
-
Vielen Dank für die Hilfe würde ohne Attachment soweit funktionieren.
Im Internet hab ich was gefunden das mit MAPI gelöst wurde.
Nun habe ich versucht das in meinem Programm umzusetzen, bekomme allerdings immer folgenden Fehler:
Syntaxfehler: '('
Was mach ich falsch? Hier der Code:
CSendFileTo sendTo; sendTo.(m_hWnd, _T("C://tmp//Test.txt"), _T("Anhang mit ausgeben!"));Danke!
-
Du mußt auch angeben, welcher Methode des Objekts 'sendto' du verwenden willst:
sendTo.send(m_hWnd, _T("C://tmp//Test.txt"),_T("Anhang mit ausgeben!"));(wie die "richtige" Methode heißt, mußt du selber herausfinden - ich kenne die CSenFileTo-Klasse nicht)
-
Programm lässt sich jetzt zwar compilieren, allerdings wird das Senden an Fenster mit dem Attachment nicht angezeigt!
Kennt sich jemand damit aus?
#ifndef __SENDFILETO_H__ #define __SENDFILETO_H__ #include "mapi.h" #include "shlwapi.h" class CSendFileTo { public: bool SendMail(HWND hWndParent, CString const &strAttachmentFileName, CString const &strSubject=_T("")) { // The attachment must exist as a file on the system // or MAPISendMail will fail, so...... if (strAttachmentFileName.IsEmpty()) return false; // You may want to remove this check, but if a valid // HWND is passed in, the mail dialog will be made // modal to it's parent. if (!hWndParent || !::IsWindow(hWndParent)) return false; HINSTANCE hMAPI = ::LoadLibraryA(_T("MAPI32.DLL")); if (!hMAPI) return false; // Grab the exported entry point for the MAPISendMail function ULONG (PASCAL *SendMail)(ULONG, ULONG_PTR, MapiMessage*, FLAGS, ULONG); (FARPROC&)SendMail = GetProcAddress(hMAPI, _T("MAPISendMail")); if (!SendMail) return false; TCHAR szFileName[_MAX_PATH]; TCHAR szPath[_MAX_PATH]; TCHAR szSubject[_MAX_PATH]; ::StrCpy(szFileName, strAttachmentFileName.GetString()); ::StrCpy(szPath, strAttachmentFileName.GetString()); ::StrCpy(szSubject, strSubject.GetString()); MapiFileDesc fileDesc; ::ZeroMemory(&fileDesc, sizeof(fileDesc)); fileDesc.nPosition = (ULONG)-1; fileDesc.lpszPathName = szPath; fileDesc.lpszFileName = szFileName; MapiMessage message; ::ZeroMemory(&message, sizeof(message)); message.lpszSubject = szSubject; message.nFileCount = 1; message.lpFiles = &fileDesc; // Ok to send int nError = SendMail(0, (ULONG_PTR)hWndParent, &message, MAPI_LOGON_UI|MAPI_DIALOG, 0); if (nError != SUCCESS_SUCCESS && nError != MAPI_USER_ABORT && nError != MAPI_E_LOGIN_FAILURE) return false; return true; } }; #endifOder hat jemand anderes einen besseren Link zu einer Seite? Ich hab nichts gefunden!
-
Momentan mache ich folgenden Aufruf ohne Anhang:
ShellExecute(NULL,"open","mailto:info@web.de?subject=Testmail",NULL,NULL,NULL);Ist die Email Adresse nur fix vergebar oder könnte man diese auch über eine Variable steuern? Das Programm sollen nämlich mehrer User nutzen und je nach User sollte dann die dem entsprechende Email Adresse angezeigt werden.
Muss das auch über MAPI gemacht werden?
Danke!
-
Zu CSendFileTo kann ich zu wenig sagen. Müsste ich selber in einem eigenen Programm testen und dafür fehlt mir derzeit die Zeit.
Zu deiner zweiten Frage/Problem. Ja man kann das auch über eine Variable machen. Also z.b.
CString strEMailAdress; // Sagen wir hier drin ist die variable E-Mail Adresse CString strMailTo; strMailTo.Format(_T("mailto:%s?subject=Testmail"), strEMailAdress); ShellExecute(NULL, _T("open"), strMailTo, NULL, NULL, NULL);Es gibt übrigens zu mailto auch noch ein attach. Das wird allerdings nicht von allen E-Mail Programmen unterstützt und richtig geparst.
mailto:info@web.de?subject=Testmail?attach="C:\TestFile.txt"Grüssli