<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="https://www.schweda.net/style_feed.css" ?>
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:atom="http://www.w3.org/2005/Atom"	
	xmlns:dc="http://purl.org/dc/elements/1.1/" > 
<channel>
    <title>schweda.net - Blog</title>
    <link>https://www.schweda.net/</link>
    <description>schweda.net - Blog - Blog-Beitraege</description>
    <language>de-at</language>
    <copyright>Copyright 2006-2026</copyright>
    <generator>schweda.net</generator>
    <managingEditor>heinz.schweda@schweda.net (Heinz Schweda)</managingEditor>
    <webMaster>heinz.schweda@schweda.net (Heinz Schweda)</webMaster>
    <category>Blog</category>
	<atom:link href="https://www.schweda.net/blog_rss.php?bid=158" rel="self" type="application/rss+xml" />
<item>
<title><![CDATA[e-Mail-Validierung in MS Dynamics AX]]></title>
<description><![CDATA[
<p>Manchmal ist es notwendig, eingegebene E-Mail-Adressen auf deren Syntax hin zu &uuml;berpr&uuml;fen. Genau f&uuml;r dieses Zweck habe ich die nachfolgende Methode geschrieben. Schliesslich verf&uuml;gt MS Dynamics AX erst ab Version 4.0 &uuml;ber eine entsprechende eigene Methode (SysEmailDistributor.validateEmail).
</p>


<pre class="pre_blog_axcode">
static boolean isValidMailAddress(str _mailAddress, str 2 _separator4MultipleAddresses = &quot;;&quot;)
{
    // Pr&uuml;ft Mail-Adressen auf ihre G&uuml;ltigkeit.
    // Es k&ouml;nnen auch mehrere Adressen auf einmal gepr&uuml;ft werden, dabei ist der Parameter _separator4MultipleAddresses zu verwenden

    boolean     ret = true;
    int         i = 0;
    str 1       buchstabe, firstZeichen = &#39;&#39;, firstDomainZeichen;
    int         firstAT = 0, firstDot = 0, lastDot = 0;
    str         errorText = &#39;&#39;;
    int         z, x, y;
    email       SubMailAddr;
    container   SubMailAddrContainer, c;

    container str2conLocal(str _value, str 10 _sep = &#39;,&#39;)    // str2con von AX30 ist fehlerhaft, wenn der ein Teilstring mit einer
    {                                                        // Zahl beginnt und als Separatir , verwendet wird
        int length = strlen(_value);
        int u = 1;
        int j = strscan(_value, _sep, 1, length);
        container retContainer;
        while (j)
        {
            retContainer+=(substr(_value, u, j-u));
            u = j+1;
            j = strscan(_value, _sep, u, length);
        }
        retContainer+=(substr(_value, u, length-u+1));
        return retContainer;
    }
    ;

    if(strLen(_MailAddress) == 0)
    {
        return true;
    }

    SubMailAddrContainer = str2conLocal(_MailAddress, _separator4MultipleAddresses);

    for(z=1;z&lt;=ConLen(SubMailAddrContainer);z++){
        SubMailAddr = ConPeek(SubMailAddrContainer,z);
        if(subMailAddr == &#39;&#39;)
        {
            continue;
        }
        // Variablen initieren
        i=0;
        firstzeichen=&#39;&#39;;
        firstDomainZeichen=&#39;&#39;;
        lastdot=0;
        firstDot=0;
        firstAT=0;
        buchstabe=&#39;&#39;;
        errorText = StrFmt(&#39;Die E-Mail-Adresse &quot;%1&quot; wurde falsch eingegeben&#39;, subMailAddr) + &#39;. &#39;;

        // ###### Start der Pr&uuml;fung ###########
        lastDot = strFind(SubMailAddr, &#39;.&#39;, strLen(SubMailAddr), -1 * strLen(SubMailAddr));

        // @ mu&szlig; zumindest einmal vorkommen
        firstAT = StrScan(SubMailAddr, &#39;@&#39;, 1, strLen(SubMailAddr));
        if(firstAT == 0)
        {
            return checkFailed(errorText + &#39;In der Mail-Adresse mu&szlig; zumindest ein @-Zeichen vorkommen&#39;);
        }
        // @ darf nur einmal vorkommen
        if(StrScan(SubMailAddr, &#39;@&#39;, firstAT + 1, strLen(SubMailAddr)) != 0)
        {
            return checkFailed(errorText + &#39;Das @-Zeichen darf nur einmal vorkommen&#39;);
        }

        // . mu&szlig; zumindest einmal vorkommen
        firstDot = StrScan(SubMailAddr, &#39;.&#39;, 1, strLen(SubMailAddr));
        if(firstDot == 0)
        {
            return checkFailed(errorText + &#39;In der Mail-Adresse mu&szlig; zumindest ein Punkt vorkommen&#39;);
        }

        // nach dem @ mu&szlig; zumindest 1 punkt kommen
        if(StrScan(SubMailAddr, &#39;.&#39;, firstAT, strLen(SubMailAddr)) == 0)
        {
            return checkFailed(errorText + &#39;Nach dem @-Zeichen muss zumindest ein Punkt vorkommen&#39;);
        }

        // nach dem letzten punkt darf nur 2 bis 4 zeichen kommen
        if(StrLen(SubStr(SubMailAddr,lastDot +1,strLen(SubMailAddr))) &gt; 4 || StrLen(SubStr(SubMailAddr,lastDot +1,strLen(SubMailAddr))) &lt; 2)
        {
            return checkFailed(errorText + &#39;Die Dom&auml;n-Endung muss aus mindestens 2 und maximal 4 Zeichen bestehen&#39;);
        }

        // Sub-Dom&auml;nen m&uuml;ssen zumindest 2 Stellen gross sein und m&uuml;ssen mit A-Z oder 0-9 anfangen
        c = str2conLocal(SubStr(SubMailAddr, firstAT + 1, strLen(SubMailAddr)), &quot;.&quot;);
        for (x=1; x&lt;=conLen(c); x++)
        {
            firstDomainZeichen = SubStr(conPeek(c,x), 1,1);
            if( !( ( char2num(firstDomainZeichen,1) &gt;= 97 &amp;&amp; char2num(firstDomainZeichen,1) &lt;= 122 ) ||
                   ( char2num(firstDomainZeichen,1) &gt;= 48 &amp;&amp; char2num(firstDomainZeichen,1) &lt;= 57 ) ||
                   ( char2num(firstDomainZeichen,1) &gt;= 65 &amp;&amp; char2num(firstDomainZeichen,1) &lt;= 90 ) ) )
            {
                return checkFailed(errorText + &#39;Jede Subdom&auml;ne muss mit einem Buchstaben oder einer Zahl beginnen&#39;);
            }

            if(strLen(conPeek(c,x)) &lt; 2)
            {
                return checkFailed(errorText + &#39;Jede Subdom&ouml;ne muss aus zumindest 2 Zeichen bestehen&#39;);
            }

            // Subdom&auml;nen d&uuml;rfen nur aus A-Z 0-9 oder - bestehen
            for(y=1;y&lt;=strLen(conPeek(c,x));y++)
            {
                buchstabe = SubStr(conPeek(c,x),y,1);
                if( !(char2num(buchstabe,1) == 45 ||    // -
                      ( char2num(buchstabe,1) &gt;= 97 &amp;&amp; char2num(buchstabe,1) &lt;= 122 ) ||
                      ( char2num(buchstabe,1) &gt;= 48 &amp;&amp; char2num(buchstabe,1) &lt;= 57 ) ||
                      ( char2num(buchstabe,1) &gt;= 65 &amp;&amp; char2num(buchstabe,1) &lt;= 90 ) ) )
                {
                    return checkFailed(errorText + strFmt(&#39;In der Subdom&auml;ne &quot;%1&quot; ist das Zeichen &quot;%2&quot; nicht erlaubt!&#39;,conPeek(c,x),buchstabe));
                }
            }
        }

        // Text vor dem @ (durch Punkte getrennt) muss mindestens 1 Stelle lang sein
        c = ConNull();
        c = str2conLocal(SubStr(SubMailAddr, 1, firstAT-1), &quot;.&quot;);
        for (x=1; x&lt;=conLen(c); x++)
        {
            if(strLen(conPeek(c,x)) &lt; 1)
            {
                return checkFailed(errorText + &#39;Der Text vor dem @-Zeichen ist ung&uuml;ltig&#39;);
            }
        }

        // mu&szlig; mit a-z oder A-Z oder 0-9 beginnen
        firstZeichen = SubStr(SubMailAddr, 1,1);
        if( !(( char2num(firstZeichen,1) &gt;= 97 &amp;&amp; char2num(firstZeichen,1) &lt;= 122 ) ||
            ( char2num(firstZeichen,1) &gt;= 48 &amp;&amp; char2num(firstZeichen,1) &lt;= 57 ) ||
            ( char2num(firstZeichen,1) &gt;= 65 &amp;&amp; char2num(firstZeichen,1) &lt;= 90 )) )
        {
            return checkFailed(errorText + &#39;Die Mailadresse muss mit einem Buchstaben oder einer Zahl beginnen&#39;);
        }

        // G&uuml;ltiges Zeichen
        i = 0;
        for(i=1;i&lt;=StrLen(SubMailAddr);i++)
        {
            buchstabe = SubStr(SubMailAddr,i,1);

            if( !(char2num(buchstabe,1) == 46 ||    // .
                  char2num(buchstabe,1) == 45 ||    // -
                  char2num(buchstabe,1) == 95 ||    // _
                  char2num(buchstabe,1) == 64 ||    // @
                  char2num(buchstabe,1) == 228 ||   // &auml;
                  char2num(buchstabe,1) == 252 ||   // &uuml;
                  char2num(buchstabe,1) == 246 ||   // &ouml;
                  char2num(buchstabe,1) == 196 ||   // &Auml;
                  char2num(buchstabe,1) == 220 ||   // &Uuml;
                  char2num(buchstabe,1) == 214 ||   // &Ouml;
                  ( char2num(buchstabe,1) &gt;= 97 &amp;&amp; char2num(buchstabe,1) &lt;= 122 ) ||
                  ( char2num(buchstabe,1) &gt;= 48 &amp;&amp; char2num(buchstabe,1) &lt;= 57 ) ||
                  ( char2num(buchstabe,1) &gt;= 65 &amp;&amp; char2num(buchstabe,1) &lt;= 90 ) ) )
            {
                return checkFailed(errorText + strFmt(&#39;Ung&uuml;ltiges Zeichen &quot;%1&quot; in der Mail-Adresse&#39;, buchstabe));
            }
        }
    }

    return true;
}
</pre>



<p>Obiger Code sollte in allen AX-Versionen funktionieren. Verwendung nat&uuml;rlich auf eigene Gefahr.
</p>]]></description>
<category>Microsoft Dynamics AX (Axapta)</category>
<pubDate>Thu, 18 Oct 2007 16:40:00 +0200</pubDate>
<link>https://www.schweda.net/blog_ax.php?bid=158</link>
<comments>https://www.schweda.net/blog_ax.php?bid=158</comments>
<guid isPermaLink="true">https://www.schweda.net/blog_ax.php?bid=158</guid>
<author>heinz.schweda@schweda.net (Heinz Schweda)</author>
<wfw:commentRss>https://www.schweda.net/blog_ax.php?bid=158</wfw:commentRss>
</item>
</channel>
</rss>	
