I have two comments. In the strtran() line, your syntax is wrong, you use "+" instead of ",". Secondly you should avoid macros whenever possible, they can cause unpredictable results, especially if you have spaces somewhere. This code does the same job.
hh = forceext("d:\outmail\out" +chrtran(ttoc(datetime()),' :-',''),'dbf')
select outmale
copy to (hh)
>hh="d:\outmail\out"+TTOC(DATETIME())+".dbf"
>hh=STRTRAN(hh," "+"")
>hh=STRTRAN(hh,":"+"")
>hh=STRTRAN(hh,"/"+"")
>
>
>the value of hh is d:\outmail\out07012015084913.dbf
>
>SELECT outmail
>
>COPY TO &hh
>
>I get invalid path or filename - what am I doing wrong?
>
>d:\outmail dirctory exists exists as does the file outmail