Chamar o programa de e-mail padrão

04/12/2003

4

boa tarde,

como sou leigo no assunto, gostaria de saber se é possivel fazer com que um botao chame o programa de email padrao..
ex: poderia chamar ou o outlook,incredmail,akmail,eudora.... ele chamaria o programa padrao que esta definido no windows...

grato


Fernando Cunha


Responder

Posts

04/12/2003

Rafael Mattos

Procedure DialogEmail(cText : String);
var
pEMail : PChar;
begin
{$ifdef win32}
pEMail:=PChar(´mailto:´+cText);
ShellExecute(HIDE_WINDOW, ´open´, pEMail, nil, nil, SW_SHOW);
{$endif}
end;


Responder

04/12/2003

Deus

Bem, não entendi se você quer [i:a2d84a650a]abrir o programa[/i:a2d84a650a] ou se você quer [i:a2d84a650a]mandar um e-mail pelo programa[/i:a2d84a650a], então vou mandar uma função que executa o mailer padrão, já que funções que mandam e-mail já há várias por aqui. ;) A chave da questão está no registro

[HKEY_CLASSES_ROOT\mailto\shell\open\command]


Que guarda o executável do mail padrão. Logo, é só buscar o valor dessa chave e executá-la, como na função abaixo:

procedure ChamaMailer;
const
  Mailer = ´\mailto\shell\open\command´;
var
   stTmp: String;
   rgReg: TRegistry;
begin
  try
    rgReg := TRegistry.Create;
    rgReg.RootKey := HKEY_CLASSES_ROOT;
    if rgReg.OpenKeyReadOnly(Mailer) then
    begin
      stTmp := rgReg.ReadString(´´);
      while (Pos(´\´, stTmp) > 0) do
        Delete(stTmp, 1, Pos(´\´, stTmp));

      if (Pos(´"´, stTmp) > 0) then
        Delete(stTmp, Pos(´"´, stTmp), Length(stTmp) - Pos(´"´, stTmp) + 1);

      ShellExecute(Handle, ´´, PChar(stTmp), ´´, PChar(ExtractFilePath(Application.ExeName)), SW_SHOW);
    end;
    rgReg.CloseKey;
  finally
    rgReg.Free;
  end;
end;


Ao chamar este procedimento, o programa mailer padrão será aberto. :) O que eu fiz foi pegar o valor da chave padrão e ´limpá-la´, deixando apenas o nome do executável. ;)

Espero que tenha ajudado! Abraços, dEUS.


Responder

04/12/2003

Fcunha

obrigado pela força so que no primeiro caso ele abre direto pra manda mensagem e nao seria isso seria abrir o programa so... como se fosse um atalho ... ( malz nao soube explicar rs.)

no segundo caso ele abre o programa q esta padrao no windows... bele abriu o outlook express beleza... so q se voce instala pegasus ou incredmail eles colocam nomes e diretorios diferentes la no registro ai ele nao abre...

veja o exemplo
o incredmail coloca a seguinte linha no registro:

C:\ARQUIV~1\INCRED~1\bin\IncMail.exe /c /n /mailto:"¬1"


e o oultlook express coloca a seguinte linha:
"¬ProgramFiles¬\Outlook Express\msimn.exe" /mailurl:¬1


ai pra abrir o outlook ele fica beleza, agora pros outros programas q jogam no diretorio arquivos de programas, ou c:\eudora .... ele nao pega


valeu pelo toque se conseguir ver o pq nao abre e talz... mas ja valeu pela ajuda... vo tenta algo aqui tbm


Responder

05/12/2003

Deus

Rapaz... se o problema com meu código é apenas esse, então a solução é instantânea. :) Basta apenas você trocar a parte onde tem

      if (Pos(´"´, stTmp) > 0) then 
        Delete(stTmp, Pos(´"´, stTmp), Length(stTmp) - Pos(´"´, stTmp) + 1); 


para

      if (Pos(´.exe´, stTmp) > 0) then
        Delete(stTmp, Pos(´.exe´, stTmp) + 4, Length(stTmp));


E aí então você vai ter um esquema plenamente operacional. ;) Mude isso e veja se não vai funcionar. ;)

Abraços, dEUS.


Responder

05/12/2003

Fcunha

ehehhe valeu deu certinho :D
quem manda eu ser novato :D
um dia eu aprendo...

Abraços


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira