Fórum Anexando Automático no Outlook Express #369692

09/04/2009

0

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.


Bruno6652

Bruno6652

Responder

Posts

09/04/2009

Lehapan

Caro bruno6652,

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.


Responder

Gostei + 0

09/04/2009

Bruno6652

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.


Responder

Gostei + 0

09/04/2009

Bruno6652

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.


Responder

Gostei + 0

09/04/2009

Lehapan

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.


Responder

Gostei + 0

16/06/2009

Mcleod

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!


Responder

Gostei + 0

16/06/2009

Lehapan

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.


Responder

Gostei + 0

10/07/2009

Charlesjacome

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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar