Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Enviar email desde la cuenta de correo electrónico predeterminada de OUTLOOK (https://www.clubdelphi.com/foros/showthread.php?t=96097)

APO 09-02-2023 12:29:08

Enviar email desde la cuenta de correo electrónico predeterminada de OUTLOOK
 
Buenos días,
Desde mi aplicación envío emails utilizando el programa de correos de Outlook. El problema, es que si el usuario tiene varias cuentas de email, no soy capaz de enviarlo desde la cuenta de correo que tenga predeterminada el usuario en ese momento. Y aunque modifique la cuenta de correo predeterminada, el programa siempre envía los emails desde la misma cuenta.

¿Sabéis cómo puedo enviar los emails desde la cuenta de correo predeterminada que tenga el Outlook?
¿O alguna manera de saber qué cuenta predeterminada tiene especificada el Outlook, no sé si se guarda en el registro o en algún otro sitio? Porque si la supiera podría asignárselo de esta manera:

Código Delphi [-]
MailItem.SendUsingAccount:=Outlook.Session.Accounts.Item("CuentaOutlookPredetminada");

Muchas gracias.

Casimiro Notevi 09-02-2023 13:26:38

Prueba algo así:

Código Delphi [-]
uses
  ComObj, ActiveX, Variants;

procedure GetDefaultAccount;
var
  OutlookApp: OleVariant;
  Accounts: OleVariant;
  Account: OleVariant;
  i: Integer;
begin
  try
    OutlookApp := CreateOleObject('Outlook.Application');
    Accounts := OutlookApp.Session.Accounts;

    for i := 1 to Accounts.Count do
    begin
      Account := Accounts.Item(i);
      if Account.DisplayName = OutlookApp.Session.DefaultStore.DisplayName then
      begin
        ShowMessage('La cuenta predeterminada es: ' + Account.DisplayName);
        Break;
      end;
    end;
  except
    on E:Exception do
      ShowMessage(E.Message);
  end;
end;

APO 09-02-2023 15:52:49

Gracias por responder. Lo he probado, pero me lo sigue mandando desde la misma cuenta de siempre, ignorando la cuenta predeterminada de Outlook :confused:

Casimiro Notevi 09-02-2023 16:10:06

Cita:

Empezado por APO (Mensaje 550292)
Gracias por responder. Lo he probado, pero me lo sigue mandando desde la misma cuenta de siempre, ignorando la cuenta predeterminada de Outlook :confused:

¿Pero esa función te devuelve la predeterminada?

APO 09-02-2023 17:16:53

Cita:

Empezado por Casimiro Notevi (Mensaje 550293)
¿Pero esa función te devuelve la predeterminada?

Me devuelve una cuenta, pero no es la predeterminada de Outlook.

Casimiro Notevi 09-02-2023 17:27:34

Cita:

Empezado por APO (Mensaje 550294)
Me devuelve una cuenta, pero no es la predeterminada de Outlook.

Pregunta tonta: ¿seguro? :confused:

APO 09-02-2023 17:30:10

Cita:

Empezado por Casimiro Notevi (Mensaje 550295)
Pregunta tonta: ¿seguro? :confused:

Sí sí. Tengo 2 cuentas configuradas en Outlook, y aunque cambie la predeterminada a una u otra, siempre me devuelve la misma. Intentaré aislar tu trozo de código, a ver si hay algo que hago, que haga que no cargue bien la predeterminada… no se

Garada 09-02-2023 20:29:52

Tuve ese problema hace tiempo y si no recuerdo mal, la solución es crear el objeto MailItem desde la Bandeja de entrada de la cuenta predeterminada.

Te dejo un extracto quitando comprobaciones de errores u objetos nulos.

Código Delphi [-]
var
  OL: TOutlookApplication;
  Mail: MailItem;
  NS: NameSpace;
  OB: MAPIFolder;
begin
...

  OL := TOutlookApplication.Create(Application);
  OL.ConnectKind := ckRunningOrNew;
  OL.Connect;

  NS := OL.GetNamespace('MAPI');
  OB := NS.GetDefaultFolder(olFolderInbox);

//    showmessage(NS.CurrentUser.Name); //mail principal

  Mail := (OB.Items.Add(olMailItem) as MailItem);
...

Casimiro Notevi 10-02-2023 14:17:12

¿Lo has conseguido? :)

APO 10-02-2023 14:21:56

Cita:

Empezado por Casimiro Notevi (Mensaje 550317)
¿Lo has conseguido? :)

No lo he conseguido, pero he encontrado una solución intermedia. Y es que el usuario especifique una cuenta por defecto por dónde quiere enviar las facturas. De esta manera, aunque tenga otra cuenta de Outlook en ese momento, la enviará desde la que haya especificado.

Y la asignó de la siguiente manera:

Código Delphi [-]
MailItem.SendUsingAccount:=Outlook.Session.Accounts.Item("CuentaOutlookPredeterminadaPorUsuario");

Gracias de todas formas!


La franja horaria es GMT +2. Ahora son las 06:43:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi