Mail-Body mit Attachment erzeugen

Für allgemeine Fragen zur Programmierung mit PureBasic.
fabulouspaul
Beiträge: 120
Registriert: 01.04.2011 21:59

Mail-Body mit Attachment erzeugen

Beitrag 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?
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Mail-Body mit Attachment erzeugen

Beitrag 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
Bild
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: Mail-Body mit Attachment erzeugen

Beitrag 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"
Signatur und so
Benutzeravatar
dige
Beiträge: 1182
Registriert: 08.09.2004 08:53

Re: Mail-Body mit Attachment erzeugen

Beitrag 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
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."
fabulouspaul
Beiträge: 120
Registriert: 01.04.2011 21:59

Re: Mail-Body mit Attachment erzeugen

Beitrag 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!
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Mail-Body mit Attachment erzeugen

Beitrag von mk-soft »

Und was ist, wenn man kein Outlook hat?
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
fabulouspaul
Beiträge: 120
Registriert: 01.04.2011 21:59

Re: Mail-Body mit Attachment erzeugen

Beitrag 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.
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: Mail-Body mit Attachment erzeugen

Beitrag 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.
Signatur und so
fabulouspaul
Beiträge: 120
Registriert: 01.04.2011 21:59

Re: Mail-Body mit Attachment erzeugen

Beitrag 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.
Fordey_ra
Beiträge: 71
Registriert: 17.08.2010 22:30

Re: Mail-Body mit Attachment erzeugen

Beitrag 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.
Antworten