1 Naposledy upravil: roman_rja (2014-10-24 13:37:12)

Téma: odeslání mailu

Pěkný den všem, mám jenom prostý dotaz, SDSko mě neodesílá info maily, už jsme zkoušel dávat různů nastavení SMTP a různé maily jak od seznamu tak i od gmailu, ale nedaří se mě doufám že program mám v pořádku, raději přikládám, třeba někde dělám chybu nevím. Jaký má být nastavený SMTP .

var _portal_vstup;    //index vstupu
var _portal_konst;    //prepoctova konst vstupu
var _portal_ram;      //index ram pole
var _portal_pom;      //pomocna
var _portal_dns;      //je dostupny preklad dns
var _portal_data;     //typ odesilanych dat
var _portal_vykonhod; //vykon za aktualni hodinu
var mez, odeslano;

posli_email
{
  if (odeslano == 0)
  {
    //jeste neodeslal, takze...
    smtp_send('xxxxx@xxxxxx.com', 'teplotni alarm', 'Hlasim ze teplota (',sys[310],'°C) poklesla pod ',mez,'°C .');
    echo (' odeslan mail ');
  }
  odeslano = 1;  // VELMI DULEZITE - jedno z moznych reseni - ABY TO NEPOSILAL NEUSTALE DOKOLA, ale jen jednou kdyz se to stane !
}

uz_je_nad
{
  odeslano = 0; //nuluj, aby to mohl znovu poslat, jakmile teplota zase klesne
  smtp_send('xxxxxx@xxxxxx.com', 'teplotni alarm', 'Hlasim ze teplota (',sys[310],'°C) stoupla nad ',mez,'°C .');
  odeslano = 1;
}

odesli_data_na_portal
{
 _portal_data=1;
 dns_resolv('eportal.merenienergie.cz');
 sys[64] = 30;  //sekund

label cekam_na_dns:
 if (sys[64] == 0) {
  _portal_dns=0;
  goto odeslat;
 }
 if (sys[65] == 512) {
  _portal_dns=1;
  goto odeslat;
 }
 goto cekam_na_dns;

label odeslat:
 if (_portal_dns==0) {
  if (_portal_data==1) {
   http_get(77,93,211,207,'eportal.merenienergie.cz','/datas0.php?ver=1&devid=', 'thqgr2KVQX3aSKsmChjSxPzFflwQkn', '&t0v1=', sys[493], '&t0v2=', sys[494], '&t0v3=', sys[495], '&t0v4=', sys[496], '&t0v5=', sys[497], '&t0v6=', sys[498], '&t0v7=', sys[499], '&t0v8=', sys[500], '&t1v1=', sys[526], '&t1v2=', sys[527], '&t1v3=', sys[528], '&t1v4=', sys[529], '&t1v5=', sys[530], '&t1v6=', sys[531], '&t1v7=', sys[532], '&t1v8=', sys[533], '&av1=', sys[592], '&av2=', sys[593], '&av3=', sys[594], '&av4=', sys[595], '&av5=', sys[596], '&av6=', sys[597], '&av7=', sys[598], '&av8=', sys[599], '&tt=', sys[459]);
  }
  if (_portal_data==2) {
   http_get(77,93,211,207,'eportal.merenienergie.cz','/datatemp.php?ver=1&line=a&devid=', 'thqgr2KVQX3aSKsmChjSxPzFflwQkn', '&t1=', sys[310], '&t2=', sys[311], '&t3=', sys[312], '&t4=', sys[313], '&t5=', sys[314], '&t6=', sys[315], '&t7=', sys[316], '&t8=', sys[317], '&t9=', sys[318], '&t10=', sys[319], '&t11=', sys[320], '&t12=', sys[321], '&t13=', sys[322], '&t14=', sys[323], '&t15=', sys[324], '&t16=', sys[325]);
  }
 }
 if (_portal_dns==1) {
  if (_portal_data==1) {
   http_get(sys[66],sys[67],sys[68],sys[69],'eportal.merenienergie.cz','/datas0.php?ver=1&devid=', 'thqgr2KVQX3aSKsmChjSxPzFflwQkn', '&t0v1=', sys[493], '&t0v2=', sys[494], '&t0v3=', sys[495], '&t0v4=', sys[496], '&t0v5=', sys[497], '&t0v6=', sys[498], '&t0v7=', sys[499], '&t0v8=', sys[500], '&t1v1=', sys[526], '&t1v2=', sys[527], '&t1v3=', sys[528], '&t1v4=', sys[529], '&t1v5=', sys[530], '&t1v6=', sys[531], '&t1v7=', sys[532], '&t1v8=', sys[533], '&av1=', sys[592], '&av2=', sys[593], '&av3=', sys[594], '&av4=', sys[595], '&av5=', sys[596], '&av6=', sys[597], '&av7=', sys[598], '&av8=', sys[599], '&tt=', sys[459]);
  }
  if (_portal_data==2) {
   http_get(sys[66],sys[67],sys[68],sys[69],'eportal.merenienergie.cz','/datatemp.php?ver=1&line=a&devid=', 'thqgr2KVQX3aSKsmChjSxPzFflwQkn', '&t1=', sys[310], '&t2=', sys[311], '&t3=', sys[312], '&t4=', sys[313], '&t5=', sys[314], '&t6=', sys[315], '&t7=', sys[316], '&t8=', sys[317], '&t9=', sys[318], '&t10=', sys[319], '&t11=', sys[320], '&t12=', sys[321], '&t13=', sys[322], '&t14=', sys[323], '&t15=', sys[324], '&t16=', sys[325]);
  }
 }

 sys[64] = 30;  //sekund

label cekam_na_http_smycka:
 if (sys[64] == 0) goto chyba_www_serveru;
 if (sys[65] == 0) goto cekam_na_http_smycka;
 if ((sys[65] != 1024)||(sys[75] != 200)) goto chyba_www_serveru;
  if (_portal_data==1) {
   echo('S0 odeslano na server, OK.');
  }
  if (_portal_data==2) {
   echo('Temp A odeslano na server, OK.');
  }
 _portal_data++;
 if (_portal_data<=4) goto odeslat;

 return;

label chyba_www_serveru:
 echo('Chyba komunikace s www serverem, http: ', sys[75]);
}

