Hauptmenü

Smtp_client Fehler

Begonnen von j_poool, 19. Januar 2013, 11:46:09

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

j_poool

Hallo!  :D
Habe Probleme beim versenden von Email mittels Smtp_client Baustein.
Alle erforderlichen Bibliotheken sind vorhanden, SMTP Server ist auf CPU installiert.

Danke für den Support


[gelöscht durch Administrator]

peewit

#1
hallo

Siehe SMTP-Client Dokumentation !!

ERROR_T = 5
ERROR_C = 124518930

ERROR_C musst du als HEX Zahl betrachten

ERROR_C = 0x076C_0212
das ergibt
Ablauf-Schrittnummer 0x076C = 1900
Response-Code 0x0212 = 530

530 = SMTP authentication is required


kurz gesagt der SMTP Baustein kann keine Login verfahren anwenden , die auch von hotmail akzeptiert werden
ich vermute das hotmail ausschliesslich mit SSL übertragung nutzbar ist, und das unterstützt der baustein nicht

das einfachste ist wenn du dir für deine sps einen kostenlosen emailaccount bei gmx.de holst, und diesen account beim smtp-client nutzt, du kannst dir ja trotzdem die email dann auf deine hotmail adresse senden
du verwendest nur einen anderen absende account !!


j_poool

Hallo Peewit!
Danke für deine schnelle Antwort.
....nur stehe ich schon beim nächstes Fehler....(Anhang)

Vielen Dank fur dein Support.

[gelöscht durch Administrator]

peewit

hallo

error_t = 2                    -> Störung: SMTP Steuerkanal
error_c = 0xff00_0000  -> Connect fehler - Baustein kann keine tcp verbindung zum angegebenen Teilnehmer aufbauen

warum:
mehr kann ich auch nicht sagen, da ja alles anderen daten bei dir nicht sichtbar sind.


ich empfehle dir das demo in der network bibliothek auszuprobieren !

bibliothek als projekt öffnen
und dann im ordner "demo" -> programm "smtp_client_demo" benutzten



j_poool

Ok, vielen Dank. Ich werde nochmals ein paar Versuche durchführen

Danke  :)

rrbd

Hm, ich komme gerade mit demselben Problem nicht weiter, ich hoffe, Ihr seid einverstanden, dass ich mich trotz anderer SPS und Programmierumgebung mal einklinke.

Ich habe in einem ansonsten funktionierenden Textprogrämmchen SMTP_CLIENT eingebaut, um einen kurzen Betreff und Body an meine normale E-Mail-Adresse auf dem PC zu schicken.

Wenn ich über Debug-Umgebung manuell ACTIVATE auf 1 setze geht der Baustein für TIMEOUT (60s) auf BUSY, anschließend sehe ich 2 Störmeldungen, bekomme aber keine mail.

ERROR_T: 5
In der mir vorliegenden Beschreibung am Baustein nicht erklärt, Tabelle fehlt offensichtlich (lerrer weißer Bereich). Ob ich die Beschreibung von DLOG_FILE_TO_FTP? Übernehmen dar? Dann wäre es "Störung: ABLAUF â€" TIMEOUT" (so sthet's auch im Handbuch Netlib131)
ERROR_C: 655360 (Dezimalanzeige)
Das sagt mir leider nichts

Habe ich mal eine DNS_IP angegeben, wobei mich das DW verwunderte, ein DW ist ja doch sehr anders als eine IP Adresse. Wie mag der Baustein das auseinanderpulen? Ist so eine Angabe 81142439  auch ohne Punkte dazwischen eindeutig? Keine Ahnung! Verhalten ändert sich nun, ERROR_T: 0, ERROR_C: 65280 gleich von Anfang an.

Also lieber wieder weg damit.

Liegt's an einem falschen DTI? Ich habe keine mir Verständliche Angabe zum geforderten Format gefunden

sWhatFiles ist einfach leer.

