Seite 1 von 2

Mail-Body mit Attachment erzeugen

Verfasst: 19.03.2018 13:47
von fabulouspaul
Hallo Gemeinde,

ich stehe vor folgender Aufgabe:
aus eine PB-Programm soll eine Mail mit Anhang (ZIP-Datei) versendet werden. Dabei ist der direkte Zugang zum Mailserver nicht möglich. Es wird gewünscht, dass der Anwender die erzeugte Nachricht auch noch ändern kann. Aus diesem Grund soll der Versand über seinen Mail-Client (Outlook 2010, o.ä.) erfolgen.

Prinzipiell einfach, da per Mailto-Protokoll (via RUNPROGRAM()) der Aufruf des Mail-Clients problemlos ist.
Allerdings kann man nicht so einfach einen Anhang dazu packen, weil ein Anhang (nachdem was ich gelesen bzw. verstanden habe) immer Bestandteil des Mail-Bodys ist.
Das Mailto-Protokoll kennt keinen Parameter "Attachment" o.ä. .

Mein Gedanke war jetzt, einen Mail-Body im PB-Programm zu generieren, der die ZIP-Datei schon enthält und dann das ganze per Mailto-Protokoll über den Mail-Client zu versenden.

Beim erzeugen einer E-Mail mit CREATEMAIL() & ADDMAILATTACHMENT() müsste doch auch so ein Mail-Body erzeugt werden... könnte man sich das zu nutze machen und ohne ein Mail zu versenden einfach nur den Mail-Body inkl. Attachment aus dem von PB generierten Mail heraus bekommen?

Hat jemand schon mal sowas versucht oder einen anderen guten Tipp für mich?

Re: Mail-Body mit Attachment erzeugen

Verfasst: 19.03.2018 14:45
von NicTheQuick
Aus Purebasic direkt geht das nicht.
Ich habe aber einen C#-Code dafür gefunden. Vielleicht kann man daraus dann eine Bibliothek schnüren und in Purebasic einbinden: C# Code snippet to send an Email with attachment from Outlook, Yahoo, HotMail, AOL and Gmail

Re: Mail-Body mit Attachment erzeugen

Verfasst: 19.03.2018 14:46
von Derren
Für Outlook gibt es VBS-Scripte. Die verwende ich aktuell. Ist einfacher als mit PB. PB kann immernoch das Script in "temp" erstellen und die benötigten Parameter anpassen, bevor es aufgerufen wird.

Ansonsten guck mal ob du irgendwie herausfindest, wie "per mail senden" im Kontextmenü funktioniert. Ich gehe davon aus, dass jeder E-Mail Client einfach eine Datei als Parameter übergeben bekommt, z.B. myMail.exe -attach "file.ext"

Re: Mail-Body mit Attachment erzeugen

Verfasst: 20.03.2018 12:51
von dige
Geht auch mit dem COMate. -> http://www.purebasic.fr/english/viewtop ... 13&t=37299

Code: Alles auswählen

XIncludeFile "C:\Programme\PureBasic\Include\COMatePlus.pbi"

Define.COMateObject  OutlookObject.COMateObject, olMsg.COMateObject

sub.s="*** Attachment ***"
standard.s= "Hello"
tomail.s="leodh@mail.at"
add.s=#PB_Compiler_Home+"PureBasic.chm"

OutlookObject = COMate_CreateObject("Outlook.Application")
If OutlookObject

  olMsg = OutlookObject\GetObjectProperty("CreateItem(0)")
   If olMsg
    olMsg\SetProperty("to='"+tomail+"'")
    olMsg\SetProperty("Subject='"+sub+"'")
    olMsg\SetProperty("Body='"+standard+"'")
   
   If FileSize(add)<>-1
    olMsg\Invoke("Attachments\Add('"+add+"')")
   EndIf
   
    olMsg\Invoke("Display")
    olMsg\Release()
    Else
      MessageRequester("Sorry", COMate_GetLastErrorDescription())
  EndIf
OutlookObject\Release() 
Else
  MessageRequester("Sorry - CreateObject", COMate_GetLastErrorDescription())
EndIf

Re: Mail-Body mit Attachment erzeugen

Verfasst: 21.03.2018 16:56
von fabulouspaul
Sehr chic, Dige. Danke! :praise:

Ich hatte zwischenzeitig ohnehin schon Abstand von Mailto-Protokoll genommen und Outlook per Kommandozeile mit entsprechenden Parametern dazu überredet auch einen Anhang mitzunehmen, aber die Lösung mit COMate ist noch geschmeidiger!

Re: Mail-Body mit Attachment erzeugen

Verfasst: 21.03.2018 21:08
von mk-soft
Und was ist, wenn man kein Outlook hat?

Re: Mail-Body mit Attachment erzeugen

Verfasst: 22.03.2018 11:49
von fabulouspaul
mk-soft hat geschrieben:Und was ist, wenn man kein Outlook hat?
Ist in aktuellen Fall kein Thema, da nur dieser Mail-Client zur Verfügung steht.

Aber tatsächlich hast Du Recht, bei Verwendung von unterschiedlichen Mail-Clients wäre meine bisherige Lösung mit ihrem konfigurierbaren Aufruf über die Kommandozeile (über eine eine Preference-Datei) flexibler.

Re: Mail-Body mit Attachment erzeugen

Verfasst: 23.03.2018 11:57
von Derren
Thunderbird: http://kb.mozillazine.org/Command_line_ ... derbird%29

thunderbird -compose "to='john@example.com,kathy@example.com',cc='britney@example.com',subject='dinner',body='How about dinner tonight?',attachment='C:\temp\info.doc,C:\temp\food.doc'"

Über Registry oder vlt. Win-Api lässt sich der Standard-Mail Client sicher herausfinden. Dementsprechend kann dann der jeweilige Befehl gestartet werden.

Und wie gesagt, irgendwoher muss Windows ja auch wissen, wie man Dateien als Mail verschickt. Meist unabhängig vom installierten Programm. Das Mail-Programm muss diese Funktion also irgendwo registrieren. Vielleicht findet man dazu Infos auf MSDN.

Re: Mail-Body mit Attachment erzeugen

Verfasst: 23.03.2018 13:29
von fabulouspaul
Ich denke wenn man es universell (unter Windows) haben will, ist das Stichwort für den Mailversand MAPI.
So wie ich es verstehe ist diese unabhängig vom Mail-Client und wird von den "üblichen Verdächtigen" Mail-Clients unterstützt.

Re: Mail-Body mit Attachment erzeugen

Verfasst: 12.04.2022 10:02
von Fordey_ra
Das Programm funktioniert super auch heute noch nur mit einer Einschränkung.
Wenn Outlook nicht vorher gestartet wurde stürzt es ab.
Wie kann ich das verhindern ?
Wenn ich das Programm vorher starte mit RunProgram starte ich es ja eventuell mehrfach.

Ich bräuchte da vorher eine Abfrage ob Outlook bereits gestartet ist.

Wenn Nein könnte ich das Programm ja öffnen.
Wenn Ja kann das Programm so durchlaufen.