Hej.
Czy zna ktoś rozwiązanie jak wysłać screenshot z wykresu MT4 na email z poziomu MQLa ?
Kod do robienia screenshotów mam gotowy, obrazki zapisują się w wybranym przez mnie katalogu ale jak spowodować żeby wraz z funkcją SendMail wysłać załącznik ?
Czy potrzebne jest jakieś inne zewnętrzne rozwiązanie ? Rzecz w tym że chcę aby wraz załącznikiem przesłany był konkretny opis wzięty z MQLa.
jak wysłać screenshot z Mt4 na email
Re: jak wysłać screenshot z Mt4 na email
Niestety nie da się za pomocą funkcji wysyłania maila, tu masz przykładowe rozwiązania: https://forum.mql4.com/30152
Re: jak wysłać screenshot z Mt4 na email
Hej.
W końcu wydumałem rozwiązanie, dzięki Pablo90 za info o blat.exe
Opiszę uproszczone rozwiązanie bo ja mam tak że przenoszę jeszcze pliki po za foldery MT4 (funkcją MoveFileW() )
A więc robimy tak...
Po zainstalowaniu blata z parametrem -install dodajemy sobie nasz serwer smtp oraz port na jakim dziala a także ilośc prób wysyłki.
Tak inicjuje sobie nazwę sreenshota (zeby kazdy byl niepowtarzalny)
pod zmienną file_name mam nazwę pliku .gif
Tak robimy screenshota o okrślonej nazwie
gdzie 240,200 rozmiar obrqzka, 12 ilosc swieczek, 4 zoom
Tak inicjujemy sobie subject wysyłanego maila oraz tekst jaki ma się wysyłać
Potem inicjuje nazwę pliku html jaki chcę aby został wysłany oraz jego zawartość "body" - tu wkładany jest tekst wiadomości oraz nasz plik .gif
potem zapisujemy calość "body" do naszego pliku .html
inicjujemy opcje z jakimi zostanie wywołane polecenie "blat.exe" , definujemy co wysylalmy, do kogo , temat oraz zalaczaly nasz obrazek .gif
I na koncu coś co zajęło mi najwięcej czasu bo koniecznie chciałem aby plik graficzny był załadowany w srodku wiadomosci html
jak w powyższym zamienimy /C na /K to okno cmd.exe nam pozostanie i bedziemy mogli sprawdzic czy wszystko dziala poprawnie
ufff... udało się:-)
oczywiście kod jest trochę chaotyczny ale tak na szybko pisze więc można sobie dopasować co się chce...
W ten sposób omijamy funkcję SendMail z MT4 i wysyłamy sobie co chcemy jak chcemy i załączamy co chcemy
składnia blat
http://www.blat.net/syntax/syntax.html
W końcu wydumałem rozwiązanie, dzięki Pablo90 za info o blat.exe
Opiszę uproszczone rozwiązanie bo ja mam tak że przenoszę jeszcze pliki po za foldery MT4 (funkcją MoveFileW() )
A więc robimy tak...
Po zainstalowaniu blata z parametrem -install dodajemy sobie nasz serwer smtp oraz port na jakim dziala a także ilośc prób wysyłki.
Tak inicjuje sobie nazwę sreenshota (zeby kazdy byl niepowtarzalny)
Kod: Zaznacz cały
string sym = Symbol();
int symlen = StringLen(sym);
string year=TimeYear(TimeLocal());
if(StringLen(year)<2) year="0"+year;
string mon=TimeMonth(TimeLocal());
if(StringLen(mon)<2) mon="0"+mon;
string day=TimeDay(TimeLocal());
if(StringLen(day)<2) day="0"+day;
string hou=TimeHour(TimeLocal());
if(StringLen(hou)<2) hou="0"+hou;
string min=TimeMinute(TimeLocal());
if(StringLen(min)<2) min="0"+min;
string sec=TimeSeconds(TimeLocal());
if(StringLen(sec)<2) sec="0"+sec;
string file_name,old_file,new_file;
file_name=sym+"_"+per+"_"+year+"-"+mon+"-"+day+"_"+hou+"-"+min+"-"+sec+".gif";
Tak robimy screenshota o okrślonej nazwie
Kod: Zaznacz cały
WindowScreenShot(file_name,240,200,12,4,-1);
Tak inicjujemy sobie subject wysyłanego maila oraz tekst jaki ma się wysyłać
Kod: Zaznacz cały
string subject = ("TEST ONLY " + dzien + " " + Symbol() + " BUY " + " " + per + " Time: " + (TimeToStr(TimeLocal(),TIME_DATE)) + " " +(TimeToStr(TimeLocal(),TIME_SECONDS)) );
string text = (Symbol() + " BUY fractal , " + per + " Time: " + (TimeToStr(TimeLocal(),TIME_DATE)) + " " +(TimeToStr(TimeLocal(),TIME_SECONDS)) );
Potem inicjuje nazwę pliku html jaki chcę aby został wysłany oraz jego zawartość "body" - tu wkładany jest tekst wiadomości oraz nasz plik .gif
Kod: Zaznacz cały
string name = sym+"_"+per+"_"+year+"-"+mon+"-"+day+"_"+hou+"-"+min+"-"+sec+".html";
string body = "<html><body><head><title>" + "</title></head>" + text + "<p> <img src=\"cid:" + file_name + "\"> "+ "</body></html>";
potem zapisujemy calość "body" do naszego pliku .html
Kod: Zaznacz cały
int handle=FileOpen(name, FILE_CSV|FILE_WRITE, ';');
// if(handle>0)
{
Print ("handle= " + handle);
Print (TerminalInfoString(TERMINAL_DATA_PATH));
Print ("name= " + name);
FileWrite(handle, body);
FileClose(handle);
Kod: Zaznacz cały
string opcje = "C:\\Forex\\Blat\\" + name + " /html" + " /u ktos@mail.com /pw haslo_do_naszego_SMTP /to dokogos@mail.com ,jesczektos@mail.pl,i_jeszcze_jeden_ktos@mail.us /i nazwa_widoczna_jako_wysylajacy /subject \"" + subject + "\"" + " /embed " + file_name ;
Kod: Zaznacz cały
ShellExecuteW(0, "Open", "cmd.exe","/C C:\\cos\\gdzies\\wkatalogu\\waszym\\blat.exe " + opcje,"", 9);
ufff... udało się:-)
oczywiście kod jest trochę chaotyczny ale tak na szybko pisze więc można sobie dopasować co się chce...
W ten sposób omijamy funkcję SendMail z MT4 i wysyłamy sobie co chcemy jak chcemy i załączamy co chcemy

składnia blat
http://www.blat.net/syntax/syntax.html