Fórum Enviar E-Mail´s pelo Outlook Express #171512
25/07/2003
0
Prezados Companheiros,
:) Estou querendo saber como posso criar um e-mail pela minha aplicação e envia-lo utilizando o Outlook Express.
:roll: Usando o ShellExecute eu já sei, o problema com este é que não é possivel anexar arquivos.
:P Consegui uma dica de como mandar uzando o OutLook 2000, este envia até os anexos e é muito bom, so que nem todos computadores tem o Outlook 2000 instalado e configurado com uma conta de e-mail. Estou colocando no Fim deste e-mail o exemplo que consegui.
8) Eu gostaria de enviar um e-mail como o que consigo pelo Outlook 2000 so que uzando o Outlook Express pois este é mais utilizado do que o outro.
Agradeço a Atenção de todos que estão lendo.
Que Deus Abençoe a todos nós.
:wink: Não esqueci do exemplo esta aqui. Não me lembro mais onde o arrumei por isto não citarei o autor. :wink:
var
Form1: TForm1;
const
olMailItem = 0;
implementation
uses comobj, olectrls;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
Outlook: OleVariant;
vMailItem: variant;
begin
try
Outlook := GetActiveOleObject(´Outlook.Application´);
except
Outlook := CreateOleObject(´Outlook.Application´);
end;
vMailItem := Outlook.CreateItem(olMailItem);
vMailItem.Recipients.Add(´fulano@mundo.com.br´); // 1o Destin.
vMailItem.Recipients.Add(´ciclano@mundo.com.br´); // 2o Destin.
vMailItem.Subject := ´teste de email´; // assunto
vMailItem.Body := ´Isto é um teste´; // corpo
vMailItem.Attachments.Add(´C:\temp\arquivo.db´); // arq anexo
vMailItem.Send;
VarClear(Outlook);
end;
:) Estou querendo saber como posso criar um e-mail pela minha aplicação e envia-lo utilizando o Outlook Express.
:roll: Usando o ShellExecute eu já sei, o problema com este é que não é possivel anexar arquivos.
:P Consegui uma dica de como mandar uzando o OutLook 2000, este envia até os anexos e é muito bom, so que nem todos computadores tem o Outlook 2000 instalado e configurado com uma conta de e-mail. Estou colocando no Fim deste e-mail o exemplo que consegui.
8) Eu gostaria de enviar um e-mail como o que consigo pelo Outlook 2000 so que uzando o Outlook Express pois este é mais utilizado do que o outro.
Agradeço a Atenção de todos que estão lendo.
Que Deus Abençoe a todos nós.
:wink: Não esqueci do exemplo esta aqui. Não me lembro mais onde o arrumei por isto não citarei o autor. :wink:
var
Form1: TForm1;
const
olMailItem = 0;
implementation
uses comobj, olectrls;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
Outlook: OleVariant;
vMailItem: variant;
begin
try
Outlook := GetActiveOleObject(´Outlook.Application´);
except
Outlook := CreateOleObject(´Outlook.Application´);
end;
vMailItem := Outlook.CreateItem(olMailItem);
vMailItem.Recipients.Add(´fulano@mundo.com.br´); // 1o Destin.
vMailItem.Recipients.Add(´ciclano@mundo.com.br´); // 2o Destin.
vMailItem.Subject := ´teste de email´; // assunto
vMailItem.Body := ´Isto é um teste´; // corpo
vMailItem.Attachments.Add(´C:\temp\arquivo.db´); // arq anexo
vMailItem.Send;
VarClear(Outlook);
end;
Garoto Programa
Curtir tópico
+ 0
Responder
Posts
25/07/2003
Mikemurussi
Estou enviando a rotina que desenvolvi que manda e-mail usando qualquer versão do Outlook ou de qualquer outro programa de e-mail que estiver configurado como padrão. É possível mandar anexos.
Aí vai ela:
function EnviaMail(hWnd: Integer; const Destinatario, Assunto, Body, Anexo: PChar): WordBool; stdcall; export;
var
MapiMessage: TMapiMessage;
MError: Cardinal;
Sender: TMapiRecipDesc;
PRecip, Recipients: PMapiRecipDesc;
PFiles, Attachments: PMapiFileDesc;
begin
Result := False;
Application.Handle := hWnd;
MapiMessage.nRecipCount := 1;
GetMem(Recipients, MapiMessage.nRecipCount * sizeof(TMapiRecipDesc));
try
with MapiMessage
do begin
ulReserved := 0;
lpszSubject := Assunto;
lpszNoteText := PChar(Body);
lpszMessageType := nil;
lpszDateReceived := nil;
lpszConversationID := nil;
flFlags := 0;
Sender.ulReserved := 0;
Sender.ulRecipClass := MAPI_ORIG;
Sender.lpszName := PChar(´´);
Sender.lpszAddress := PChar(´´);
Sender.ulEIDSize := 0;
Sender.lpEntryID := nil;
lpOriginator := @Sender;
PRecip := Recipients;
PRecip^.ulReserved := 0;
PRecip^.ulRecipClass := MAPI_TO;
PRecip^.lpszName := Destinatario;
PRecip^.lpszAddress := StrNew(PChar(´SMTP:´ + Destinatario));
PRecip^.ulEIDSize := 0;
PRecip^.lpEntryID := nil;
Inc(PRecip);
lpRecips := Recipients;
nFileCount := 1;
GetMem(Attachments, nFileCount * sizeof(TMapiFileDesc));
PFiles := Attachments;
Attachments^.lpszPathName := Anexo;
Attachments^.lpszFileName := PChar(ExtractFileName(Anexo));
Attachments^.ulReserved := 0;
Attachments^.flFlags := 0;
Attachments^.nPosition := Cardinal(-1);
Attachments^.lpFileType := nil;
Inc(Attachments);
lpFiles := PFiles;
end;
MError := MapiSendMail(0, hWnd, MapiMessage, MAPI_DIALOG or MAPI_LOGON_UI or MAPI_NEW_SESSION, 0);
case MError of
MAPI_E_USER_ABORT: MessageDlg(´Operação abortada pelo usuário´, mtInformation, [mbOk], 0);
SUCCESS_SUCCESS: Result := True;
else MessageDlg(´Ocorreu um erro inesperado!´#13 +
´Código: ´ + IntToStr(MError), mtError, [mbOk], 0);
end;
finally
PRecip := Recipients;
StrDispose(PRecip^.lpszAddress);
Inc(PRecip);
FreeMem(Recipients, MapiMessage.nRecipCount * sizeof(TMapiRecipDesc));
if Assigned(PFiles) then FreeMem(PFiles, MapiMessage.nFileCount * sizeof(TMapiFileDesc));
Application.Handle := 0;
end;
end;
[b:5c7d270135]OBS[/b:5c7d270135]
Dependendo da versão do delphi que você utiliza, o arquivo Mapi.pas tem um bug. A correção está abaixo:
[i:5c7d270135](* O arquivo Mapi.pas, no Delphi 3 tem um pequeno problema com o Outlook 5 ou
posterior. Para corrigir, faça o seguinte:
- no arquivo MAPI.PAS da RTL, alterar a seguinte procedure ...*)[/i:5c7d270135]
procedure InitMapi;
var
OSVersionInfo: TOSVersionInfo;
hkWMS: HKEY;
MAPIValueSize: Longint;
MAPIValueBuf: array[0..8] of char;
rType: Longint;
begin
if not MAPIChecked then
begin
MAPIChecked := True;
MAPIModule := 0;
OSVersionInfo.dwOSVersionInfoSize := SizeOf(OSVersionInfo);
GetVersionEx(OSVersionInfo);
if (OSVersionInfo.dwMajorVersion > 3) or
((OSVersionInfo.dwMajorVersion = 3) and
(OSVersionInfo.dwMinorVersion > 51)) then
begin
MAPIValueSize := sizeof(MAPIValueBuf);
if RegOpenKeyEx(HKEY_LOCAL_MACHINE, ´SOFTWARE\Microsoft\Windows Messaging Subsystem´,
0, KEY_READ, hkWMS) <> ERROR_SUCCESS then Exit;
// if RegQueryValueEx(hkWMS, ´MAPI´, nil, @rType, @MAPIValueBuf, @MAPIValueSize) <> ERROR_SUCCESS then Exit;
RegCloseKey(hkWMS);
// if not ((MAPIValueBuf[0] = ´1´) and (MAPIValueBuf[1] = #0)) then Exit;
end
else if GetProfileInt(´Mail´, ´MAPI´, 0) = 0 then Exit;
MAPIModule := LoadLibrary(PChar(MAPIDLL));
end;
end;
[b:5c7d270135]Michael Murussi[/b:5c7d270135]
[url]www.murussi.com.br[/url]
Aí vai ela:
function EnviaMail(hWnd: Integer; const Destinatario, Assunto, Body, Anexo: PChar): WordBool; stdcall; export;
var
MapiMessage: TMapiMessage;
MError: Cardinal;
Sender: TMapiRecipDesc;
PRecip, Recipients: PMapiRecipDesc;
PFiles, Attachments: PMapiFileDesc;
begin
Result := False;
Application.Handle := hWnd;
MapiMessage.nRecipCount := 1;
GetMem(Recipients, MapiMessage.nRecipCount * sizeof(TMapiRecipDesc));
try
with MapiMessage
do begin
ulReserved := 0;
lpszSubject := Assunto;
lpszNoteText := PChar(Body);
lpszMessageType := nil;
lpszDateReceived := nil;
lpszConversationID := nil;
flFlags := 0;
Sender.ulReserved := 0;
Sender.ulRecipClass := MAPI_ORIG;
Sender.lpszName := PChar(´´);
Sender.lpszAddress := PChar(´´);
Sender.ulEIDSize := 0;
Sender.lpEntryID := nil;
lpOriginator := @Sender;
PRecip := Recipients;
PRecip^.ulReserved := 0;
PRecip^.ulRecipClass := MAPI_TO;
PRecip^.lpszName := Destinatario;
PRecip^.lpszAddress := StrNew(PChar(´SMTP:´ + Destinatario));
PRecip^.ulEIDSize := 0;
PRecip^.lpEntryID := nil;
Inc(PRecip);
lpRecips := Recipients;
nFileCount := 1;
GetMem(Attachments, nFileCount * sizeof(TMapiFileDesc));
PFiles := Attachments;
Attachments^.lpszPathName := Anexo;
Attachments^.lpszFileName := PChar(ExtractFileName(Anexo));
Attachments^.ulReserved := 0;
Attachments^.flFlags := 0;
Attachments^.nPosition := Cardinal(-1);
Attachments^.lpFileType := nil;
Inc(Attachments);
lpFiles := PFiles;
end;
MError := MapiSendMail(0, hWnd, MapiMessage, MAPI_DIALOG or MAPI_LOGON_UI or MAPI_NEW_SESSION, 0);
case MError of
MAPI_E_USER_ABORT: MessageDlg(´Operação abortada pelo usuário´, mtInformation, [mbOk], 0);
SUCCESS_SUCCESS: Result := True;
else MessageDlg(´Ocorreu um erro inesperado!´#13 +
´Código: ´ + IntToStr(MError), mtError, [mbOk], 0);
end;
finally
PRecip := Recipients;
StrDispose(PRecip^.lpszAddress);
Inc(PRecip);
FreeMem(Recipients, MapiMessage.nRecipCount * sizeof(TMapiRecipDesc));
if Assigned(PFiles) then FreeMem(PFiles, MapiMessage.nFileCount * sizeof(TMapiFileDesc));
Application.Handle := 0;
end;
end;
[b:5c7d270135]OBS[/b:5c7d270135]
Dependendo da versão do delphi que você utiliza, o arquivo Mapi.pas tem um bug. A correção está abaixo:
[i:5c7d270135](* O arquivo Mapi.pas, no Delphi 3 tem um pequeno problema com o Outlook 5 ou
posterior. Para corrigir, faça o seguinte:
- no arquivo MAPI.PAS da RTL, alterar a seguinte procedure ...*)[/i:5c7d270135]
procedure InitMapi;
var
OSVersionInfo: TOSVersionInfo;
hkWMS: HKEY;
MAPIValueSize: Longint;
MAPIValueBuf: array[0..8] of char;
rType: Longint;
begin
if not MAPIChecked then
begin
MAPIChecked := True;
MAPIModule := 0;
OSVersionInfo.dwOSVersionInfoSize := SizeOf(OSVersionInfo);
GetVersionEx(OSVersionInfo);
if (OSVersionInfo.dwMajorVersion > 3) or
((OSVersionInfo.dwMajorVersion = 3) and
(OSVersionInfo.dwMinorVersion > 51)) then
begin
MAPIValueSize := sizeof(MAPIValueBuf);
if RegOpenKeyEx(HKEY_LOCAL_MACHINE, ´SOFTWARE\Microsoft\Windows Messaging Subsystem´,
0, KEY_READ, hkWMS) <> ERROR_SUCCESS then Exit;
// if RegQueryValueEx(hkWMS, ´MAPI´, nil, @rType, @MAPIValueBuf, @MAPIValueSize) <> ERROR_SUCCESS then Exit;
RegCloseKey(hkWMS);
// if not ((MAPIValueBuf[0] = ´1´) and (MAPIValueBuf[1] = #0)) then Exit;
end
else if GetProfileInt(´Mail´, ´MAPI´, 0) = 0 then Exit;
MAPIModule := LoadLibrary(PChar(MAPIDLL));
end;
end;
[b:5c7d270135]Michael Murussi[/b:5c7d270135]
[url]www.murussi.com.br[/url]
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)