SPS: Phoenix ILC 130 ETH 2.0.5.9062  Firmware V3.70.04 09/30/10 HW 01
Programmiersoftware: PC WORX EXPRESS
OSCAD: NetLib121 (und andere mehr, da funktioniert alles).
Netzwerk: SPS Teil meines Home-Hetzwerks (Via Netgear Router) mit fester IP,
Bausteinbeschaltung: Siehe Anlage

Das Demo hätte ich mir gern angesehen, verstehe aber nicht recht, wie ich den Inhalt des Ordners einbinden kann.

Wer kann mir helfen?

[gelöscht durch Administrator]

peewit

#6
dns_ip sieht normalerweise etwa so aus 192.168.0.10
das sind 4 x werte zwischen 0 und 255 , also 4 x 1 Byte
und 4 byte ergeben auch ein dword
somit kann man eine ip-adresse auch als dword angeben, bzw. so wird das intern auch verarbeitet !

-------------------------------------------
du hast keine dns_ip4 adresse vorgegeben !

wenn du als mail-server adresse keine ip-adresse sondern einen dns-namen angibt , dann ist auch eine dns-abfrage notwendig
damit das funktioniert, musst du bei dns-ip4 eine ip-adresse eines dns-servers angeben, ansonsten kann der name nicht aufgelöst werden
weiters musst du beim email-server die adresse der email-server angeben, und nicht eine emailadresse obwohl das zum teil richtiges enthält.

z.b. wenn  die email adresse folgende ist "peewit@gmx.net"
ist die richtige mailserver adresse "mail.gmx.net"

die daten musst du dir von deinen provider besorgen
--------------------------------------------------------------------
du musst auch bei deiner sps in den network-setting eine gateway-adresse vorgaben, ansonsten wird auch nichts funktionieren
--------------------------------------------------------------------
demo-programm in der network.lib

du öffnest du network bibliothek als projekt und exportierst aus dem ordner "demo" das programm "smtp-client-demo"
und importierst es in dein eigenes projekt, dort kannst du es dann auch beliebig anpassen

vorher solltest du es aber so belassen und mal ausprobieren, denn es sollte ansich so auch schon funktionieren (mit dem vorgegebenen test-account)

wenn du dann nicht geht, kannst du mir wieder den fehler-code mitteilen, und dann schauen wir weiter .....


rrbd

Hallo peewit,
danke für die Rückmeldung!
dns_ip4: als Doppelwort mit hex-Gruppen bin ich nicht drauf gekommen, habe ich eingetragen. Das Ergebnis sollte 81.14.243.9 darstellen, das habe ich der Routerkonfiguration meines Netzwerks entnommen. Mein Eintrag ist zumindest gültig, ich hatte mich vorher vertippt und hatte dann eine Dauerfehlermeldung vor dem ersten Versand.
Mailserver: Vermutlich war das Bild wegen der unkenntlich gemachten Authentifizierung schwer zu deuten: Der mailserver ist "mail.bielefeldundbuss.de", die Variable enthält username:password@mail.bielefeldundbuss.de:110 (den Port hatte ich heute Vormittag noch nicht mit drin).  Die Daten sind erprobt, ich habe den Mailaccount auch auf meinem PC eingerichtet, das funktioniert.
Standard-Gateway: ist in der SPS hinterlegt

Weitere Variableninhalte:
DTI = 25. September 2008 um 10:01:00 per FSTRING_TO_DT mit #D. #N #Y #h:#m:#s = 48DAD4BC
sWhatFiles leer

Zwischenstand: Nun habe ich nach dem Ablauf von Busy Error_T=1 und ERROR_C=0000FF00. Wenn ich das richtig sehe also eine DNS-Client-Meldung. Wenn da nur 00 relevant wäre würde das ja "erfolgreich" heißen, aber ich habe keine Mail  an die angegebene postmaster-Adresse bekommen.
Beim nächsten Versuch im laufenden Betrieb (diesmal an info@bielfeldundbuss.de) verschwanden die Errormeldungen mit dem Busy=1, kamen aber nach Timeout zurück und ebenfalls ohne dass ich eine Mail bekommen hätte. Irgendetwas scheine ich also noch falsch zu machen, gibt Dir der nächste Screenshot Aufschluss?

Ich schaue mir zunächst mal das Beispiel gemäß deiner Anleitung an.

[gelöscht durch Administrator]

peewit

dns_ip4 = 81.14.243.9 das ergibt als dword    51 / 0e / f3 / 09    also 0x510ef309
und nicht das was du am baustein angegeben hast



die fehlermeldung besagt auch , das ein udp-telegramm an die angegebene adresse versendet wurde und keine antwort
erhalten wurde, wobei die anscheiend falsche adresse der grund sein könnte

benutze doch einfach den dns-server von google mit der ip-adresse 8.8.8.8
da kannst du dir sicher sein, das dieser auch immer erreichbar ist !

damit du deinen problemen mit der codierung von ip-adresse aus dem weg gehen kannst, benutzt die einfach eine der beiden
bausteine DWORD_OF_BYTE oder IP4_DECODE, so wie ich das bei allen demo programmen gemacht habe.


rrbd

Hallo,
LÄUFT!

  • dns_ip4: Sorry, mein Fehler, ich im Programm die IP-Adresse des einen vom Provider angebotenen DNS-Servers verwendet, hier in der Diskussion aber die andere aufgeführt. Das hatte aber keinen Einfluss, und auch mit der 8.8.8.8 hatte ich kein Glück habe dann erst mal aufgegeben
  • Heute habe ich mir dann mal das Beispiel ans der Lib. angesehen. Import habe ich versucht, aber mein PCWORX Express hatte dann keine Variableninhalte mehr und Variablentypen waren teilweise falsch. Also händisch Variablennamen, Inhalte und Typen übertragen, und mit dem GMX-Testaccount probiert, funktionierte! Meinen Provider-Mailserver etc eingesetzt, lief! Wirklich Unkontrolliert geändert hat sich eigentlich nur der Zeiteingang, habe mir die Konstruktion für das Umwandeln der Systemzeit eingebaut, den Rest habe ich von den gleichen Quellen wie bei meinen gescheiterten Anläufen in die Variablen kopiert, der einzige Unterschied, der mir deutlich auffiel, waren andere String(-Längen)-Typen. Die Vorstellung erscheint mir zwar merkwürdig, aber kann es theoretisch sein, dass die Wahl der korrekten Stringlängenvorgabe funktionswichtig ist? Wenn ja, sollte das auf jeden Fall in die Doku übernommen werden. Momentan habe ich aber wenig Zeit, das noch mal in Ruhe auszuprobieren.
  • Zeitzonenkorrektur verstehe ich noch nicht. Bei "0" zeig die Empfangene Mail Merkwürdiger Weise UTC +2h, obwohl mein DT UTC+1 = MEZ ist. Bei DTI_OFFSET= +1: ca 20h zu viel. Bei "60" gut 19h zu viel. Bei -60 Wird die Sendezeit 1h Hochgesetzt. Könntest Du dazu noch mal etwas sagen?
Zumindest für einen Umsteiger aus einer ganz anderen SPS-Welt wären folgende Dokumentationsergänzungen sehr hilfreich:

  • Wirkung von DTI_OFFSET (welcher Wert bewirkt welche Änderung?)
  • DNS_IP4: Hinweis auf IP4_DECODE  und Beschreibung der manuellen Umrechnung, in etwa : "Um eine IP-Adresse in die das erforderliche Doppelwort umzuwandeln muss jeder Teil der Adresse einzeln in 2 Hex-Digits umgewandelt werden. Beispiel: IP-Adresse 192.168.1.32 in Hex wäre C0,A8,01,20 und wird das DW C0A80120" 

Vielen Dank für Deine Hilfe und Geduld!

peewit

zeitzone

dti ist deine aktuelle systemzeit
dti_offset ist die zeitdifferenz deiner dti-zeit zur weltzeit (utc) und wird in minuten angegeben

wenn also dti deine aktuelle lokale zeit ist, dann muss nun weil keine sommerzeit ist ein dti_offset = 60 vorgegeben werden
dass bedeutet das die übergegebene zeit dti um + 60 minuten gegenüber der weltzeit abweicht.

