worker26
Goto Top

Kann man durch Buttonklick eine vorgefertigte Mail versenden?

Hallo Laute,

ich habe folgendes Anliegen:

ich möchte gerne das ein User, auf einen Button klickt. Dadurch soll sich sein Mailprogramm öffnen und er sieht vorgefertigt seine Mailadresse als Absender, den Empfänger, einen Betreff, einen Inhalt und einen Anhang. Er soll damit die Möglichkeit haben, alles nochmal zu überprüfen. Dann soll er nur mehr auf Senden klicken und die Mail geht raus.

Wie bekomme ich es zusammen, das die Absendermail vom Mailprogramm des Users ermittelt wird ohne das er sie selbst eingeben muss.

Ich habe jetzt so etwas ähnliches mit phpMailer realisiert, jedoch kann ich hier nur von einer fixen Mail senden bzw. der User muss die Mailadresse und sein Passwort händisch eingeben und die Mail wird gesendet, ohne das der User sie begutachten kann. Kann sein das es anders auch geht, jedoch hätte ich das bis jetzt noch nicht herausgefunden.

Falls jemand eine Idee hat, würde ich mich freuen. face-smile


PS: Checke das Forum erst am Donnerstag nächste Woche wieder ab.

Lg Worker

Content-ID: 1247749647

Url: https://administrator.de/contentid/1247749647

Ausgedruckt am: 19.11.2024 um 11:11 Uhr

em-pie
em-pie 10.09.2021 aktualisiert um 15:58:13 Uhr
Goto Top
Moin,

Nutze mailto:hans@ wurst.de

Dort kann man noch per ? Oder & (weiß ich gerade nicht genau) den Betreff (=subject) sowie Mailkörper (=Body) fertig mitgeben…

Ggf müssen Leerzeichen „abgefangen“ werden.

Recherchiere mal nach //mailto://, dann wirst du fündig
erikro
erikro 10.09.2021 um 16:11:30 Uhr
Goto Top
Moin,

Zitat von @em-pie:
Nutze mailto:hans@ wurst.de

Dort kann man noch per ? Oder & (weiß ich gerade nicht genau) den Betreff (=subject) sowie Mailkörper (=Body) fertig mitgeben…

Ggf müssen Leerzeichen „abgefangen“ werden.

Recherchiere mal nach //mailto://, dann wirst du fündig

Oder nimm sowas:
https://mailtolink.me/
https://mailtolinkgenerator.com/

Nennt sich mailto link generator.

hth

Erik
Worker26
Worker26 16.09.2021 um 08:08:59 Uhr
Goto Top
Hallo @em-pie und @erikro,

danke für die Antworten. Mailto habe ich mir auch schon angesehen, jedoch bringt mir das nichts, da ich hier keinen Anhang automatisch mit übergeben kann.

Lg Worker
colinardo
Lösung colinardo 16.09.2021 aktualisiert um 12:20:47 Uhr
Goto Top
Servus.
Mailto unterstützt auch Attachments, aber nur inoffiziell denn jeder Mailclient handhabt das anders. neuere akzeptieren das inzwischen nicht mehr.

Unter Windows gibt es eigentlich nur eine zuverlässige Methode den Default-Mailclient anzusprechen wenn dieser auch mit Attachments & Co betankt werden soll, und zwar ist das das Simple-MAPI Programming-Interface. Das ist zwar von Microsoft inzwischen als "deprecated" markiert und sollte eigentlich nicht mehr verwendet werden weil es in zukünftigen Betriebsystemen entfernt werden wird. Da es aber weiterhin existiert lässt sich SimpleMAPI z.B. über Powershell ansprechen, das sähe dann bspw. so aus

(Hinweis: Da die SimpleMAPI Funktionen auf low level Win32 Funktionen aufbauen lade ich eine entsprechende Bibliothek kurzerhand beim ersten Aufruf über Nuget, man muss ja nicht jedes Rad neu erfinden.)

