Page 1 of 1

Script Conditionally Save Attachement

Posted: 2020-05-28 23:27
by jtellier
Has anyone done a script that will save attchements to a location for messages sent to someone and from someone?

Like

if (from=="test@test.com" && to=="to@test.com") SaveFiles("C:\Here")

Sorry I am a NEWB in VBScript and just wanted to see if anyone else has done this.

Thanks!
Jeremy

Re: Script Conditionally Save Attachement

Posted: 2020-05-29 04:37
by palinka
Sure.

Rule:
Use AND
Criteria: from contains from@address.com
Criteria: to contains to@address.com
Action: Run Function SaveAttachment

Code: Select all

Sub SaveAttachment(oMessage)
	Dim i, strDir, strFile
	strDir = "C:\path\to\attachment_folder\"
	For i = 0 To oMessage.Attachments.Count-1
		strFile = oMessage.Attachments.item(i).Filename
		oMessage.Attachments.item(i).SaveAs(strDir & strFile)
	Next
End Sub
I use it for a note taking service called RocketBook. Something my wife got me. Each category of note has a unique email address using plus addressing (me+category1@mydomain.tld) and the rule only has to pick up the TO address to match. Each category has a separate folder. Works great except my 6 year old used to write in my notebook with pens that don't erase. :mrgreen:

If you want multiple folders, you need multiple subs and multiple rules.

Re: Script Conditionally Save Attachement

Posted: 2020-05-29 16:58
by jtellier
Awesome thanks... now I am going to show you how green I am on this..... Where do I put the Rule, is it in the normal vbs file in the program directory?

Re: Script Conditionally Save Attachement

Posted: 2020-05-29 17:02
by jtellier
Oh I see it in the mailbox, perfect thanks!

Re: Script Conditionally Save Attachement

Posted: 2020-05-29 21:18
by jtellier
So I spoke too soon, I put it in the vbs, reloaded and setup the rules and tested but the files never moved over. Is there anywhere specific you need to put the rules or is there an error log somewhere?

Thanks,
Jeremy

Re: Script Conditionally Save Attachement