ich habe den baustein gerade nochmals auf basis codesys getestet, und habe beim email empfang die korrekte zeit angezeigt bekommen.

du solltest bei dir nochmals alles überprüfen, sollte es trotzdem nicht klappen, so werde ich mir es wohl auf einer phoenix sps ansehen müssen.


rrbd

#11
Hallo,
ich habe noch mal alles überprüft und kann bezüglich der Zeitkorrektur DTI_OFFSET finden. Ich habe mein Testprogramm etwas erweitert, so dass mir die aktuelle Zeitkorrektur in Minuten sowie die Systemzeit in den Mailbody geschrieben werden. Dann habe ich ein paar mal ACTIVATE per Hand gesetzt und dann die Mailbodies und die Angegebene Zeit im empfangenen Mailheader in eine Tabelle eingetragen. Das Ergebnis:

Systemzeit                                    Mail-Zeit          Differenz
-------------------------------------------------------------------------
02.02.2013 17:20:08          Korrektur   0   02.02.13 18:20   00:59:52
02.02.2013 17:27:03      Korrektur   0   02.02.13 18:27   00:59:57
02.02.2013 17:27:36      Korrektur   -1   02.02.13 18:28   01:00:24
02.02.2013 17:30:19      Korrektur   -2   02.02.13 18:32   01:01:41
02.02.2013 18:11:08      Korrektur   0   02.02.13 19:11   00:59:52
02.02.2013 18:11:47          Korrektur   -60   02.02.13 20:11   01:59:13
02.02.2013 18:12:29          Korrektur   -120   02.02.13 21:12   02:59:31
02.02.2013 17:21:40          Korrektur   60   03.02.13 11:33   18:11:20
02.02.2013 17:22:04      Korrektur   30   03.02.13 12:04   18:41:56
02.02.2013 17:24:24          Korrektur   5   03.02.13 12:31   19:06:36
02.02.2013 17:25:27          Korrektur   2   03.02.13 12:35   19:09:33
02.02.2013 17:25:56          Korrektur   1   03.02.13 12:37   19:11:04

Oder anders: Für negative DTI_OFFSET ist die Korrektur wie zu erwarten,für Positive passiert irgend etwas merkwürdiges.

Wenn du's nicht mit einem eigenen Programm reproduzieren kannst schicke ich Dir gern mein Programm. Ich habe die Tabelle noch mal als .csv (ISO 8859-1, Semikolon) beigepackt

Bei meinen Tests fiel mir ein anderes Problem auf, das ich zunächst noch selbst etwas weiter untersuchen will (ohne dass ich mir viel davon verspreche): Der E-Mail-Versand arbeitet sehr unzuverlässig, vorgestern gelegentlich, heute mit geändertem Programm) meistens wird keine Mail verschickt, der Versuch endet mit
Error_T=1 und ERROR_C=FD000000
oder
Error_T=2 und ERROR_C=FD000000

Wollen wir das hier im Beckhoff-Hilferuf weiter erörtern oder lieber an besserer stelle einen neuen Thread öffnen?


[gelöscht durch Administrator]

peewit

#12
Hallo

Ich glaube ich muss das nochmals erklären

mit dem parameter DTI und DTI_Offset wird beim email eingetragen zu welcher Weltzeit die email versendet wurde.

normalerweise laufen die uhren auf der sps als lokalzeit (so wird es von den meisten gemacht, was aber eigentlich nicht optimal ist, aber das ist ein anderes thema)

beispiel:

Es ist nun 22:00:00 weltzeit und in Wien in lokaler Zeit gerechnet 23:00 weilo es hier ja eine Stunde Zeitoffet zur Weltzeit gibt.

wenn du nun 23:00 beim email versenden angibst und eine zeitkorrektur von 60 angibst, so verwendet der baustein dann intern
22:00:00 weil der die weltzeit beim versenden angeben muss. Ein Email Server agiert ja unabhängig vom Email-Client das heisst von irgendwo auf der Welt können die Email kommen, und somit interessiert den Emailserver nur die Weltzeit !
Wenn du aber eine falsche Zeit beim Absenden angibst so wird die vom emailserver demensprechend als Absendezeit gerechnet und als weltzeit interpretiert, und wenn du die dann die empfangene email ansiehst siehst die wieder eine lokale zeit

beim emailversand passiert folgendes:

1. dns namen wird beim dns-server angefragt und mit der ermittelten ip wird der email server kontaktiert
2. das verbinden zum emailserver und die kommunikation dauert dann unterschiedlich lange, und kann einige sekunden dauern
3. die zeit wird aber erst zu einem bestimmten zeitpunkt aktuell übernommen und dem emailserver übergeben, das kann einige
    sekunden dauern (du kannst mal probeweise eine fixe zeit vorgeben, dann wirst du sehen dass die sekunden exakt passen
    also die abweichungen im sekunden bereich ist ziemlich sicher logisch nachvollziehbar

ich habe nochmals tests gemacht auf basis codesys mit dem referenzcode und da ist alles nachvollziehbar und korrekt
also der baustein ist ansich korrekt programmiert,

aber die zeitdifferenzen auf der pcworx plattform könnten ein reales problem sein , das ich mir noch ansehen muss !!

1. welche pcworx version verwendest du
2. welche sps hast du , und welche firmware version hast du drauf

rrbd

Hallo,

> Ich glaube ich muss das nochmals erklären

nein das ist soweit schon klar, es geht hier auch nicht um ein paar Sekunden.

Wie du in der Tabelle siehst, liegt die Zeit im Mailheader für positive DTI_OFFSET um ca 19:12:00 minus  DTI_OFFSET gegenüber der korrekten Zeit in der Zukunft. Bei mir klingelt da (oder bei anders 1092 Minuten) nichts, naheliegend wäre ja irgendein-Zahlenformats-Umrechnungs-Wasweißich-Fehler.

Bei negativen DTI_OFFSET erscheint im Mail-Header eine korrekte Zeit.

Ist jetzt kein allzu großes Problem, ich kann ja einfach die Eingabe an DTI passend manipulieren, damit die Zeitangabe im Mailheader stimmt, aber schöner wäre natürlich eine korrekte Funktion bei Nutzung der vorgesehenen Korrekturfunktion.

Hier die Angaben:
PS: Phoenix ILC 130 ETH 2.0.5.9062  Firmware V3.70.04 09/30/10 HW 01
Programmiersoftware: PC WORX EXPRESS 6.20.331
OSCAD: NetLib121

peewit

#14
Hallo

habe es auf einer ilc 150eth nachgestellt, und auch den fehler gefunden

aufgrund dessen das bei pcworx es keine komplette date/time unterstützung gibt, habe ich diesen part extra angepasst
und dabei gibt es noch andere sachen die hier nicht gleich funktionieren

nähmlich "INT_TO_UDINT"

bei codesys wird eine negative zahl so gewandelt das das highword mit FFFF gefüllt wird, und bei pcworx wird das mit 0000 gefüllt
da ich diesen unterschied ja eigentlich gut kenne habe ich in der oscat_basic schon eine kombatibilität-routine integriert
die heisst "_INT_TO_UDINT" und bringt die gleichen ergebnisse wie bei codesys
nur habe ich es wieder einmal übersehen, das ich die andere routine verwende
(bin halt auch nur eine mensch !)

fehlerbereinigung (betrifft nur die pcworx version der network library)

die oscat_network bibliothek als projekt öffnen und den baustein SMTP_CLIENT öffnen

dort gehst du auf zeile 185 und tauscht du nachfolgend angeführte zeile aus (es ist nur ein "_" hinzugekommen
dann funktionieren auch positive offset vorgaben


SMTP_CLIENT (Zeile 185)

DTI := DTI + _INT_TO_UDINT(- DTI_OFFSET * 60); (* Minuten-Offset auf Sekunden umrechnen und addieren *)


kleine änderung grosse wirkung

viel spass noch, und danke für deine konstruktive mitarbeit