Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Twitter!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Bibliotecas

Biblioteca de E-mail SMTP - biblioteca para MetaTrader 5

Visualizações:
1715
Avaliação:
(44)
Publicado:
2016.12.27 09:12
\MQL5\Include\ \MQL5\Scripts\ \MQL5\Libraries\
SMTPMailLibraries.ZIP (1298.99 KB)
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

Esta biblioteca é projetado para enviar mensagens de e-mail

Conjunto de funções que amplia as possibilidades do tradicional SendMail. Agora você pode enviar mensagens tanto em formatos de texto quanto HTML. As mensagens podem ser enviadas para vários destinatários. Você pode anexar um ou vários arquivos ao seu e-mail. SSL é suportado.

O código-fonte da DLL está escrito em Delphi XE4 usando a biblioteca Indy.

Além dos arquivos do projeto, você deve instalar a biblioteca OpenSSL.

Lista de funções da biblioteca:

 Função Descrição
 MailConnect
 Conecta com servidor de e-mail
 MailSendText envia textos
 MailSendHtml Envia mensagens em HTML
 MailSendInlineTextFile Envia mensagens com o conteúdo inserido em um arquivo de texto
 MailSendInlineHtmlFile Envia mensagens com o conteúdo inserido em um arquivo HTML
 MailErrorDescription Traz a descrição do erro de volta
 MailClose Encerra a conexão com o servidor de e-mail

Mensagens de erro:

 ConstanteValor
Descrição
 MAIL_NO_CONNECTION
-2
 sem conexão
 MAIL_NO_INITIALIZATION-1 nenhum objeto para o servidor SMTP
 MAIL_NO_ERROR0 nenhum erro
 MAIL_TIMEOUT1
 conexão fechada devido ao tempo ter sido excedido
 MAIL_WRONG_LOGIN2
 login/senha errado
 MAIL_WRONG_HOST_NAME3
 nome do host errado
 MAIL_HOST_NOT_FOUND60
 host não foi encontrado

Exemplo do Script:

//+------------------------------------------------------------------+
//|                                                     MailSend.mq5 |
//|                                                        avoitenko |
//|                          https://www.mql5.com/en/users/avoitenko |
//+------------------------------------------------------------------+
#property copyright "avoitenko"
#property link      "https://www.mql5.com/en/users/avoitenko"
#property version   "1.00"
#property script_show_inputs 

#include <Trade\Trade.mqh>
#include <Arrays\ArrayString.mqh>
#include <SmtpMailLibrary.mqh>
//+------------------------------------------------------------------+
//|   ENUM_MESSAGE                                                   |
//+------------------------------------------------------------------+
enum ENUM_MESSAGE
  {
   MESSAGE_TEXT,           // texto
   MESSAGE_HTML,           // html
   MESSAGE_INLINE_TEXT,    // texto em linha
   MESSAGE_INLINE_HTML     // html em linha
  };