init
{
 echo('Start programu.');
 mez = 3012;
 odeslano = 0;
}

main
{
 if ((sys[9]==0 || sys[9]==15 || sys[9]==30 || sys[9]==45) && sys[10]==0){
  odesli_data_na_portal();
  if (sys[310] < mez) posli_email() else uz_je_nad();
  wait(2000);
 }
}

díky

s SDS - Micro začínám, ale učím se

2

Re: odeslání mailu

V uvedeném programu vidím jeden problém, a to že není ošetřeno zda-li lze bezpečně smtp_send() zavolat.
Protože ještě nemusí být dokončen http_get() a dokud jedna z OSI7 funkcí neskončí, nelze volat druhou.
Takže bude potřeba doplnit kód před všechny volání http_get() a smtp_send(),
plus případně doplnit kód za tyto funkce, který vyhodnotí chybu a např. ji napíše na konzoli.

Obecně pro ověření funkce programu samotného, je dobrou zvyklostí jej doplnit o: echo('info'); tam, kde se něco děje, a pak to sledovat na konzoli (192.168.1.250/echo.htm).


Pro ověření funkčnosti smtp_send() samotného:

Zkuste napsat jednoduchý program, který pouze odešle email (nebo třeba tři za sebou) a pak už nic dalšího neudělá.
Tím se ověří, že z vašeho místa lze email odeslat.

main
{
 smtp_send('nejakytest@seznam.cz', 'pokus', 'Toto je email 1.');
 wait(2000);
 smtp_send('nejakytest@seznam.cz', 'pokus', 'Toto je email 2.');
 wait(2000);
 smtp_send('nejakytest@seznam.cz', 'pokus', 'Toto je email 3.');
 wait(2000);

x:
 goto x;
}

Nebo, spusťte si SMTP server na svém PC a nastavte SDS tak, aby jeho SMTP nastavení ukazovalo na tento lokální server. Pak se podívejte, jestli email přišel.
Web je plný SMTP serverů pro windows, které stačí stáhnout a lokálně spustit, pro tento test.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

3

Re: odeslání mailu

Vyzkoušel jsem jednoduchý test a skončilo to chybou č.1 v historii 77.93.211.207, SMTP chyba 1  , nedostatečný time ....

s SDS - Micro začínám, ale učím se

4

Re: odeslání mailu

"SMTP chyba 1" je timeout, způsobený
a) nemožností se připojit k SMTP serveru nebo následnému výpadku komunikace (doba "klidu" od posledního TCP paketu komunikace překročila určenou dobu)
b) záměrným uzavřením komunikace SMTP serverem (poslal TCP RST)

Je potřeba zkontrolovat:
1. jestli SDS má přístup na SMTP server (je správně nastavena Gateway v SDS administraci, atd., ?)
2. jestli jsou správně nastaveny přístupové údaje (jméno heslo adresa)
3. jestli není na IP adresu, na které do Internetu vystupuje konkrétní SDS, uvalen "ban" (tj. jestli náhodou není na seznamu zakázaných adres u SMTP serveru, např. z důvodů spamu apod.).

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

5

Re: odeslání mailu

hm.. tak to je na mě moc složité :-)  budu muset někoho požádat aby se na to podíval .

s SDS - Micro začínám, ale učím se

6

Re: odeslání mailu

{
  //nastaveni hodnot po resetu zarizeni

  mez = 4915;  //tj 49.15 °C
  odeslano = 0;
}

posli_email
{
  if (odeslano == 0)
  {

    //jeste neodeslal, takze...

    smtp_send('xxxx@seznam.cz', 'teplotni alarm', 'Hlasim ze teplota (',sys[311],'°C) poklesla pod ',mez,'°C .');

  }

  odeslano = 1;  // VELMI DULEZITE - jedno z moznych reseni - ABY TO NEPOSILAL NEUSTALE DOKOLA, ale jen jednou kdyz se to stane !

  //treba muzeme zapnout rele pro topeni...
  RELE = 1;
}


uz_je_nad
{
  odeslano = 0; //nuluj, aby to mohl znovu poslat, jakmile teplota zase klesne

  //a ted treba to rele pro topeni vypneme
  RELE = 0;
}

main
{

 //udelame nekonecnou smycku

testuj_znovu:

 if (sys[311] < mez) posli_email() else uz_je_nad();

 goto testuj_znovu;
}

Prosím o radu jak doplnit do kodu hlidání teploty z dalsího tepl. čidla a odeslání na email.