SQL Server’da Mail Kontrolü Yapan Fonksiyon

Herkese merhaba,

Bu yazıda SQL Server’da mail kontrolü yapan fonksiyon ile ilgili bilgi vermeye çalışacağım.

SQL Server’da bazı durumlarda elinizde bulunan mail adresini kontrol etmek isteyebilirsiniz.

Aşağıdaki fonksiyonu kullanarak siz de bu işlemi rahatlıkla yapabilirsiniz.

CREATE FUNCTION fn_eMailKontrol
(
    @EmailAddr VARCHAR(360) 
)
RETURNS BIT 

AS
BEGIN
    DECLARE @AlphabetPlus VARCHAR(255),
            @Max INT,
            @Pos INT, 
            @OK BIT;  
 
    IF @EmailAddr IS NULL
       OR @EmailAddr NOT LIKE '[0-9a-zA-Z]%@__%.__%'
       OR @EmailAddr LIKE '%@%@%'
       OR @EmailAddr LIKE '%..%'
       OR @EmailAddr LIKE '%.@'
       OR @EmailAddr LIKE '%@.'
       OR @EmailAddr LIKE '%@%.-%'
       OR @EmailAddr LIKE '%@%-.%'
       OR @EmailAddr LIKE '%@-%'
       OR CHARINDEX(' ', LTRIM(RTRIM(@EmailAddr))) > 0
        RETURN (0);

    DECLARE @AfterLastDot VARCHAR(360);
    DECLARE @AfterArobase VARCHAR(360);
    DECLARE @BeforeArobase VARCHAR(360);
    DECLARE @HasDomainTooLong BIT = 0;

    SET @AfterLastDot = REVERSE(SUBSTRING(REVERSE(@EmailAddr), 0, CHARINDEX('.', REVERSE(@EmailAddr))));
    IF LEN(@AfterLastDot) NOT
       BETWEEN 2 AND 17
        RETURN (0);

    SET @AfterArobase = REVERSE(SUBSTRING(REVERSE(@EmailAddr), 0, CHARINDEX('@', REVERSE(@EmailAddr))));
    IF LEN(@AfterArobase) NOT
       BETWEEN 2 AND 255
        RETURN (0);

    SELECT TOP 1
           @BeforeArobase = value
    FROM STRING_SPLIT(@EmailAddr, '@');
    IF LEN(@AfterArobase) NOT
       BETWEEN 2 AND 255
        RETURN (0);

    SELECT TOP 1
           @HasDomainTooLong = 1
    FROM STRING_SPLIT(@AfterArobase, '.')
    WHERE LEN(value) > 63;
    IF @HasDomainTooLong = 1
        RETURN (0);

    SELECT @AlphabetPlus = 'abcdefghijklmnopqrstuvwxyz01234567890!#$%&‘*+-/=?^_`.{|}~',
           @Max = LEN(@BeforeArobase),
           @Pos = 0,
           @OK = 1;


    WHILE @Pos < @Max AND @OK = 1
    BEGIN
        SET @Pos = @Pos + 1;
        IF @AlphabetPlus NOT LIKE '%' + SUBSTRING(@BeforeArobase, @Pos, 1) + '%'
            SET @OK = 0;
    END;

    IF @OK = 0
        RETURN (0);

    --Control de la partie domaine en detail
    SELECT @AlphabetPlus = 'abcdefghijklmnopqrstuvwxyz01234567890-.',
           @Max = LEN(@AfterArobase),
           @Pos = 0,
           @OK = 1;

    WHILE @Pos < @Max AND @OK = 1
    BEGIN
        SET @Pos = @Pos + 1;
        IF @AlphabetPlus NOT LIKE '%' + SUBSTRING(@AfterArobase, @Pos, 1) + '%'
            SET @OK = 0;
    END;

    IF @OK = 0
        RETURN (0);

    RETURN (1);

END;
GO


--Kullanımı


SELECT dbo.fn_eMailKontrol('y.selimkart@gmail.com')

Yukarıdaki fonksiyonu oluşturup çalıştırınca aşağıdakine benzer bir sonuç göreceksiniz.

Görüldüğü üzere email adresinin geçerli bir mail adresi olup olmadığı görülmüş oldu.

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

262 Kez Okundu

Yavuz Selim Kart

Yazılım ve veri tabanında bildiklerimi anlatmaya gayret ediyorum. Halen birçok programlama dili üzerinde araştırmalar yaparak kendimi geliştiriyorum. Bunlar haricinde Grafik Tasarım ve Wordpress konularına da ilgim bulunmakta. SEO ve Sosyal medya yönetimleri hakkında da bilgim mevcuttur. Kısaca çok çalışmayı seven azimli biriyim.

You may also like...

Yazı kopyalamak yasaktır!