//+------------------------------------------------------------------+
//|   Parâmetros de entrada                                          |
//+------------------------------------------------------------------+
input string   mail_options="=== Mail Options ===";      // Opcões do e-mail
input string   InpMailHost="smtp.gmail.com";             // Host
input int      InpMailPort=465;                          // Porta
input string   InpMailUser="user@gmail.com";             // Usuário
input string   InpMailPassword="password";               // Senha
input string   InpMailFrom="";                           // De (texto)
input string   InpMailSubject="Smtp Mail Library";       // Assunto (text)
input string   InpMailTo="user@ukr.net";                 // E-mail para
input uint     InpMailConnectionTimeout=5000;            // Tempo limite de conexão, msec
input string   msg_options="=== Opções de Mensagem ===";    // Opções de Mensagem
input ENUM_MESSAGE InpMessageType=MESSAGE_HTML;          // Tipo
input string   InpMessageAttachmentFiles="d:\\Temp\\dollar.bmp;d:\\Temp\\euro.bmp";// Arquivos Anexos
input string   InpMessageInlineFiles="d:\\Temp\\ReportTester-20066082.html";// Arquivos em linha
//+------------------------------------------------------------------+
//| Script da função de início do programa                           |
//+------------------------------------------------------------------+
void OnStart()
  {
   long smtp=0;//inicializar

//--- conexão
   int err=MailConnect(smtp,InpMailHost,InpMailPort,InpMailUser,InpMailPassword,InpMailConnectionTimeout);
   if(err!=0)
     {
      Print("MailConnect erro: ",MailErrorDescription(err));
      return;
     }

   switch(InpMessageType)
     {

      //---
      case MESSAGE_TEXT:
        {
         //--- texto simples
         string text=StringFormat("Account: %d\r\nBalance: %.2f %s",AccountInfoInteger(ACCOUNT_LOGIN),AccountInfoDouble(ACCOUNT_BALANCE),AccountInfoString(ACCOUNT_CURRENCY));

         //--- enviar e-mail para si mesmo
         err=MailSendText(smtp,InpMailUser,InpMailFrom,InpMailSubject,text,InpMessageAttachmentFiles);
         if(err!=0)
            Print("MailSendText error: ",MailErrorDescription(err));
         else
            PrintFormat("Program '%s' has sent mail to '%s'",MQLInfoString(MQL_PROGRAM_NAME),InpMailUser);

         //--- Enviar e-mail para MailTo
         err=MailSendText(smtp,InpMailTo,InpMailFrom,InpMailSubject,text,InpMessageAttachmentFiles);
         if(err!=0)
            Print("MailSendText error: ",MailErrorDescription(err));
         else
            PrintFormat("Program '%s' has sent mail to '%s'",MQLInfoString(MQL_PROGRAM_NAME),InpMailTo);
        }
      break;

      //---
      case MESSAGE_HTML:
        {
         //--- construção html
         string html=BuildReport();
         //--- enviar html
         err=MailSendHtml(smtp,InpMailTo,InpMailFrom,InpMailSubject,html,"");
         if(err!=0)
            Print("MailSendText error: ",MailErrorDescription(err));
         else
            PrintFormat("Program '%s' has sent mail to '%s'",MQLInfoString(MQL_PROGRAM_NAME),InpMailTo);
        }
      break;

      //---
      case MESSAGE_INLINE_TEXT:
        {
         err=MailSendInlineTextFile(smtp,InpMailTo,InpMailFrom,InpMailSubject,InpMessageInlineFiles);
         if(err!=0)
            Print("MailSendText error: ",MailErrorDescription(err));
         else
            PrintFormat("Program '%s' has sent mail to '%s'",MQLInfoString(MQL_PROGRAM_NAME),InpMailTo);
        }
      break;

      //---
      case MESSAGE_INLINE_HTML:
        {
         err=MailSendInlineHtmlFile(smtp,InpMailTo,InpMailFrom,InpMailSubject,InpMessageInlineFiles);
         if(err!=0)
            Print("MailSendText error: ",MailErrorDescription(err));
         else
            PrintFormat("Program '%s' has sent mail to '%s'",MQLInfoString(MQL_PROGRAM_NAME),InpMailTo);
        }
      break;

     }

//--- encerra a conexão
   MailClose(smtp);
  }
//+------------------------------------------------------------------+
//|   BuildReport                                                    |
//+------------------------------------------------------------------+
string BuildReport()
  {
   CArrayString html;
//---   
   html.Add("<html><head><title>Report</title>");
   html.Add("<meta name=\"format-detection\" content=\"telephone=no\">");
   html.Add("<style type=\"text/css\" media=\"screen\">");
   html.Add("<!--");
   html.Add("td{font: 8pt Tahoma,Arial;}");
   html.Add("//-->");
   html.Add("</style>");
   html.Add("<style type=\"text/css\" media=\"print\">");
   html.Add("<!--");
   html.Add("td{font: 7pt Tahoma,Arial;}");
   html.Add("//-->");
   html.Add("</style>");
   html.Add("</head>");
   html.Add("<body topmargin=1 marginheight=1> <font face=\"tahoma,arial\" size=1>");
   html.Add("<div align=center>");
   html.Add(StringFormat("<div style=\"font: 18pt Times New Roman\"><b>%s</b></div>",AccountInfoString(ACCOUNT_SERVER)));
   html.Add("<table cellspacing=1 cellpadding=3 border=0>");
//---
   html.Add("<tr>");
   html.Add(StringFormat("<td colspan=2>A/C No: <b>%d</b></td>",AccountInfoInteger(ACCOUNT_LOGIN)));
   html.Add(StringFormat("<td colspan=6>Name: <b>%s</b></td>",AccountInfoString(ACCOUNT_NAME)));
   html.Add("<td colspan=2>&nbsp;</td>");
   html.Add(StringFormat("<td colspan=2 align=right>%s</td>",TimeToString(TimeCurrent())));
   html.Add("</tr>");
//---
   html.Add("<tr>");
   html.Add("<td colspan=13><b>Open Trades:</b></td>");
   html.Add("</tr>");
//---
   html.Add("<tr align=center bgcolor=\"#C0C0C0\">");
   html.Add("<td>Ticket</td>");
   html.Add("<td nowrap>Open Time</td>");
   html.Add("<td>Type</td>");
   html.Add("<td>Size</td>");
   html.Add("<td>Symbol</td>");
   html.Add("<td>Price</td>");
   html.Add("<td>S/L</td>");
   html.Add("<td>T/P</td>");
   html.Add("<td>Price</td>");
   html.Add("<td nowrap>Commission</td>");
   html.Add("<td>Swap</td>");
   html.Add("<td>Profit</td>");
   html.Add("</tr>");
//---
   double profit=0.0;
   int total=PositionsTotal();
   if(total == 0)
     {
      html.Add("<tr align=right><td colspan=13 nowrap align=center>No transactions</td></tr>");
     }
   else
     {
      CPositionInfo m_position;
      for(int i=0; i<total; i++)
        {
         m_position.SelectByIndex(i);

         //--- cor
         if((i&1)==0)html.Add("<tr align=right>");
         else html.Add("<tr bgcolor=#E0E0E0 align=right>");

         //--- dados
         html.Add(StringFormat("<td>%d</td>",m_position.Identifier()));
         html.Add(StringFormat("<td>&nbsp;%s</td>",TimeToString(m_position.Time())));

         if(m_position.PositionType()==POSITION_TYPE_BUY) html.Add("<td>buy</td>");
         else html.Add("<td>sell</td>");

         html.Add(StringFormat("<td>%.2f</td>",m_position.Volume()));
         html.Add(StringFormat("<td>%s</td>",m_position.Symbol()));
         html.Add(StringFormat("<td>%.5f</td>",m_position.PriceOpen()));
         html.Add(StringFormat("<td>%.5f</td>",m_position.StopLoss()));
         html.Add(StringFormat("<td>%.5f</td>",m_position.TakeProfit()));
         html.Add(StringFormat("<td>%.5f</td>",m_position.PriceCurrent()));
         html.Add(StringFormat("<td>%.2f</td>",m_position.Commission()));
         html.Add(StringFormat("<td>%.2f</td>",m_position.Swap()));
         html.Add(StringFormat("<td>%.2f</td>",m_position.Profit()));
         html.Add("</tr>");
         //---
         profit+=m_position.Profit();
        }
     }
//---
   html.Add("<tr>");
   html.Add(StringFormat("<td colspan=2><b>Balance: %.2f</b></td>",AccountInfoDouble(ACCOUNT_BALANCE)));
   html.Add(StringFormat("<td colspan=5><b>Equity: %.2f</b></td>",AccountInfoDouble(ACCOUNT_EQUITY)));
   html.Add("<td colspan=3><b>Floating P/L:</b></td>");
   html.Add(StringFormat("<td colspan=4 align=right><b>%.2f</b></td>",profit));
   html.Add("</tr>");

//---
   html.Add("</table></div></font></body></html>");

//--- Salva em uma única string
   string result="";
   total=html.Total();
   for(int i=0;i<total;i++)
      result+=html.At(i);

//--- feito
   return(result);
  }
//+------------------------------------------------------------------+


Resultados:

Biblioteca de E-mail SMTP

Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/11466

Indicadores Astro Indicadores Astro

Mostra o aspecto de dois planetas, a declinação dos planetas ou apenas a posição do corpo.

FxTrend 25EMA FxTrend 25EMA

FxTrend 25EMA é baseado na diferença do valor de EMA de 25 durante dois momentos diferentes.

MA World MA World

Este EA pode ser executado em todos os Símbolos e tempo gráficos, ele usa o cruzamento de duas Médias Móveis Lineares como sinal e uma Média Móvel Exponencial como Stop Móvel.

Módulo de Stop Móvel Baseado no Delta ZigZag Módulo de Stop Móvel Baseado no Delta ZigZag

O módulo de Stop Móvel das posições em aberto com base no Delta ZigZag para o Assistente MQL5.