Abfrage von Daten zu vorheriger E-Mail Funktion

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

GamerG1rl
Posts: 48
Joined: 23 Nov 2017, 04:44

Abfrage von Daten zu vorheriger E-Mail Funktion

12 Oct 2018, 01:40

Code: Select all

FileSelectFile, MyFiles, M3, %A_MyDocuments%, Select File

If SendMail(E-MailAdresse, Betreff, "Text", MyFiles)
{

Return
}
;	this is a function to send emails with outlook. I only formatted it as a function, the original code isn't mine.
SendMail(ToAddress, MessageSubject, MessageBody, AttachmentPath="") {
	ol := ComObjCreate("Outlook.Application")
	ns := ol.getNamespace("MAPI")
	ns.logon("","",true,false) ;get default MAPI profile
	newMail := ol.CreateItem(0) ;0 is Outlook constant 'olMailItem' (thanks Sinkfaze)
	newMail.Subject := MessageSubject
	newMail.Body := MessageBody
	If StrLen (AttachmentPath)
	{
		MessageAttach := newMail.Attachments
		Loop, Parse, AttachmentPath, `n, %A_Space%%A_Tab%
		{
			If A_Index = 1
				Root := A_LoopField
			Else
				MessageAttach.Add(Root . "\" . A_LoopField)
		}
	}
	; validate the recipient, just in case...
	myRecipient := ns.CreateRecipient(ToAddress)
	myRecipient.Resolve
	If Not myRecipient.Resolved
	MsgBox, unknown recipient
	
	Else
	{
		newMail.Recipients.Add(myRecipient)
		;newMail.Sender := FromAddress ;this would be the from field but does not work yet
		newMail.Display
	}
	
}
Guten Morgen,

ich habe im Netz dieses Code-Schnippsel gefunden. leider war der Forum-Post wo ich es her habe schon deaktiviert gewesen.
Ist es irgendwie möglich, die in der 3. Zeile stehenden Variablen vorher abzufragen durch ein Gui ?
Wenn ich das ganze mit Variablen versuche und %EMail% reinschreibe, bekomme ich die Rückmeldung, dass die E-Mail ungültig ist... (Ich vermute einfach mal, weil die Variablen in " " stehen müssen...
Das ist ja aber mit Variablen nicht möglich, da das ganze dann als Text und nicht als Variable gewertet wird oder ?

Vielen Dank für eure Hilfe.

lg Michelle
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Abfrage von Daten zu vorheriger E-Mail Funktion

12 Oct 2018, 02:55

Nein, an sich kannst du hier natürlich mit variablen arbeiten.
In AHK gibt es 2 verschiedene Syntax Versionen die sich anders verwenden lassen.

Da gibt es die Command Syntax - alles ist Text, es sei denn du verwendest %% um einen Variablennamen - die variable mit diesem Namen wird dann ausgewertet und ihr text hier eingefügt.

Das Gegenteil davon ist die Expressions syntax. Sie funktioniert ein bisschen wie Mathematik. Hier werden mehrere Variablen oder Werte mit anderen Werte über Operatoren verknüpft.
Variablen müssen nicht besonders markiert werden. Jedoch - alles was in "" steht ist ein Textwert.

Dein Funktionsaufruf (SendMail) in der 3 Zeile ist Teil eines solchen Ausdrucks. E-MailAdresse ist nicht 1 variable sondern subtrahiert die variable MailAdresse von der Variable E:

Code: Select all

MailAdresse := 42
E := 84
Msgbox % E - MailAdresse ;das % führt dazu, dass Msgbox den expressionsmodus verwendet.
Recommends AHK Studio
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Abfrage von Daten zu vorheriger E-Mail Funktion

12 Oct 2018, 02:55

Moin,

so ganz verstehe ich Deine Frage nicht. Die Mail wird ja innerhalb der Funktion bereits mit Hilfe von Variablen für die Funktionsparameter gebildet. Sie soll aber wohl in hauptsächlich zeigen, wie man Anhänge an eine Mail anfügt.

Wenn Du für die Übergabe der Parameter eigene Variablen anlegst, kannst Du die natürlich auch über ein GUI befüllen. Benötigt werden:
  • MailAdresse
  • MailBetreff
  • MailText
Die werden dann wie folgt an die Funktion übergeben:

Code: Select all

SendMail(MailAdresse, MailBetreff, MailText) ; das ist ein Ausdruck -> keine %-Zeichen um Variablennamen
Für Anhänge ist zu beachten, dass diese Funktion im letzten Parameter ggf. die Übergabe eines Ordneramens erwartet und alle in diesem Ordner enthaltenen Dateien anhängt.
GamerG1rl
Posts: 48
Joined: 23 Nov 2017, 04:44

Re: Abfrage von Daten zu vorheriger E-Mail Funktion

12 Oct 2018, 03:54

Ich muss dazu sagen, dass ich die Funktion nur kopiert und nicht programmiert habe..
Ich selbst arbeite eigentlich auch nur mit dem Command Syntax und nicht mit dem Expressions syntax ;)

ich probier schon die ganze zeit, das umzuschreiben... aber irgendwie klappt das nicht :/
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Abfrage von Daten zu vorheriger E-Mail Funktion

12 Oct 2018, 04:29

Kannst du mal posten wie einer deiner Versuche aussieht die Variablen im GUI darzustellen.

Am Anfang arbeiten die meisten mit Command Syntax - vielen scheint das einfacher zu fallen.
Jedoch brauchst du für ungefähr 90% von AHK Expressions Syntax - und in den restlichen 10% kannst du diese auch noch aktivieren.
Und da man dann früher oder später aus der Übung kommt was Commands angeht verwendet der Hauptteil der Fortgeschrittenen AHK Benutzer die Expressions Syntax.
Recommends AHK Studio
GamerG1rl
Posts: 48
Joined: 23 Nov 2017, 04:44

Re: Abfrage von Daten zu vorheriger E-Mail Funktion

12 Oct 2018, 06:51

nnnik wrote:Kannst du mal posten wie einer deiner Versuche aussieht die Variablen im GUI darzustellen.

Am Anfang arbeiten die meisten mit Command Syntax - vielen scheint das einfacher zu fallen.
Jedoch brauchst du für ungefähr 90% von AHK Expressions Syntax - und in den restlichen 10% kannst du diese auch noch aktivieren.
Und da man dann früher oder später aus der Übung kommt was Commands angeht verwendet der Hauptteil der Fortgeschrittenen AHK Benutzer die Expressions Syntax.
Ich würde es halt so machen:

Code: Select all

FileSelectFile, MyFiles, M3, %A_MyDocuments%, Select File

Gui, 7:Add, Edit, x12 y19 w180 h30 vToAdress, Email
Gui, 7:Add, Edit, x12 y69 w180 h30 vMessageSubject, Betreff
Gui, 7:Add, Edit, x12 y119 w180 h60 vMessageBody, Text
Gui, 7:Add, Button, x12 y189 w100 h30 gsenden, Senden
Gui, 7:Add, Button, x122 y189 w100 h30 g7GuiClose, Abbrechen

Gui, 7:Show, x291 y248 h231 w249, New GUI Window
Return

7GuiClose:
ExitApp


senden:
Gui, 7:Submit
SendMail(ToAddress, MessageSubject, MessageBody, AttachmentPath="") {
	ol := ComObjCreate("Outlook.Application")
	ns := ol.getNamespace("MAPI")
	ns.logon("","",true,false) ;get default MAPI profile
	newMail := ol.CreateItem(0) ;0 is Outlook constant 'olMailItem' (thanks Sinkfaze)
	newMail.Subject := MessageSubject
	newMail.Body := MessageBody
	If StrLen (AttachmentPath)
	{
		MessageAttach := newMail.Attachments
		Loop, Parse, AttachmentPath, `n, %A_Space%%A_Tab%
		{
			If A_Index = 1
				Root := A_LoopField
			Else
				MessageAttach.Add(Root . "\" . A_LoopField)
		}
	}
	; validate the recipient, just in case...
	myRecipient := ns.CreateRecipient(ToAddress)
	myRecipient.Resolve
	If Not myRecipient.Resolved
	MsgBox, unknown recipient
	
	Else
	{
		newMail.Recipients.Add(myRecipient)
		;newMail.Sender := FromAddress ;this would be the from field but does not work yet
		newMail.Display
	}
	
}
Wie gesagt: Bin jetzt nicht brutale Anfängerin, aber halt echt noch Basics...
Verstehe nicht unbedingt so alles, was in der Mailing-Funktion steht... :/
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Abfrage von Daten zu vorheriger E-Mail Funktion

12 Oct 2018, 07:35

Ja ich sehe wo das Problem ist.

Funktionen sind in 2 Bestandteile aufgeteilt.
Im ersten Teil definierst du die Funktion und daraufhin kannst du die Funktion jederzeit aufrufen.

An sich ist es das gleiche wie ein Label.
Der Funktionsaufruf ist die GoSub Anweisung. Die Funktionsdefinition ist ähnlich wie man ein Label definiert.

In deinem Fall ist das die Funktionsdefinition:

Code: Select all

SendMail(ToAddress, MessageSubject, MessageBody, AttachmentPath="") {
	ol := ComObjCreate("Outlook.Application")
	ns := ol.getNamespace("MAPI")
	ns.logon("","",true,false) ;get default MAPI profile
	newMail := ol.CreateItem(0) ;0 is Outlook constant 'olMailItem' (thanks Sinkfaze)
	newMail.Subject := MessageSubject
	newMail.Body := MessageBody
	If StrLen (AttachmentPath)
	{
		MessageAttach := newMail.Attachments
		Loop, Parse, AttachmentPath, `n, %A_Space%%A_Tab%
		{
			If A_Index = 1
				Root := A_LoopField
			Else
				MessageAttach.Add(Root . "\" . A_LoopField)
		}
	}
	; validate the recipient, just in case...
	myRecipient := ns.CreateRecipient(ToAddress)
	myRecipient.Resolve
	If Not myRecipient.Resolved
	MsgBox, unknown recipient
	
	Else
	{
		newMail.Recipients.Add(myRecipient)
		;newMail.Sender := FromAddress ;this would be the from field but does not work yet
		newMail.Display
	}
	
}
Hier wird festgelegt welchen code die funktion ausführt und wie Parameter übergeben werden.

Bei einem Funktionsaufruf legt man dann fest welche Parameter übergeben werden.
In deinem Fall erlaubt das uns festzulegen, wer die Mail erhält, und welchen Betreff, Inhalt und Anhang sie hat.

Code: Select all

SendMail("[email protected]", "Dein Betreff", "Deine Nachricht", "C:\DeinAnhang.txt")
Recommends AHK Studio
GamerG1rl
Posts: 48
Joined: 23 Nov 2017, 04:44

Re: Abfrage von Daten zu vorheriger E-Mail Funktion

12 Oct 2018, 07:47

nnnik wrote:Hier wird festgelegt welchen code die funktion ausführt und wie Parameter übergeben werden.

Bei einem Funktionsaufruf legt man dann fest welche Parameter übergeben werden.
In deinem Fall erlaubt das uns festzulegen, wer die Mail erhält, und welchen Betreff, Inhalt und Anhang sie hat.

Code: Select all

SendMail("[email protected]", "Dein Betreff", "Deine Nachricht", "C:\DeinAnhang.txt")
Genau. Soweit hab ich das verstanden.
Wenn ich da jetzt zum Beispiel schreibe

Code: Select all

SendMail("[email protected]", "Dein Betreff", "Deine Nachricht", "C:\DeinAnhang.txt")
dann kann ich die Mail auch verschicken.

Aber wenn ich jetzt in der SendMail ebenfalls Variablen drin haben will, geht das ja nicht, wegen den " "...

Code: Select all

SendMail("%EMail%", "%Betreff%", "%Nachricht%", "%FilePath%")
aber Ohne Anführungszeichen klappt ja die Funktion nicht oder ?
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Abfrage von Daten zu vorheriger E-Mail Funktion

12 Oct 2018, 09:15

Um im Expressionsmodus Variablen zu verwenden einfach die %% und "" weg lassen.
Recommends AHK Studio
GamerG1rl
Posts: 48
Joined: 23 Nov 2017, 04:44

Re: Abfrage von Daten zu vorheriger E-Mail Funktion

15 Oct 2018, 03:25

nnnik wrote:
12 Oct 2018, 09:15
Um im Expressionsmodus Variablen zu verwenden einfach die %% und "" weg lassen.
Hi. Sorry für die späte Antwort :/ Is leider n Arbeits-Projekt und deswegen kann ich zuhause nicht weiter daran arbeiten...
Die Idee, einfach die " " und % % wegzulassen hilft leider nichts, weil er dann "unknown recipient" zurückgibt...

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 37 guests