Hier ein Beispiel
(Achtung: Es muss mindestens ein Mailprogramm installiert sein das die SimpleMAPI-Schnittstelle von Windows unterstützt!!)
function Load-NugetAssembly {
    [CmdletBinding()]
    param(
        [string]$url,
        [string]$name,
        [string]$zipinternalpath,
        [switch]$downloadonly
    )
    # Accept all TLS protocols
    [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::GetNames([System.Net.SecurityProtocolType]) 
    if($psscriptroot -ne ''){  
        $localpath = join-path $psscriptroot $name
    }else{
        $localpath = join-path $env:TEMP $name
    }
    $tmp = "$env:TEMP\$([IO.Path]::GetRandomFileName())"  
    $zip = $null
    try{
        if(!(Test-Path $localpath)){
            Add-Type -A System.IO.Compression.FileSystem
            write-host "Downloading and extracting required library '$name' ... " -F Green -NoNewline  
            (New-Object System.Net.WebClient).DownloadFile($url, $tmp)
            $zip = [System.IO.Compression.ZipFile]::OpenRead($tmp)
            $zip.Entries | ?{$_.Fullname -eq $zipinternalpath} | %{
                [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,$localpath)
            }
	        Unblock-File -Path $localpath
            write-host "OK" -F Green  
        }
        if(!$downloadonly.IsPresent){
            Add-Type -Path $localpath -EA Stop
        }
        
    }catch{
        throw "Error: $($_.Exception.Message)"  
    }finally{
        if ($zip){$zip.Dispose()}
        if(Test-Path $tmp){del $tmp -Force -EA 0}
    }  
}
Load-NugetAssembly 'https://www.nuget.org/api/v2/package/Simple-MAPI.NET' -name 'SimpleMAPI.NET.dll' -zipinternalpath 'lib/net40/SimpleMAPI.NET.dll' -EA Stop  

# create mapi object
$mapi = New-Object Win32Mapi.SimpleMapi
# add recipient
$mapi.AddRecipient("user@domain.tld","",$false)  
# attach a file
$mapi.Attach('D:\test.txt')  
# open new mail object with default mail application
$mapi.Send("Testsubject","Bodytext",$true)  
Alternativ kann man natürlich, wenn man auf einen bestimmten Mail-Client setzen möchte (hier Outlook), dieses direkt über die COM-Schnittstelle ansteuern (hier das Beispiel auch in Powershell, lässt sich aber genauso gut als VBS, oder eine andere Skript oder Programmiersprache ansteuern die COM-Objekte unterstützt)
[void][reflection.assembly]::LoadWithPartialName("microsoft.visualbasic")  
$objOL = [microsoft.visualbasic.interaction]::GetObject($null,"Outlook.Application")  
if (!$objOL){$objOL = New-Object -Com Outlook.Application}

$msg = $objOL.CreateItem(0)
$msg.Subject = "Testsubject"  
$msg.To = 'user@domain.tld'  
$msg.Attachments.Add('D:\test.txt')  
$msg.Display()
Grüße Uwe
Worker26
Worker26 16.09.2021 um 15:17:38 Uhr
Goto Top
Hallo @colinardo,

danke für die Antwort, dass muss ich mir mal genau ansehen. Hab gedacht, dass ich das vielleicht alles mit PHP oder JavaScript machen kann und nicht auch noch VBS.

Lg Worker face-smile
colinardo
colinardo 16.09.2021 aktualisiert um 17:32:20 Uhr
Goto Top
Zitat von @Worker26:

Hallo @colinardo,

danke für die Antwort, dass muss ich mir mal genau ansehen. Hab gedacht, dass ich das vielleicht alles mit PHP oder JavaScript machen kann und nicht auch noch VBS.
Der automatisierte Javascript Zugriff von fremden Webseiten auf den lokalen Speicher ist aus guten Grund deaktiviert, das versteht sich ja eigentlich von selbst, mit Anhängen in Browser fremde Apps ist da in dieser Hinsicht also nichts ...
Da würde ich stattdessen dem User ein Formular vorsetzen und das über die Webseite per PHP als Mail verschicken oder gleich in ne passende DB schreiben je nach Anwendungsfall eben.