Fórum Anexando Automático no Outlook Express #369692
09/04/2009
0
Um cliente quer que eu anexe automaticamente um arquivo no Outlook Express usando o Delphi.
Alguem já fez algo parecido? Isso é possivel?
Agradeço demais a quem puder ajudar, to quebrando a cabeça a nada.
Bruno6652
Curtir tópico
+ 0Posts
09/04/2009
Lehapan
utilizo esta rotina para enviar e-mail pelo programa padrão de e-mail.
function EnviarEmail(Endereco: string; Assunto: string = ´´; Texto: string = ´´;
stlAnexo: TStringList = nil): Boolean;
type
TAttachAccessArray = array [0..0] of TMapiFileDesc;
PAttachAccessArray = ^TAttachAccessArray;
var
MapiMessage: TMapiMessage;
MError: Cardinal;
Sender: TMapiRecipDesc;
PRecip, Recipients: PMapiRecipDesc;
Attachments: PAttachAccessArray;
x: integer;
begin
Result := False;
if Trim( Endereco ) = ´´ then
begin
ShowMessage(´Endereço de e-mail inválido.´);
Exit;
end
;
MapiMessage.nRecipCount := 1;
GetMem( Recipients, MapiMessage.nRecipCount * Sizeof(TMapiRecipDesc) );
try
with MapiMessage do
begin
{ Assunto e Texto }
ulReserved := 0;
lpszSubject := PChar( Assunto );
lpszNoteText := PChar( Texto );
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;
{ Endereço }
PRecip := Recipients;
PRecip^.ulReserved := 0;
PRecip^.ulRecipClass := MAPI_TO;
PRecip^.lpszName := PChar( Endereco );
PRecip^.lpszAddress := StrNew( PChar(´SMTP:´ + Endereco ) );
PRecip^.ulEIDSize := 0;
PRecip^.lpEntryID := nil;
Inc( PRecip );
lpRecips := Recipients;
{ Anexa os arquivos }
{ Cria o StringList vazio se for nil }
if stlAnexo = nil then
begin
stlAnexo := TStringList.Create;
stlAnexo.Clear;
end
;
{ Deleta do stlAnexo os arquivos que não existem }
x := 0;
while x <= (stlAnexo.Count - 1) do
begin
if not FileExists( stlAnexo.Strings[x] ) then
stlAnexo.Delete(x)
else
inc(x)
;
end;
{ Anexa os arquivos }
Attachments := nil;
if stlAnexo.Count > 0 then
begin
GetMem(Attachments, SizeOf(TMapiFileDesc) * stlAnexo.Count);
for x := 0 to stlAnexo.Count - 1 do
begin
Attachments[x].ulReserved := 0;
Attachments[x].flFlags := 0;
Attachments[x].nPosition := ULONG($FFFFFFFF);
Attachments[x].lpszPathName := StrNew( PChar(stlAnexo.Strings[x]) );
Attachments[x].lpszFileName :=
StrNew( PChar( ExtractFileName(stlAnexo.Strings[x]) ) );
Attachments[x].lpFileType := nil;
end;
end
;
nFileCount := stlAnexo.Count;
lpFiles := @Attachments^;
end;
{ Enviando o e-mail }
MError :=
MapiSendMail( 0, Application.Handle, MapiMessage,
MAPI_DIALOG or MAPI_LOGON_UI or MAPI_NEW_SESSION, 0 );
case MError of
MAPI_E_USER_ABORT: ;
{ Mostra mensagem que o envio do e-mail foi abortado pelo usuário.
Portanto, não será mostrado nada }
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) );
for x := 0 to stlAnexo.Count - 1 do
begin
StrDispose( Attachments[x].lpszPathName );
StrDispose( Attachments[x].lpszFileName );
end;
end;
end;
espero ter ajudado.
Gostei + 0
09/04/2009
Bruno6652
Obrigado pela ajuda, mas não deu certo. Essa função funciona apenas com o Microsoft Outlook e não o Outllok Express.
Quando rodo a função ele dá a mensagem de que não tem nenhum perfil criado.
Gostei + 0
09/04/2009
Bruno6652
Eu estava com o Thunderbird como aplicativo padrao, achei que quando usasse a função nao iria ter problema, que ele fosse abrir o programa da Microsoft.
Valeu mesmo.
Gostei + 0
09/04/2009
Lehapan
para fazer funcionar o Outllok Express, você deve ter um perfil criado, caso contrário ele não funciona. Este é o padrão do Outllok Express e não da rotina.
Outra coisa, esta rotina sempre vai abrir o aplicativo definido copmo padrão.
qualquer coisa é só perguntar.
Gostei + 0
16/06/2009
Mcleod
Agradeço pelo código, está funcionando bem. Mas, estou tendo um pequeno problema. Tenho configurados, no Microsoft Outlook, assinatura e tema para as minhas mensagens. Quando crio uma nova mensagem a partir do próprio Outlook, ele os carrega automaticamente. Porém, quando meu sistema utiliza essa função para chamar o Outlook, a mensagem vem em branco, sem a formatação. Existe algum meio de contornar esse problema?
Obrigado!
Gostei + 0
16/06/2009
Lehapan
Não olhei como fazer, pois nunca precisei, e também não sei se tem como carregar estes dados, pois como já disse anteriormente, esta rotina serve para enviar e-mails pelo programa padrão de e-mails, e estas características que você citou são específicas de um programa.
Estou meio sem tempo agora, mas quando eu tiver um tempo dou uma pesquisada.
Desculpa não poder te ajudar.
Gostei + 0
10/07/2009
Charlesjacome
uma dica é nao colocar texto no e-mail:
[b:0803bfc95f]lpszNoteText := nil;[/b:0803bfc95f]
E anexar (tem de ser o primeiro anexo) um arquivo HTML como sendo o corpo do seu e-mail, onde voce pode colocar tudo que for necessario.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)