26. november 2002 - 09:58
#2
Du kan f.eks. gøre det ved at bede Windows om at lave en 'mailto:', som vil få dit default mail program til at starte op. (Analogt til hvad de fleste hjemmesider gør.)
I BCB gøres det sådan her:
void __fastcall TfrmMESSAGE::btnOkClick(TObject *Sender)
{
HINSTANCE shellExe;
AnsiString tmpStr, cgiStr;
char buffer[257];
int pixelWidth, charWidth;
// Start default e-mail application with specified e-mail address,
// subject "Driver instructions for <vehicle>", and "Hi <driver>"
// + message as body text.
tmpStr = "mailto:"
+ edtTO->Text
+ "?subject="
+ edtSUBJECT->Text
+ "&body="
+ memoBODY->Lines->Text;
// Create new string, where all blanks have been converted to %xx where
// xx is the hexadecimal value of the character.
cgiStr = MakeCGIstring(tmpStr);
shellExe = ShellExecute(Application->Handle, "open", cgiStr.c_str(),
/*Parms*/ NULL, NULL, SW_SHOWNORMAL);
if ((int)shellExe <= 32L)
Application->MessageBox("E-mail program could NOT be automatically started - Check that a default mail "
"application has been defined, or start it manually. Then try again.",
"Error starting e-mail program",
MB_ICONERROR | MB_OK);
} // btnOK
hvor MakeCGIstring() metoden ser sådan her ud:
AnsiString __fastcall MakeCGIstring(AnsiString S)
{
AnsiString tmpStr;
char tmpHex[5];
int C;
for (int idx = 1; idx <= S.Length(); idx++)
{
C = (unsigned char)S[idx];
if (C >= 'A' && C <= 'Z'
|| C >= 'a' && C <= 'z'
|| C > ' ' && C <= '@')
tmpStr += S[idx];
else
{
sprintf(tmpHex, "%%%02x", C);
tmpStr += tmpHex;
};
}; // Entire string.
return tmpStr;
} // MakeCGIstring.
19. februar 2003 - 18:25
#5
Det har du jo sådan set ret i, og det er ikke POP3 men SMTP den hedder.
Arne ved du hvordan man trækker et forkert svar tilbage?
19. februar 2003 - 18:27
#6
Det ved jeg ikke engang om man kan.
Men hvis der står en forklaring længere nede, så finde eventuelle
senere læsere vel også ud af det.