Posted: 2020-05-30 03:58
by mattg
add the vbs provided to your eventhandlers.vbs (must be this file, in it's existing location)
In the admin GUI enable scripts

Re: Script Conditionally Save Attachement

Posted: 2020-12-01 01:30
by buskeyl
Hoping I can get a few pointers here. Just trying to facilitate attachments that get sent into Hmail get saved off to a local folder.

I edited C:\Program Files (x86)\hMailServer\Events\EventHandlers.vbs to add the following to the bottom of the file (It was not clear if it needed to be anyplace specific..

Sub SaveAttachment(oMessage)
Dim i, strDir, strFile
strDir = "D:\Attachments\"
For i = 0 To oMessage.Attachments.Count-1
strFile = oMessage.Attachments.item(i).Filename
oMessage.Attachments.item(i).SaveAs(strDir & strFile)
Next
End Sub


I created "D:\Attachments\"

I enabled Scripts in advanced settings and clicked reload scripts.

I created a rule called Save Attachments, it's action is to "Run a Function" and it's specified script function is "SaveAttachment" Did this as both a main rule, and a rule on the actual account I was sending the test attachment into.

I get no ERROR logs in the log directory, and in the normal operational log, I do see entries in the log file, "Applying rule Save Attachments", however, nothing shows up in d:\attachments

Did I miss something?

Re: Script Conditionally Save Attachement

Posted: 2020-12-01 02:25
by palinka
buskeyl wrote:
2020-12-01 01:30
Hoping I can get a few pointers here. Just trying to facilitate attachments that get sent into Hmail get saved off to a local folder.

I edited C:\Program Files (x86)\hMailServer\Events\EventHandlers.vbs to add the following to the bottom of the file (It was not clear if it needed to be anyplace specific..

Sub SaveAttachment(oMessage)
Dim i, strDir, strFile
strDir = "D:\Attachments\"
For i = 0 To oMessage.Attachments.Count-1
strFile = oMessage.Attachments.item(i).Filename
oMessage.Attachments.item(i).SaveAs(strDir & strFile)
Next
End Sub


I created "D:\Attachments\"

I enabled Scripts in advanced settings and clicked reload scripts.

I created a rule called Save Attachments, it's action is to "Run a Function" and it's specified script function is "SaveAttachment" Did this as both a main rule, and a rule on the actual account I was sending the test attachment into.

I get no ERROR logs in the log directory, and in the normal operational log, I do see entries in the log file, "Applying rule Save Attachments", however, nothing shows up in d:\attachments

Did I miss something?
Did you use "contains"?

Criteria: from contains from@address.com
Criteria: to contains to@address.com

Did you use some other criteria?

Re: Script Conditionally Save Attachement

Posted: 2020-12-01 02:54
by buskeyl
Sorry, didn’t mention the criteria did I? In both cases, the rule criteria was: To: field equals <the email address I was sending my tests into>

Left the TEST field value blank, as I have no idea what’s that’s there for :p.

Would that not work?

Re: Script Conditionally Save Attachement

Posted: 2020-12-01 02:56
by buskeyl
Ha! Changed it to “contains” from “equals” and it worked. Sweet. Would like to understand why that was necessary?

Re: Script Conditionally Save Attachement

Posted: 2020-12-01 03:14
by buskeyl
Also, is there a way for me to invoke a specific PowerShell script? Can I set up a function like the one we did above that will run a PowerShell script wit a message of particular criteria is received? I am fairly proficient with PowerShell, much less so with VBS. I admit I did not search for it yet, it just occurred to me to ask while I had some attention.

Re: Script Conditionally Save Attachement

Posted: 2020-12-01 03:45
by palinka
buskeyl wrote:
2020-12-01 03:14
Also, is there a way for me to invoke a specific PowerShell script? Can I set up a function like the one we did above that will run a PowerShell script wit a message of particular criteria is received? I am fairly proficient with PowerShell, much less so with VBS. I admit I did not search for it yet, it just occurred to me to ask while I had some attention.
haha. Me too. Here's a couple simple ones that can get you started.

Code: Select all

With CreateObject("WScript.Shell")
	.Run "Powershell Start-Sleep -Milliseconds 1000", 0, True
End With


Set PowerShell = CreateObject("WScript.Shell")
PowerShell.Run "Powershell Start-Sleep -Milliseconds 1000", 0, True
Set PowerShell = Nothing


Set PowerShell = CreateObject("WScript.Shell")
PowerShell.Run "Powershell -ExecutionPolicy Bypass -File C:\scripts\powershellscript.ps1", 0, True
Set PowerShell = Nothing

Re: Script Conditionally Save Attachement

Posted: 2020-12-01 03:49
by palinka
buskeyl wrote:
2020-12-01 02:56
Ha! Changed it to “contains” from “equals” and it worked. Sweet. Would like to understand why that was necessary?
If you don't specify "contains", it attempts to match the entire string.

Code: Select all

"John Doe" <john@doe.com>
does CONTAIN but does NOT EQUAL john@doe.com

^string$ does not necessarily equal ^.*string.*$

Sometimes it does, most times it doesn't when it comes to email addresses.

Edit - if you're more comfortable with regex, there is an option to use it in rules. Its very helpful when you need to mix AND & OR in your criteria.

Re: Script Conditionally Save Attachement

Posted: 2020-12-01 06:45
by buskeyl
“if your more comfortable with REGEX”. Ha ha. Funny. Not even. I’ll learn them eventually. Spent may an hour on regexer.com. Still makes my head hurt. Good to know though. Thanks for all the help. It made total sense once you ‘splained it.

Re: Script Conditionally Save Attachement

Posted: 2020-12-01 12:05
by jimimaseye

Re: Script Conditionally Save Attachement

Posted: 2020-12-01 15:40
by SorenR
Easy peasy ...

Image

:mrgreen:

Re: Script Conditionally Save Attachement

Posted: 2020-12-01 15:55
by palinka
SorenR wrote:
2020-12-01 15:40
Easy peasy ...

Image

:mrgreen:
A dot is a matching character when enclosed in square brackets (no escaping)?

I just tested it on regex101 and yes, it matches as dot and NOT as any character. You can also escape it - there's no difference.

https://regex101.com/r/7qhw5I/1

I love new scraps of knowledge. This one might actually be useful one day. :mrgreen: