Mail-Body mit Attachment erzeugen
-
- Beiträge: 120
- Registriert: 01.04.2011 21:59
Mail-Body mit Attachment erzeugen
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?
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?
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- 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
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
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
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"
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
Re: Mail-Body mit Attachment erzeugen
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."
-
- Beiträge: 120
- Registriert: 01.04.2011 21:59
Re: Mail-Body mit Attachment erzeugen
Sehr chic, Dige. Danke!
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!
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
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
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
-
- Beiträge: 120
- Registriert: 01.04.2011 21:59
Re: Mail-Body mit Attachment erzeugen
Ist in aktuellen Fall kein Thema, da nur dieser Mail-Client zur Verfügung steht.mk-soft hat geschrieben:Und was ist, wenn man kein Outlook hat?
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
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.
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
-
- Beiträge: 120
- Registriert: 01.04.2011 21:59
Re: Mail-Body mit Attachment erzeugen
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.
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
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.
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.