Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi sOutlook 2010 - Mail Betreff auslesen und Anhang speichern (https://www.delphipraxis.net/165483-soutlook-2010-mail-betreff-auslesen-und-anhang-speichern.html)

medirar 2. Jan 2012 16:03

sOutlook 2010 - Mail Betreff auslesen und Anhang speichern
 
Hallo!

Mal wieder Outlook! Jep Ich weiß!:lol: Leider habe ich im Forum nichts passendes zu finden können.
Hat jemand von Euch eine Idee oder einen Tipp zu folgendem Problem.....:

Ich möchte gerne ein Programm schreiben der Outlook auf eingehende Mails überwacht und dabei den enstprechenden Betreff beachtet. Wenn der Betreff z.B. : "Spesen" beinhaltet und sich in der Mail noch ein Anhang mit dem Suffix *.docx befindet, dann soll das Programm den Anhang in ein Unterordner speichern wo sich das Programm befindet! Muss man das mit MAPI machen? Wozu ist das eig. gut?

Ein Beispiel habe ich unter http://www.delphipraxis.net/71080-ou...speichern.html gefunden das Speichert sämtlichen Inhalt und funktioniert bei mir aber leider nicht!

Ich hoffe Ihr könnt mir helfen:thumb:

Dankeschön

Bernhard Geyer 2. Jan 2012 16:08

AW: sOutlook 2010 - Mail Betreff auslesen und Anhang speichern
 
Ich würde sowas eher per Outlook-Regel versuchen zu lösen.

medirar 2. Jan 2012 16:12

AW: sOutlook 2010 - Mail Betreff auslesen und Anhang speichern
 
Danke für Deine Antwort!

Ich habe mal irgendwann ein VBA im Netz gefunden der das macht.
Mit Delphi wollte ich das Dokument aber weiterbearbeiten.

medirar 2. Jan 2012 16:56

AW: sOutlook 2010 - Mail Betreff auslesen und Anhang speichern
 
Ich glaub ein kleinen Ansatz hab ich schon... keine Ahnung ob das funzt! Heute Abend mal probieren...

Delphi-Quellcode:
var Outlook: OLEVariant;
     MailItem: Variant;
begin
  Outlook:=GetActiveOleObject('Outlook.Application');
  MailItem := Outlook.MailItemXXX(olMailItem); //Befehl vergessen..... ;-)
  If (MailItem.Subject = 'Spesen') and (MailItem.Attachment = '*.docx') then
  Attachments.SaveAsFile(......;
end;

medirar 3. Jan 2012 22:55

AW: sOutlook 2010 - Mail Betreff auslesen und Anhang speichern
 
Hallo! Das werk ist nun vollbracht! Zur Hilfe kam mir dieser Code.

Kann man mit MAPI auch auf "Benutzerdefinierte Ordner" zugreifen?

http://www.swissdelphicenter.ch/de/showcode.php?id=383

Delphi-Quellcode:
function ManageAttachments(SendersName, AttachmentPath: string;
  MailDelete: Boolean): Boolean;
var
  oApp: Variant;
  oNs: Variant;
  oFolder: Variant;
  oMsg: Variant;
  AtC: Variant;
  AttFilename: Variant;
  FileName: string;
  CheckSender: string;
  Counter: integer;
  MailCounter: integer;
begin
  try
    oApp := CreateOLEObject('outlook.application');
    try
      oNs        := oApp.GetNamespace('MAPI');
      ofolder    := oNS.GetDefaultFolder(6); // FolderTypeEnum (olFolderInbox)
      MailCounter := 1;
      // If there is any email in the Inbox
      if ofolder.Items.Count > 0 then
      begin
        repeat
          // Get the first Email
          oMsg := ofolder.Items(MailCounter);
          // Check the name or Email
          //   Use CheckSender := oMsg.subject to search on Subject;
          CheckSender := oMsg.sendername;
          if CheckSender = SendersName then
          //  Remove this line to backup all your attachments.
          begin
            // Check how many attachments
            atc := oMsg.Attachments.Count;
            if atc > 0 then
            begin
              // Get all the attachments and save them
              for Counter := 1 to atc do
              begin
                AttFilename := oMsg.Attachments.item(Counter).FileName;
                //filename := IncludeTrailingBackslash(AttachmentPath)+AttFilename; {Use this line for D5)}
                FileName := AttachmentPath + '\' + AttFilename;
                oMsg.Attachments.Item(Counter).SaveAsFile(FileName);
              end;
            end;
            if MailDelete then
            begin
              oMsg.Delete;
              // There's 1 Email less, so MailCounter - 1
              Dec(MailCounter);
            end;
          end;
          // Get the next Email
          Inc(MailCounter);
          // Do until there is no more Email to check
        until MailCounter > ofolder.Items.Count;
      end;
    finally
      oApp.quit;
    end;
  except
    Result := False;
    Exit;
  end;
  Result := True;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  // ManageAttachments(Email or name, Backup directory, MailDelete yes or no)
  ManageAttachments('info@cleys.com', 'F:\test', False);
end;
:-D

medirar 3. Jan 2012 22:58

AW: sOutlook 2010 - Mail Betreff auslesen und Anhang speichern
 
....Zooooom.....

Kann man auch Benutzerdefinierte Ordner wählen, oder kann man nur auf die Outlook spezifischen ordner zugreifen?


Outlook spezifisch:

Delphi-Quellcode:
olFolderDeletedItems = $00000003;
olFolderOutbox = $00000004;
olFolderSentMail = $00000005;
olFolderInbox = $00000006;
olFolderCalendar = $00000009;
olFolderContacts = $0000000A;
olFolderJournal = $0000000B;
olFolderNotes = $0000000C;
olFolderTasks = $0000000D;
olFolderDrafts = $00000010;
:-D

sx2008 3. Jan 2012 23:20

AW: sOutlook 2010 - Mail Betreff auslesen und Anhang speichern
 
kleine Anmerkung - es sauberer OleVariant zu verwenden.
Delphi-Quellcode:
var
  oApp: OleVariant;
  oNs: OleVariant; ...

medirar 4. Jan 2012 10:37

AW: sOutlook 2010 - Mail Betreff auslesen und Anhang speichern
 
Danke für den Tipp!


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz