Anexando Automático no Outlook Express
Procurei em diversos fórums, mas ainda não concegui resolver meu problema.
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.
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
Curtidas 0
Respostas
Lehapan
09/04/2009
Caro bruno6652,
utilizo esta rotina para enviar e-mail pelo programa padrão de e-mail.
espero ter ajudado.
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
Bruno6652
09/04/2009
lehapan
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.
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
Bruno6652
09/04/2009
Deu certo agora amigo.
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.
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
Lehapan
09/04/2009
Caro bruno6652,
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.
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
Mcleod
09/04/2009
lehapan,
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!
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
Lehapan
09/04/2009
McLeod,
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.
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
Charlesjacome
09/04/2009
McLeod,
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.
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