সি # কোড ইমেল ঠিকানা যাচাই করতে


461

কোনও স্ট্রিং একটি বৈধ ইমেল ঠিকানা যাচাই করার জন্য সবচেয়ে মার্জিত কোডটি কী?




অন্যান্য অনেক গুরুত্বপূর্ণ বৈধতা আছে যা কেবল স্ট্রিংই নয়, এই এসএমটিপি সার্ভারে ইমেলটি উপস্থিত রয়েছে কিনা বা ব্যবহারকারী কোনও ইমেল প্রবেশ করছে কিনা তা পরীক্ষা করা ভাল etc ver
আমর

মাইক্রোসফ্ট ডকস.মাইক্রোসফট
কিশোর

আপনি github.com/jstedfast/ ইমেইলভালিডেশন লাইব্রেরি ব্যবহার করতে পারেন ।
মোহাম্মদ রেজা সদরদিনী

উত্তর:


783

এই সম্পর্কে কি?

bool IsValidEmail(string email)
{
    try {
        var addr = new System.Net.Mail.MailAddress(email);
        return addr.Address == email;
    }
    catch {
        return false;
    }
}

পরিষ্কার করার জন্য, প্রশ্নটি জিজ্ঞাসা করছে যে কোনও নির্দিষ্ট স্ট্রিং কোনও ইমেল ঠিকানাটির বৈধ উপস্থাপনা কিনা, কোনও ইমেল ঠিকানা কোনও বার্তা প্রেরণের বৈধ গন্তব্য কিনা তা নয়। তার জন্য, একমাত্র আসল উপায়টি নিশ্চিত করার জন্য একটি বার্তা প্রেরণ করা।

নোট করুন যে ইমেল ঠিকানাগুলি আপনি প্রথম অনুমানের চেয়ে বেশি ক্ষমা করবেন। এগুলি পুরোপুরি বৈধ ফর্ম:

  • দন্তযুক্ত @ চাকা
  • "কমলা কগওহিল" @ উদাহরণ.com
  • 123@$.xyz

বেশিরভাগ ব্যবহারের ক্ষেত্রে, একটি মিথ্যা "অবৈধ" আপনার ব্যবহারকারীদের জন্য এবং ভবিষ্যতের প্রুফিং মিথ্যা "বৈধ" এর চেয়ে অনেক খারাপ। এখানে একটি নিবন্ধ যা এই প্রশ্নের গৃহীত উত্তর হিসাবে ব্যবহৃত হত (সেই উত্তরটি মুছে ফেলা হয়েছে)। এটিতে আরও কীভাবে সমস্যা সমাধান করা যায় তার আরও অনেকগুলি বিশদ এবং কিছু ধারণা রয়েছে।

স্যানিটি চেক সরবরাহ করা এখনও ব্যবহারকারীর অভিজ্ঞতার জন্য ভাল ধারণা। ই-মেইল ঠিকানাটি বৈধ বলে ধরে নেওয়া, আপনি পরিচিত শীর্ষ স্তরের ডোমেনগুলি সন্ধান করতে পারেন, একটি এমএক্স রেকর্ডের জন্য ডোমেনটি পরীক্ষা করতে পারেন, সাধারণ ডোমেন নামগুলি (gmail.cmo) থেকে বানান ত্রুটিগুলি পরীক্ষা করতে পারেন Then তারপরে ব্যবহারকারীকে একটি সতর্কতা উপস্থাপন করুন "হ্যাঁ, আমার মেইল ​​সার্ভারটি সত্যই একটি ইমেল ঠিকানা হিসাবে অনুমতি দেয় say" বলার সুযোগ।


ব্যবসায়ের যুক্তি হিসাবে ব্যতিক্রম হ্যান্ডলিং ব্যবহার করার ক্ষেত্রে, আমি সম্মত যে এটি এড়ানো একটি জিনিস। তবে এটি সেই ক্ষেত্রে একটি যেখানে সুবিধা ও স্পষ্টতা ডগমা ছাড়িয়ে যেতে পারে।

এছাড়াও, আপনি যদি ই-মেইল ঠিকানার সাথে অন্য কিছু করেন তবে এটি সম্ভবত কোনও মেইল ​​অ্যাড্রেস-এ পরিণত করা জড়িত হতে পারে। এমনকি আপনি যদি এই সঠিক ফাংশনটি ব্যবহার না করেন তবে আপনি সম্ভবত একই প্যাটার্নটি ব্যবহার করতে চাইবেন। আপনি বিভিন্ন ব্যতিক্রম : নাল, খালি বা অবৈধ ফর্ম্যাটটি ধরে নির্দিষ্ট ধরণের ব্যর্থতার জন্যও পরীক্ষা করতে পারেন ।


স্টুয়ার্টের মন্তব্যে, এটি সর্বদা সত্য ফিরে আসার পরিবর্তে চূড়ান্ত ঠিকানাটিকে মূল স্ট্রিংয়ের সাথে তুলনা করে। মেলএড্রেস স্পেস সহ একটি স্ট্রিংকে "প্রদর্শনের নাম" এবং "ঠিকানা" অংশগুলিতে পার্স করার চেষ্টা করে, সুতরাং আসল সংস্করণটি মিথ্যা ইতিবাচক প্রত্যাবর্তন করেছিল।


--- আরও পড়া ---

System.Net.Mail.MailAdress এর জন্য ডকুমেন্টেশন

একটি বৈধ ইমেল ঠিকানা কী তা ব্যাখ্যা করে


23
আসলে, এটি ভুল নয়। a @ a একটি বৈধ ইমেল ঠিকানা। Haacked.com/archive/2007/08/21/… দেখুন , আপনি যদি উদ্ধৃতি সহ কোনও ঠিকানা ব্যবহার করেন তবে এই পদ্ধতিটি ভুল ফল দেয় return
কগওহিল

53
+1: আপনি System.Net.Mailমেইল প্রেরণের জন্য ক্লাসগুলি ব্যবহার করছেন যদি এটি সেরা উত্তর , আপনি সম্ভবত নেট। নেট ব্যবহার করছেন। আমরা এই ধরণের বৈধতাটি কেবলমাত্র এই কারণে ব্যবহার করার সিদ্ধান্ত নিয়েছি যে আমাদের ইমেল ঠিকানাগুলি গ্রহণ করার কোনও মানে নেই - এমনকি বৈধ ঠিকানাও - যেটিতে আমরা মেল পাঠাতে পারি না।
গ্রেগ বিচ

24
আমি সুপারিশ করি না এটি সত্য ফিরে আসে:IsValidEmail("this is not valid@email$com");
কাকশি

15
অনেকগুলি সমস্যা মনে হয় কারণ মেলএড্রেসগুলি ডিসপ্লে নামটিও পার্স করার চেষ্টা করে, সুতরাং "একক স্পেস@ডোমেন ডট কম" ডিসপ্লে নামটি "একক" এবং ঠিকানা "স্পেস @ডোমেন ডট কম" কে পার্স করে। এর জন্য একটি স্থিরকরণ হ'ল: ফেরত (অ্যাড্রেস অ্যাড্রেস == ইমেল);
স্টুয়ার্ট

18
আমি এটি পছন্দ করি; আমি আসল অনুমানের চেয়ে বাধ্যবাধকতা বেশি সীমাবদ্ধ হতে পারি না। মিথ্যা sণাত্মক মিথ্যা ধনাত্মক চেয়ে খারাপ ("আপনি কী আমার ইমেলটি অবৈধ বলতে চান? ")
কেসি

241

এটি একটি পুরানো প্রশ্ন, তবে আমি সাম্প্রতিকতমগুলি সহ এসও-তে খুঁজে পেয়েছি এমন সমস্ত উত্তরগুলির একই উত্তর দেওয়া হবে। তবে। নেট 4.5 / এমভিসি 4-তে আপনি সিস্টেম.কম্পোনমোডেল.ডাটাঅনোটেশনগুলি থেকে [ইমেল অ্যাড্রেস] টিকা যোগ করে কোনও ফর্মের সাথে ইমেল ঠিকানা বৈধতা যুক্ত করতে পারেন, তাই আমি ভাবছিলাম যে আমি কেন কেবল বিল্ট-ইন কার্যকারিতাটি ব্যবহার করতে পারছি না। সাধারণভাবে নেট।

এটি কাজ করে বলে মনে হচ্ছে এবং আমার কাছে মোটামুটি মার্জিত বলে মনে হচ্ছে:

using System.ComponentModel.DataAnnotations;

class ValidateSomeEmails
{
    static void Main(string[] args)
    {
        var foo = new EmailAddressAttribute();
        bool bar;
        bar = foo.IsValid("someone@somewhere.com");         //true
        bar = foo.IsValid("someone@somewhere.co.uk");       //true
        bar = foo.IsValid("someone+tag@somewhere.net");     //true
        bar = foo.IsValid("futureTLD@somewhere.fooo");      //true

        bar = foo.IsValid("fdsa");                          //false
        bar = foo.IsValid("fdsa@");                         //false
        bar = foo.IsValid("fdsa@fdsa");                     //false
        bar = foo.IsValid("fdsa@fdsa.");                    //false

        //one-liner
        if (new EmailAddressAttribute().IsValid("someone@somewhere.com"))
            bar = true;    
    }
}

4
শীতল, যদিও এটি হতাশাজনক যে এমএস তাদের নিজস্ব ডকুমেন্টেশনের সাথে এটি সম্মত করতে পারে না । এটি js@proseware.com9 প্রত্যাখ্যান করে
কেসি

13
নোট যা EmailAddressAttributeকম অনুমতিযোগ্য System.Net.Mail.MailAddress- উদাহরণস্বরূপ, MailAddressএকটি টিএলডি-র জন্য একটি ঠিকানা গ্রহণ করে। আপনার যতটা সম্ভব অনুমতিপ্রাপ্ত হওয়ার প্রয়োজন হলে কিছু মনে রাখবেন।
অ্যারোনিনাস

5
@ কগওহিল: মন্তব্যে যদি উত্তরটি কোথাও থাকে তবে সম্ভবত উত্তরের মূল অংশে এটি যুক্ত করা উচিত।
hofnarwillie

6
@ হোফনারউইলি: এটি মূল অঙ্গনে রয়েছে, তবে মন্তব্যগুলি আরও বিস্তৃত। যদি আপনার লক্ষ্য আপনার ব্যবহারকারীদের উপর ক্রুদ্ধ না হয় তবে আপনার বৈধতাটি অনুমানের চেয়ে আর কোনও বিধিনিষেধযুক্ত হওয়া উচিত নয়। কোনও ইমেল বৈধ কিনা সত্যই যাচাই করার একমাত্র উপায় হ'ল একটি পরীক্ষা বার্তা প্রেরণ।
কগওহিল

4
দয়া করে নোট করুন foo.IsValid(null);আয় true
urig

62

আমি এই একক লাইনার পদ্ধতিটি ব্যবহার করি যা আমার পক্ষে কাজ করে-

using System.ComponentModel.DataAnnotations;
public bool IsValidEmail(string source)
{
    return new EmailAddressAttribute().IsValid(source);
}

মন্তব্যগুলি অনুসারে, source(ইমেল ঠিকানা) শূন্য হলে এটি "ব্যর্থ" হবে ।

public static bool IsValidEmailAddress(this string address) => address != null && new EmailAddressAttribute().IsValid(address);

1
এটি আমার পক্ষে কাজ করে না; আমি পেয়েছি, "'ডেটা টীকাগুলি' বিদ্যমান নেই ... আপনি কি কোনও অ্যাসেম্বলি রেফারেন্স মিস করছেন?" আমার কোন রেফারেন্স যুক্ত করতে হবে?
বি ক্লে শ্যানন

উত্স নਾਲ হলে এটি সত্য হবে return "যদি নির্দিষ্ট মানটি বৈধ বা নাল হয় তবে সত্য, অন্যথায়, মিথ্যা" msdn.microsoft.com/en-us/library/hh192424 দেখুন ।
জাও

2
আরও ভাল সংস্করণ:public static Boolean IsValidMailAddress(this String pThis) => pThis == null ? false : new EmailAddressAttribute().IsValid(pThis);
সেবাস্তিয়ান হফম্যান

7
বা আরও ভাল:public static bool IsValidEmailAddress(this string address) => address != null && new EmailAddressAttribute().IsValid(address);
প্যাট্রিক মেলান্দার

1
আমি মনে করি না এই এক্সটেনশান পদ্ধতিটি নীরবতার falseজন্য নীরবে ফিরে আসা উচিত । কেন আমি (আরও ভাল ভাল) ++, সংস্করণ উত্থাপন করা যে: public static bool IsValidEmailAddress(this string address) => new EmailAddressAttribute().IsValid(address ?? throw new ArgumentNullException());। আমি এখন গিয়ে আরও উন্নততর সংস্করণবিদদের সংস্কারকৃত চার্চটি খুঁজে পেয়েছি।
২৩7777

41

.NET 4.5 যোগ করেছে System.ComponentModel.DataAnnotations.EmailAddressAttribute

আপনি ইমেল অ্যাড্রেসঅ্যাট্রিবিউটের উত্সটি ব্রাউজ করতে পারেন , এটি অভ্যন্তরীণভাবে এটি ব্যবহার করে এমন রেজেক্স:

const string pattern = @"^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$";

2
দুর্ভাগ্যক্রমে ইমেল অ্যাড্রেসঅ্যাট্রিবিউট অনুমতি দেয় email যা ইমেলের জন্য বৈধ চরিত্র নয়
BZ

16
@ বিজেড হ্যাঁ এটি আছে। আপনি কেন মনে করেন না?
কেসি

@ চ্যাড গ্রান্ট: এটি একটি সি # সংস্করণ। আপনি কি দয়া করে কোনও ভিবি.নেট সরবরাহ করতে পারেন? কারণ এটি \\ থেকে \ এর মতো চেরারদের থেকে বাঁচতে পারে বা আপনি একটি স্ট্রিং ভারব্যাটিম সরবরাহ করতে পারেন।
নিখিল অগ্রওয়াল

3
এটি কাজ করে, তবে ভুলে যাবেন না RegexOptions.IgnoreCaseকারণ এই প্যাটার্নটি সুস্পষ্টভাবে মূলধন পত্রগুলিকে অনুমতি দেয় না!
ক্রিস

1
দ্রষ্টব্য যে রেজেক্স খুব ইচ্ছাকৃত: "এই বৈশিষ্ট্যটি সার্ভার-সাইড ইমেল বৈধকরণ jquery বৈধতার সমতুল্য সরবরাহ করে এবং তাই একই নিয়মিত অভিব্যক্তি ভাগ করে"।
ওহাদ স্নাইডার

38

আমি # 1 থেকে ফিলের উত্তর নিয়ে এই ক্লাসটি তৈরি করেছি। এটিকে কল করুন:bool isValid = Validator.EmailIsValid(emailString);

এখানে ক্লাস:

using System.Text.RegularExpressions;

public static class Validator
{

    static Regex ValidEmailRegex = CreateValidEmailRegex();

    /// <summary>
    /// Taken from http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx
    /// </summary>
    /// <returns></returns>
    private static Regex CreateValidEmailRegex()
    {
        string validEmailPattern = @"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|"
            + @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!\.)\.)*)(?<!\.)"
            + @"@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$";

        return new Regex(validEmailPattern, RegexOptions.IgnoreCase);
    }

    internal static bool EmailIsValid(string emailAddress)
    {
        bool isValid = ValidEmailRegex.IsMatch(emailAddress);

        return isValid;
    }
}

5
কেবলমাত্র একটি ছোট, তবে আমি ব্যবহার করব: রিটার্ন (! স্ট্রিং.আইএসনুলআরএম্পটি (ইমেইলএড্রেস)) & & ValidEmailRegex.IsMatch (ইমেল ঠিকানা);
মার্চ

এটি কেবল ভয়াবহ :)
আলেকজান্দ্রু ডিকু

31

ব্যক্তিগতভাবে, আমি বলব যে আপনার কেবল সেখানে একটি @ চিহ্ন রয়েছে কিনা তা নিশ্চিত হওয়া উচিত। অক্ষর। আপনি বিভিন্ন ধরণের সঠিকতা ব্যবহার করতে পারেন এমন অনেকগুলি রেজিক্স রয়েছে, তবে আমি মনে করি এগুলির মধ্যে বেশিরভাগটি বৈধ ইমেল ঠিকানা ছেড়ে দেয় বা অবৈধগুলি দিয়ে যায়। লোকেরা যদি কোনও নকল ইমেল ঠিকানা রাখতে চায় তবে তারা একটি নকল ঠিকানা রাখবে। আপনার যদি ইমেল ঠিকানাটি বৈধ, এবং সেই ইমেল ঠিকানাটির মালিকানাটি সেই ব্যক্তির নিয়ন্ত্রণে রয়েছে কিনা তা যাচাই করা দরকার হলে আপনাকে একটি বিশেষ কোডেড লিঙ্ক সহ তাদের একটি ইমেল প্রেরণ করতে হবে যাতে তারা সত্যতা নিশ্চিত করতে পারে যে এটি সত্যিকারের ঠিকানা।


6
আমি ব্যক্তিগতভাবে মনে করি এর চেয়ে আপনার আরও কিছুটা বৈধতা করা উচিত। কারও কাছে ববি টেবিলের ইমেল ঠিকানা বা আরও খারাপ ব্যবহার করতে বাধ্য।
লুক কুইন

31
ববি টেবিলের ইমেল ঠিকানায় কী হয়েছে যদি আপনি প্রস্তুত বিবৃতি ব্যবহার করেন। আমরা বৈধ ইমেল ঠিকানাগুলির বিষয়ে কথা বলছি, অন্য কোনও জিনিস নয় যা বৈধ ইমেল ঠিকানা যা কিছু নয়, যেমন এসকিউএল অনুসন্ধানগুলি সঠিকভাবে কীভাবে করা যায় যাতে আপনার এসকিউএল ইঞ্জেকশন সমস্যা না হয় সে সম্পর্কিত কিছুই করার নেই।
কিব্বি

আমি অনুমান করি যে সেখানে কেউ কী রাখবে আপনি জানেন না তবে একটি দূষিত ব্যক্তি জানেন যে অবশেষে আপনার মেইল ​​সিস্টেমে মানটি দেওয়া যেতে পারে। আমি কেবল গভীরতার প্রতিরক্ষা যেতে এবং কিছুটা কঠোর হতে পছন্দ করব।
লুক কুইন

10
এটি মেইল ​​সিস্টেম সম্পর্কে উদ্বেগের জন্য। আমি পুরোপুরি বৈধ ইমেল ঠিকানাগুলি প্রত্যাখ্যান করার আশেপাশে যাব না কারণ এটি অন্য কোনও সিস্টেমের সাথে সুরক্ষা সমস্যা হতে পারে। আপনার সমস্ত ইমেল সার্ভারের যদি সুরক্ষা সমস্যা দেখা দেয় এমন একটি ত্রুটিযুক্ত ইমেল ঠিকানা হয় তবে আপনার সম্ভবত অন্য কোনও সার্ভারে স্যুইচ করা উচিত।
কিব্বি

4
আপনার সুরক্ষা পিঁয়াজের প্রতিটি স্তর পচা না হলে কেবল গভীরতার প্রতিরক্ষা কাজ করে। একটি পচা স্তর মানে আপনি পুরো পেঁয়াজ নষ্ট করে দিন। "Foo@example.com.au" প্রত্যাখ্যান করা কারণ আপনি সান-আইন-এনকোডিংয়ে দুর্বলতার বিরুদ্ধে রক্ষা করতে চান তা কি বোঝায় না? হাসবেন না, এটা আমার সাথে হয়েছে। যে কারণে আমি এখানে মন্তব্য করছি তা হ'ল মেডিকেয়ার অস্ট্রেলিয়া ".উ" ঠিকানাগুলিকে কেবল ".কম" অনুমতি দেয় না। মার্ক সোয়ানসন, "কীভাবে ইমেলকে বৈধতা দেওয়া যায় না", mdswanson.com/blog/2013/10/14/…
ম্যানিকডি

17

আমি মনে করি সবচেয়ে ভাল উপায় অনুসরণ হিসাবে:

    public static bool EmailIsValid(string email)
    {
        string expression = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";

        if (Regex.IsMatch(email, expression))
        {
            if (Regex.Replace(email, expression, string.Empty).Length == 0)
            {
                return true;
            }
        }
        return false;
    }

আপনি একটি সাধারণ শ্রেণিতে এই স্থির ফাংশন রাখতে পারেন।


এই উত্তরটি ডোমেন অংশে একটি টিএলডি সহ কোনও ঠিকানা গ্রহণ করে না।
সাইমন

15

সংক্ষিপ্ত এবং নির্ভুল কোড

string Email = txtEmail.Text;
if (Email.IsValidEmail())
{
   //use code here 
}

public static bool IsValidEmail(this string email)
{
  string pattern = @"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|" + @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!\.)\.)*)(?<!\.)" + @"@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$";    
  var regex = new Regex(pattern, RegexOptions.IgnoreCase);    
  return regex.IsMatch(email);
}

2
সমাধানের জন্য ধন্যবাদ
জ্যাক গাজানান

এই এড়ানোর জন্য আমাকে পাবলিক স্ট্যাটিক বুল ইসভালিডমেইল (এই স্ট্রিং ইমেল) এ পাবলিক স্ট্যাটিক বুল ইসভালিডমেইল (স্ট্রিং ইমেল) এ পরিবর্তন করতে হয়েছিল: stackoverflow.com/questions/10412233/…
গোনার ডগ

@ গোনার ডগ, এই ফাংশনটিটি এটির মতো কাজ করবে ((ফুল পতাকা = ইমেল অ্যাড্রেস Iসভালিডমেল ())
নবীন

2
আমার ফর্মটিতে যুক্ত হওয়ার পরে সংকলক সমস্যার কারণ এড়াতে "এটি" মুছে ফেলা দরকার needed
গোনার ডগ

@ গোনার ডগ, এর কার্যকারিতা এইভাবে কাজ করবে। স্ট্রিং ইমেল = "abc@xyz.com"; যদি (ইমেল.আইএসভালিডমেইল ()) false মিথ্যা প্রত্যাবর্তন করে; } অন্যথায় true সত্য প্রত্যাবর্তন করুন}
নবীন

14

সর্বাধিক মার্জিত উপায় হ'ল নেট পদ্ধতিতে অন্তর্নির্মিত।

এই পদ্ধতিগুলি:

  • চেষ্টা ও পরীক্ষা করা হয়। এই পদ্ধতিগুলি আমার নিজের পেশাদার প্রকল্পগুলিতে ব্যবহৃত হয়।

  • অভ্যন্তরীণভাবে নিয়মিত ভাব প্রকাশ করুন যা নির্ভরযোগ্য এবং দ্রুত।

  • মাইক্রোসফ্ট সি সি # এর জন্য তৈরি। চাকাটি পুনরায় উদ্ভাবনের দরকার নেই।

  • একটি বুল রেজাল্ট ফিরিয়ে দিন। সত্যিকারের অর্থ ইমেলটি বৈধ।

.NET 4.5 এবং আরও বেশি ব্যবহারকারীদের জন্য

আপনার প্রকল্পে এই রেফারেন্স যুক্ত করুন:

System.ComponentModel.DataAnnotations

এখন আপনি নিম্নলিখিত কোড ব্যবহার করতে পারেন:

(new EmailAddressAttribute().IsValid("youremailhere@test.test"));

ব্যবহারের উদাহরণ

এখানে কিছু পদ্ধতি ঘোষণা করার জন্য রয়েছে:

protected List<string> GetRecipients() // Gets recipients from TextBox named `TxtRecipients`
{
    List<string> MethodResult = null;

    try
    {
        List<string> Recipients = TxtRecipients.Text.Replace(",",";").Replace(" ", "").Split(';').ToList();

        List<string> RecipientsCleaned = new List<string>();

        foreach (string Recipient in RecipientsCleaned)
        {
            if (!String.IsNullOrWhiteSpace(Recipient))
            {
                RecipientsNoBlanks.Add(Recipient);

            }

        }

        MethodResult = RecipientsNoBlanks;

    }
    catch//(Exception ex)
    {
        //ex.HandleException();
    }

    return MethodResult;

}


public static bool IsValidEmailAddresses(List<string> recipients)
{
    List<string> InvalidAddresses = GetInvalidEmailAddresses(recipients);

    return InvalidAddresses != null && InvalidAddresses.Count == 0;

}

public static List<string> GetInvalidEmailAddresses(List<string> recipients)
{
    List<string> MethodResult = null;

    try
    {
        List<string> InvalidEmailAddresses = new List<string>();

        foreach (string Recipient in recipients)
        {
            if (!(new EmailAddressAttribute().IsValid(Recipient)) && !InvalidEmailAddresses.Contains(Recipient))
            {
                InvalidEmailAddresses.Add(Recipient);

            }

        }

        MethodResult = InvalidEmailAddresses;

    }
    catch//(Exception ex)
    {
        //ex.HandleException();

    }

    return MethodResult;

}

... এবং কোডগুলি তাদের কার্যকরভাবে দেখায়:

List<string> Recipients = GetRecipients();

bool IsValidEmailAddresses = IsValidEmailAddresses(Recipients);

if (IsValidEmailAddresses)
{
    //Emails are valid. Your code here

}
else
{
    StringBuilder sb = new StringBuilder();

    sb.Append("The following addresses are invalid:");

    List<string> InvalidEmails = GetInvalidEmailAddresses(Recipients);

    foreach (string InvalidEmail in InvalidEmails)
    {
        sb.Append("\n" + InvalidEmail);

    }

    MessageBox.Show(sb.ToString());

}

এছাড়াও, এই উদাহরণ:

  • একক স্ট্রিং 0, একটি বা একাধিক ইমেল ঠিকানা আধা-কোলন দ্বারা স্পিটেড ব্যবহার করার জন্য স্পেস ছাড়িয়ে প্রসারিত হয় ;
  • ইমেলএড্রেসএট্রিবিউট অবজেক্টের ইসভিড পদ্ধতিটি কীভাবে ব্যবহার করবেন তা স্পষ্টভাবে প্রদর্শন করে।

বিকল্প,। নেট এর সংস্করণ ব্যবহারকারীদের জন্য 4.5 এর চেয়ে কম করুন

এমন পরিস্থিতিতে যেখানে নেট 4.5 পাওয়া যায় না, আমি নিম্নলিখিত সমাধানটি ব্যবহার করি:

বিশেষত, আমি ব্যবহার:

public static bool IsValidEmailAddress(string emailAddress)
{
    bool MethodResult = false;

    try
    {
        MailAddress m = new MailAddress(emailAddress);

        MethodResult = m.Address == emailAddress;

    }
    catch //(Exception ex)
    {
        //ex.HandleException();

    }

    return MethodResult;

}

public static List<string> GetInvalidEmailAddresses(List<string> recipients)
{
    List<string> MethodResult = null;

    try
    {
        List<string> InvalidEmailAddresses = new List<string>();

        foreach (string Recipient in recipients)
        {
            if (!IsValidEmail(Recipient) && !InvalidEmailAddresses.Contains(Recipient))
            {
                InvalidEmailAddresses.Add(Recipient);

            }

        }

        MethodResult = InvalidEmailAddresses;

    }
    catch //(Exception ex)
    {
        //ex.HandleException();

    }

    return MethodResult;

}

1
@ থমাস আইইউব আমি কোনও ইমেলএড্রেসঅ্যাট্রিবিউটের উত্তর দেখিনি, এবং ইনপুট == .এড্রেস একটি চেক সহ নতুন মেইল ​​অ্যাড্রেস () ব্যবহার করে এমন কোনও উত্তর নেই dএড্রেস যাতে আমি এটি বেশ কার্যকর বলে মনে করি। মন্তব্য না পড়েই গৃহীত উত্তরটি বেশ ভুল। নতুন মেইল ​​অ্যাড্রেস ("ফুবার সামোথথিং ডটকম") এটি প্রমাণ করে।
জানুয়ারী

@ ফ্যানউইউ, মানিক নিকারলেসকে EmailAddressAttributeমাত্র চার মাসের ব্যবধানে পরাজিত করেছেন , যদিও এই nullবিষয়টি এই বিষয়টি ধরা দেয় ।
ruffin

7

সত্য কথা বলতে গেলে, প্রোডাকশন কোডে, সেরা আমি যা করি তা @প্রতীকটি পরীক্ষা করা ।

আমি কখনই ইমেল সম্পূর্ণরূপে যাচাই করা যায় না। আপনি কি জানেন আমি কীভাবে এটি সত্যই বৈধ ছিল? যদি এটি পাঠানো হয়। যদি তা না হয় তবে এটি খারাপ, যদি তা হয় তবে জীবন ভাল। এটাই আমার জানা দরকার।


6

আমি এই রেজেক্সটিকে কেবলমাত্র @ চিহ্ন ছাড়াও আরও কিছু পরীক্ষা করার জন্য এবং অদ্ভুত প্রান্তের মামলাগুলি গ্রহণ করার মধ্যে একটি ভাল বাণিজ্য বলে মনে করি:

^[^@\s]+@[^@\s]+(\.[^@\s]+)+$

এটি আপনাকে কমপক্ষে @ চিহ্নের চারপাশে কিছু রাখতে এবং কমপক্ষে একটি সাধারণ দেখায় এমন ডোমেন তৈরি করবে।


আমি একই রেইজেক্স নিয়ে এসেছি;) এটি অবৈধ চর্যাপটারকে অনুমতি দেয় যদিও
স্টেফান

এই উত্তরটি ডোমেন অংশে একটি টিএলডি গ্রহণ করে না।
সিমোন

@ সিমোন সম্ভবত টিএলডির সাথে ইমেল ঠিকানাগুলি ডোমেন অংশে নেই যদিও বাস্তবে : সার্ভারসফল্ট / এ / 721929/167961 মন্তব্য করা উচিত যে এই দিনগুলিতে এটি নিষিদ্ধ হতে পারে
ম্যাথু লক

@ ম্যাথ্লোলক এটি কোনও ইন্ট্রানেট ঠিকানা হতে পারে? পছন্দ bob@companyinternal?
সিমোন

@ সিমোন বাস্তব জীবনে কেউ কি সেই প্রকল্পটি ব্যবহার করে?
ম্যাথু লক

4

ইমেল ঠিকানার বৈধতা যতটা সহজ মনে হয় তত সহজ নয়। কেবলমাত্র একটি নিয়মিত অভিব্যক্তি ব্যবহার করে কোনও ইমেল ঠিকানা সম্পূর্ণরূপে বৈধতা দেওয়া তাত্ত্বিকভাবে অসম্ভব।

এ সম্পর্কিত আমার আলোচনার জন্য এ সম্পর্কে আমার ব্লগ পোস্ট এবং FParsec ব্যবহার করে একটি F # বাস্তবায়ন দেখুন। [/ shameless_plug]


1
আমি আপনাকে বিকল্প পদ্ধতির তালিকা পছন্দ করেছি; খুব আকর্ষণীয়.
লুক কুইন

1
আকর্ষণীয় নিবন্ধ। কিন্তু গুরুত্ব সহকারে কে ইমেল ঠিকানাগুলিতে মন্তব্যগুলি এবং নেস্টেড মন্তব্যগুলি রাখছেন?
ম্যাথু লক

3
@ মাতৃ, আমি জানি না কেন আইইটিএফ এমনকি এটি অনুমতি দিয়েছে, তবে এটি সম্ভব , সুতরাং একটি সম্পূর্ণ বৈধতা এটিকে বিবেচনায় নিতে হবে।
মৌরিসিও শেফার

4

এখানে আমার উত্তর - ফিলের সমাধানটি "someone@q.com" এর মতো একক অক্ষরের ডোমেনগুলির জন্য ব্যর্থ। বিশ্বাস করুন বা না করুন, এটি ব্যবহৃত =) (উদাহরণস্বরূপ, শতাব্দী লিঙ্কে যায়)।

ফিলের উত্তরটি কেবলমাত্র পিসিআরই স্ট্যান্ডার্ডের সাথে কাজ করছে ... তাই সি # এটি গ্রহণ করবে, তবে জাভাস্ক্রিপ্ট বোমা ফেলছে। এটি জাভাস্ক্রিপ্টের জন্য খুব জটিল। সুতরাং আপনি এমভিসি বৈধতা বৈশিষ্ট্যের জন্য ফিলের সমাধান ব্যবহার করতে পারবেন না।

এই আমার রেজেক্স। এটি এমভিসি বৈধতা বৈশিষ্ট্যগুলির সাথে দুর্দান্তভাবে কাজ করবে।
- @ এর আগে সমস্ত কিছু সরল করা হয়েছে, যাতে কমপক্ষে জাভাস্ক্রিপ্ট কাজ করবে। যতক্ষণ না এক্সচেঞ্জ সার্ভার আমাকে 5.1.3 দেয় না আমি এখানে বৈধতা শিথিল করছি। - @ এর পরে সমস্ত কিছু হ'ল ফিলের সমাধান হ'ল একক অক্ষরের ডোমেনগুলির জন্য পরিবর্তিত।

public const string EmailPattern =
        @"^\s*[\w\-\+_']+(\.[\w\-\+_']+)*\@[A-Za-z0-9]([\w\.-]*[A-Za-z0-9])?\.[A-Za-z][A-Za-z\.]*[A-Za-z]$";

System.net.mail মেলমেসেজ () ব্যবহার করার পরামর্শ দেওয়ার জন্য লোকেরা জিনিসটি নমনীয়। অবশ্যই, সি # ইমেলটি স্বীকার করবে, তবে আপনি ইমেল প্রেরণের চেষ্টা করার সাথে সাথে এক্সচেঞ্জ সার্ভার 5.1.3 রানটাইম ত্রুটি সহ বোমা ফাটিয়ে দেবে।


এটি সেরা সর্বাধিক চিন্তাশীল / যুক্তিসঙ্গত / রিয়েলওয়ার্ল্ড উত্তর বলে মনে হচ্ছে, ধন্যবাদ রাল্ফ!
ফ্যাটি

এটি এখন পর্যন্ত সেরা উত্তর! আমি কোনও খারাপ সমাধান বিশ্বাস করতে পারি না যা basket@ballবৈধ ইমেল ঠিকানা হিসাবে গ্রহণ করে সঠিক উত্তর এবং সেই সাথে এই সমস্ত উন্নতি অর্জন করেছে। যাই হোক ধন্যবাদ!
বিপর্যয়

ধন্যবাদ এটি সর্বোত্তম সমাধান এবং উত্তরটি গ্রহণ করা উচিত।
ব্যাট_প্রগ্রাম 1

3

আপনি যদি সত্যিই এবং আমার অর্থ সত্যই কোনও ইমেল ঠিকানা বৈধ কিনা তা জানতে চান ... মেল এক্সচেঞ্জারকে এটি প্রমাণ করতে বলুন, কোনও রেজেক্সের প্রয়োজন নেই। অনুরোধ করা হলে আমি কোডটি সরবরাহ করতে পারি।

সাধারণ পদক্ষেপগুলি নিম্নরূপ: 1. ইমেল ঠিকানার কোনও ডোমেন নাম অংশ আছে? (@> 0 এর সূচক) 2. কোনও ডিএনএস কোয়েরি ব্যবহার করে জিজ্ঞাসা করুন যে ডোমেনের কোনও মেইল ​​এক্সচেঞ্জার রয়েছে কিনা 3. মেল এক্সচেঞ্জারটিতে টিসিপি সংযোগ খুলুন the. এসএমটিপি প্রোটোকল ব্যবহার করে, প্রাপ্তি হিসাবে ইমেল ঠিকানাটি ব্যবহার করে সার্ভারে একটি বার্তা খুলুন। সার্ভারের প্রতিক্রিয়া পার্স করুন। The. বার্তাটি যদি আপনি এটিকে এ পর্যন্ত তৈরি করেন তবে প্রস্থান করুন, সবকিছু ভাল।

এটি যেমন আপনি কল্পনা করতে পারেন, খুব ব্যয়বহুল সময় এবং এসএমটিপি-র উপর নির্ভর করে তবে এটি কার্যকর হয়।


আপনি কি সেই ইন্টারফেসগুলির জন্য জাল, স্টাবস এবং / অথবা উপহাস তৈরি করেছেন?

1
যে কাজ করবে না। কোনও ইমেল ঠিকানা যাচাই করার জন্য এসএমটিপি প্রোটোকলটি অনেক সময় অবনত / ব্যবহৃত হয়েছে been মেল সার্ভারগুলিতে এটি সক্ষম করা খারাপ অভ্যাস হিসাবে বিবেচিত হয় যেহেতু স্প্যামাররা সেই কার্যকারিতাটি ব্যবহার করে।
চাদ গ্রান্ট

আমি আপনার পরামর্শটি পয়েন্ট ২ অবধি রাখব a একটি পরিচিত ডোমেন নেম ধরণের জন্য যাচাই করার চেয়ে ভবিষ্যতের প্রুফ আরও বেশি Way
সাইমন

নিতপিকিং, তবে "মেল এক্সচেঞ্জার আছে" সংজ্ঞায়িত করুন ? যদি কোনও এমএক্স রেকর্ড থাকে না, এসএমটিপি আরএফসি 2821/5321 অনুসারে এ / এএএএ রেকর্ডে ফিরে যেতে হবে। যদি কোনও এমএক্স রেকর্ড বিদ্যমান থাকে তবে এটি এখনও মেল এক্সচেঞ্জার (আরএফসি 7505) উপস্থিত থাকতে পারে না। সত্যই, একমাত্র উপায় হ'ল তাদেরকে কল-টু-অ্যাকশন লিঙ্ক সহ একটি মেল পাঠানো, এবং তাদের উত্তর দেওয়ার জন্য অপেক্ষা করুন ...
জিম্বোবমগজি

2

সাধারণভাবে বলতে গেলে, ইমেল ঠিকানাগুলি যাচাই করার জন্য একটি নিয়মিত অভিব্যক্তি প্রকাশ করা সহজ জিনিস নয়; এই লেখার সময়, একটি ইমেল ঠিকানার বাক্য গঠন অবশ্যই তুলনামূলকভাবে উচ্চ সংখ্যার মান অনুসরণ করতে পারে এবং নিয়মিত প্রকাশের মধ্যে সেগুলির সবগুলি প্রয়োগ করা কার্যতঃ অপ্রয়োজনীয়!

আমি অত্যন্ত আমাদের চেষ্টা করতে আপনার প্রস্তাবিত EmailVerify.NET , একটি পরিপক্ক .NET গ্রন্থাগার নিম্নলিখিত ইমেল ঠিকানাগুলি যাচাই করতে পারেন সব বর্তমান IETF মান (RFC 1123, বোঝায় যা RFC 2821, বোঝায় যা RFC 2822, বোঝায় যা RFC 3696, বোঝায় যা RFC 4291, বোঝায় যা RFC 5321 এবং জন্য RFC 5322) , সম্পর্কিত ডিএনএস রেকর্ডগুলি পরীক্ষা করে, লক্ষ্যযুক্ত মেলবক্সগুলি বার্তা গ্রহণ করতে পারে কিনা তা পরীক্ষা করে এবং কোনও প্রদত্ত ঠিকানাটি ডিসপোজেবল কিনা তা এমনকি তাও বলতে পারে।

দাবি অস্বীকার: আমি এই উপাদানটির জন্য নেতৃত্ব বিকাশকারী।


চিত্তাকর্ষক! "এরপরে, এটি প্রদত্ত ইমেল ঠিকানাটির জন্য দায়ী মেল এক্সচেঞ্জারের সাথে যোগাযোগ করার চেষ্টা করে এবং সেই সার্ভারের সাথে একটি জাল এসএমটিপি ডায়ালগ শুরু করে, একটি আসল মেল সার্ভার অনুকরণ করে This এইভাবে এটি নিশ্চিত করে যে সার্ভারটি ঠিকানার জন্য ইমেলগুলি পরিচালনা করতে পারে Many অনেকগুলি এসএমটিপি সার্ভার আসলেই স্প্যামারদের বিরুদ্ধে সুরক্ষা হিসাবে মিথ্যা ইতিবাচক উত্তরগুলি ফিরিয়ে দিন: এই সমস্যাটি কাটিয়ে উঠতে .NET- এর জন্য ইমেল যাচাই করুন অবশেষে লক্ষ্য মেল এক্সচেঞ্জারকে বিভিন্ন মনগড়া ঠিকানা দিয়ে একাধিকবার জিজ্ঞাসা করার চেষ্টা করে ""
ম্যাথু লক

ধন্যবাদ,
@ ম্যাথেজ লক

দুর্দান্ত, তবে আমি কেবল অর্থ প্রদানের সংস্করণগুলি দেখতে পাচ্ছি। কোনও সম্প্রদায় / ওপেনসোর্স সংস্করণের জন্য কোনও পরিকল্পনা?
ওহাদ স্নাইডার

1
@ ওহাদস্কিনিডার হ্যাঁ: আমরা আমাদের ইমেল যাচাইকরণ পরিষেবা ভেরিফালিয়ার মাধ্যমে আমাদের ইমেল বৈধকরণ প্রযুক্তির একটি বিনামূল্যে সংস্করণ সরবরাহ করছি । । নেট সহ বড় বড় সফ্টওয়্যার বিকাশ প্ল্যাটফর্মগুলির জন্য ভেরিফালিয়া বিনামূল্যে এবং ওপেন সোর্স এসডিকে নিয়ে আসে ।
ইফরান কোবিসি

2
For the simple email like goerge@xxx.com, below code is sufficient. 

 public static bool ValidateEmail(string email)
        {
            System.Text.RegularExpressions.Regex emailRegex = new System.Text.RegularExpressions.Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
            System.Text.RegularExpressions.Match emailMatch = emailRegex.Match(email);
            return emailMatch.Success;
        }

এটি বৈধ ইমেল ঠিকানা হিসাবে a@b.info যাচাই করতে ব্যর্থ হবে।
রায় চেং

2

আপনি যদি ফ্লুয়েন্টভ্লিয়েডেশন ব্যবহার করছেন তবে আপনি এর চেয়ে সহজ কিছু লিখতে পারেন:

public cass User
{
    public string Email { get; set; }
}

public class UserValidator : AbstractValidator<User>
{
    public UserValidator()
    {
        RuleFor(x => x.Email).EmailAddress().WithMessage("The text entered is not a valid email address.");
    }
}

// Validates an user. 
var validationResult = new UserValidator().Validate(new User { Email = "açflkdj" });

// This will return false, since the user email is not valid.
bool userIsValid = validationResult.IsValid;

2

@ কগওহিল উত্তরে সামান্য পরিবর্তন ification

public static bool IsValidEmail(this string email)
{
  // skip the exception & return early if possible
  if (email.IndexOf("@") <= 0) return false;

  try
  {
    var address = new MailAddress(email);
    return address.Address == email;
  }
  catch
  {
    return false;
  }
}

এটি সাহায্য করবে বলে মনে হচ্ছে না ... Console.WriteLine(MailAddress("asdf@asdf.").Address);"এসএসডিএফ @ এসএসডিএফ।" আউটপুট, যা বৈধ নয়।
ল্যাংডন

। নেট এর নিজস্ব নিজস্ব সংজ্ঞা আছে বলে মনে হয়। সম্পর্কিত আলোচনা
ওয়েটফরাইট

2

এখানে অনেক শক্ত উত্তর রয়েছে। যাইহোক, আমি সুপারিশ করছি আমরা একটি পদক্ষেপ পিছনে নিতে। @ কগওহিল https://stackoverflow.com/a/1374644/388267 প্রশ্নের উত্তর দেয় । তবুও, এটি বেশিরভাগ বৈধতার দৃশ্যে ব্যয়বহুল হতে পারে, যদি ইমেল ঠিকানাটি বৈধ হয়ে থাকে তবে অনেকগুলি অবৈধ। আমি প্রস্তাব দিই যে আমরা তার ট্রাই-ক্যাচ ব্লকে প্রবেশের আগে কিছুটা যুক্তিযুক্ত নিয়োগ করি। আমি জানি যে নিচের কোডটি RegEx ব্যবহার করে লেখা যেতে পারে তবে নতুন বিকাশকারীদের বুঝতে এটি ব্যয়বহুল হতে পারে। এটি আমার দ্বিগুণ মূল্য:

    public static bool IsEmail(this string input)
    {
        if (string.IsNullOrWhiteSpace(input)) return false;

        // MUST CONTAIN ONE AND ONLY ONE @
        var atCount = input.Count(c => c == '@');
        if (atCount != 1) return false;

        // MUST CONTAIN PERIOD
        if (!input.Contains(".")) return false;

        // @ MUST OCCUR BEFORE LAST PERIOD
        var indexOfAt = input.IndexOf("@", StringComparison.Ordinal);
        var lastIndexOfPeriod = input.LastIndexOf(".", StringComparison.Ordinal);
        var atBeforeLastPeriod = lastIndexOfPeriod > indexOfAt;
        if (!atBeforeLastPeriod) return false;

        // CODE FROM COGWHEEL'S ANSWER: https://stackoverflow.com/a/1374644/388267 
        try
        {
            var addr = new System.Net.Mail.MailAddress(input);
            return addr.Address == input;
        }
        catch
        {
            return false;
        }
    }

2

@ কগওহিলের সর্বাধিক ভোট দেওয়া উত্তর হ'ল সেরা উত্তর তবে আমি trim()স্ট্রিং পদ্ধতিটি প্রয়োগ করার চেষ্টা করেছি যাতে এটি স্ট্রিং শুরু থেকে শেষ পর্যন্ত সমস্ত ব্যবহারকারীর সাদা স্থানকে ছাঁটাই করে দেয়। পুরো উদাহরণের জন্য কোড নমুনা পরীক্ষা করুন-

bool IsValidEmail(string email)
{
    try
    {
        email = email.Trim();
        var addr = new System.Net.Mail.MailAddress(email);
        return addr.Address == email;
    }
    catch
    {
        return false;
    }
}

এর ঝুঁকিটি হ'ল আপনি উত্সের চেয়ে আলাদা ই-মাইলড্রেসটিকে বৈধতা দিচ্ছেন, আপনাকে নির্দিষ্ট ই-মাইলড্রেসটির নিরক্ষিত সংস্করণে (এই ক্ষেত্রে) মেল করতে পারবেন তা ভাবতে ছাড়ছেন। এই পদ্ধতির SanitizeEmail(string email)ফলাফল ব্যবহার করে ইমেলটি বৈধকরণ এবং প্রেরণ করার জন্য একটি পৃথক পদ্ধতি তৈরি করা আরও ভাল পদ্ধতির হবে ।
মার্কো ডি জিউউ

1
private static bool IsValidEmail(string emailAddress)
{
    const string validEmailPattern = @"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|"
                                     + @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!\.)\.)*)(?<!\.)"
                                     + @"@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$";

    return new Regex(validEmailPattern, RegexOptions.IgnoreCase).IsMatch(emailAddress);
}

1

ইমেল স্ট্রিং সঠিক ফর্ম্যাট বা ভুল ফর্ম্যাট এটি দ্বারা যাচাই করুন System.Text.RegularExpressions:

    public static bool IsValidEmailId(string InputEmail)
    {
        Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
        Match match = regex.Match(InputEmail);
        if (match.Success)
            return true;
        else
            return false;
    }

    protected void Email_TextChanged(object sender, EventArgs e)
    {
        String UserEmail = Email.Text;
        if (IsValidEmailId(UserEmail))
        {
            Label4.Text = "This email is correct formate";
        }
        else
        {
            Label4.Text = "This email isn't correct formate";
        }
    }

1

/ "নতুন ইমেলএড্রেসএট্রিবিউট ()" তৈরিতে ব্যবহৃত অভ্যন্তরীণ রেজেক্স ব্যবহার করে; । নেট 4.5 >>> এ উপাদান.সম্পট.মোটেল.ডাটাঅ্যানোটেশন ব্যবহার করে; // একটি ইমেল ঠিকানা যাচাইকরণ ...... পরীক্ষিত এবং কাজ।

public bool IsEmail(string email)
{
    if (String.IsNullOrEmpty(email))
    {   return false;  }
    try
    {
        Regex _regex = new Regex("^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])" +
                "+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)" +
                "((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|" +
                "[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\u" +
                "FDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|" +
                "(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|" +
                "[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900" +
                "-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF" +
                "EF])))\\.?$", RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture | RegexOptions.Compiled);
        return _regex.IsMatch(email);
    }
    catch (RegexMatchTimeoutException)
    {
        return false;
    }
}

এছাড়াও, আপনি এটি ব্যবহার করতে পারেন:

http://msdn.microsoft.com/en-us/library/01escwtf(v=vs.110).aspx


এটি এই ইমেলের জন্য সত্য বলেছে: "fulya_42_@hotmail.coö" এবং এটি ম্যান্ড্রিল এপিআইতে ত্রুটি ছুড়ে ফেলেছে
MonsterMMORPG

1
প্রথমত, ইমেলটি বৈধ rt উদাহরণ@example.co বা উদাহরণ@example.com .... ইমেলটিতে সর্বশেষ অক্ষর "ö" ব্যতীত সমস্ত বৈধ স্ট্রিং এবং সমালোচক রয়েছে এবং আপনি সহজেই এই চরিত্রটিকে বৈধতা দেওয়ার জন্য একটি সাধারণ শর্ত যুক্ত করতে পারেন । দ্বিতীয়ত, এই ম্যান্ড্রিল এপিআই ত্রুটি সম্পর্কে নিশ্চিত নই, আপনি নিজের ব্যবহারের পদ্ধতিটি যাচাই করতে চাইতে পারেন বেকোস আমি অন্য কোনও পরিবেশ / এপিআইতে এই বৈধতাটি ব্যবহার করেছি এবং এটি আমার পক্ষে ভাল হয়েছে।
আইনা আডেমোলা সি

1

আমি পয়সন 1 এর উত্তরকে এরকমভাবে সাফল্য দিয়েছি:

public static bool IsValidEmailAddress(string candidateEmailAddr)
{
    string regexExpresion = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
    return (Regex.IsMatch(candidateEmailAddr, regexExpresion)) && 
           (Regex.Replace(candidateEmailAddr, regexExpresion, string.Empty).Length == 0);
}

1

ইমেইলআইডি সনাক্ত করার সহজ উপায়টি বৈধ কিনা।

public static bool EmailIsValid(string email)
{
        return Regex.IsMatch(email, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
}

1

জেএস এর পরিবর্তে সি # তে রেজেক্সে সংস্কৃতি সমস্যা রয়েছে। সুতরাং আমাদের ইমেল চেকের জন্য মার্কিন মোডে রেজেক্স ব্যবহার করতে হবে। আপনি যদি ECMAScript মোড ব্যবহার না করেন তবে আপনার ভাষার বিশেষ অক্ষরগুলি রেজিস্টের সাথে AZ তে বোঝানো হবে।

Regex.IsMatch(email, @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9_\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", RegexOptions.ECMAScript)

1

আমি এই রেজেেক্সটি ব্যবহার করে শেষ করেছি, কারণ এটি কমা, মন্তব্য, ইউনিকোড অক্ষর এবং আইপি (ভি 4) ডোমেন ঠিকানাগুলি সফলভাবে যাচাই করে।

বৈধ ঠিকানাগুলি হবে:

"" @ example.org

(comment)test@example.org

тест@example.org

ტესტი @ example.org

পরীক্ষা @ [192.168.1.1]

 public const string REGEX_EMAIL = @"^(((\([\w!#$%&'*+\/=?^_`{|}~-]*\))?[^<>()[\]\\.,;:\s@\""]+(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))(\([\w!#$%&'*+\/=?^_`{|}~-]*\))?@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$";

1

Regex ব্যবহার না করে একটি সাধারণ (যা আমি এর খারাপ পাঠযোগ্যতার জন্য পছন্দ করি না):

bool IsValidEmail(string email)
{
    string emailTrimed = email.Trim();

    if (!string.IsNullOrEmpty(emailTrimed))
    {
        bool hasWhitespace = emailTrimed.Contains(" ");

        int indexOfAtSign = emailTrimed.LastIndexOf('@');

        if (indexOfAtSign > 0 && !hasWhitespace)
        {
            string afterAtSign = emailTrimed.Substring(indexOfAtSign + 1);

            int indexOfDotAfterAtSign = afterAtSign.LastIndexOf('.');

            if (indexOfDotAfterAtSign > 0 && afterAtSign.Substring(indexOfDotAfterAtSign).Length > 1)
                return true;
        }
    }

    return false;
}

উদাহরণ:

  • IsValidEmail("@b.com") // false
  • IsValidEmail("a@.com") // false
  • IsValidEmail("a@bcom") // false
  • IsValidEmail("a.b@com") // false
  • IsValidEmail("a@b.") // false
  • IsValidEmail("a b@c.com") // false
  • IsValidEmail("a@b c.com") // false
  • IsValidEmail("a@b.com") // true
  • IsValidEmail("a@b.c.com") // true
  • IsValidEmail("a+b@c.com") // true
  • IsValidEmail("a@123.45.67.89") // true

এটি সহজ হতে বোঝানো হয়েছে এবং তাই এটি ফাঁকা ডোমেনগুলির সাথে ইমেল যেমন স্পেস (সাধারণত অনুমোদিত), আইপিভি 6 ঠিকানা সহ ইমেল ইত্যাদির মতো বিরল ক্ষেত্রে মোকাবেলা করে না doesn't


1

আপনার চেক করার জন্য আপনার প্রশ্নের উত্তর এখানে।

using System;
using System.Globalization;
using System.Text.RegularExpressions;

public class RegexUtilities
{    
   public bool IsValidEmail(string strIn)
   {
       if (String.IsNullOrEmpty(strIn))
       {
          return false;

       }

       // Use IdnMapping class to convert Unicode domain names.

       try 
       {
          strIn = Regex.Replace(strIn, @"(@)(.+)$", this.DomainMapper, RegexOptions.None, TimeSpan.FromMilliseconds(200));

       }
       catch (RegexMatchTimeoutException) 
       {
           return false;

       }

       if (invalid)
       {
           return false;

       }

       // Return true if strIn is in valid e-mail format.    

       try 
       {
          return Regex.IsMatch(strIn, @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|       [-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$", RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));

       }
       catch (RegexMatchTimeoutException) 
       {
          return false;

       }

   }


   private string DomainMapper(Match match)
   {
      // IdnMapping class with default property values.

      IdnMapping idn = new IdnMapping();

      string domainName = match.Groups[2].Value;

      try 
      {
         domainName = idn.GetAscii(domainName);

      }
      catch (ArgumentException) 
      {
         invalid = true;

      }

      return match.Groups[1].Value + domainName;

   }

}

1

@ কগওহিলের উত্তরের ভিত্তিতে আমি একটি পরিবর্তিত সমাধান ভাগ করতে চাই যা এসএসআইএস এবং "স্ক্রিপ্ট উপাদান" এর জন্য কাজ করে:

  1. আপনার ডেটা ফ্লো সংযোগে "স্ক্রিপ্ট উপাদান" রাখুন এবং তারপরে এটি খুলুন।
  2. বিভাগে "ইনপুট কলামগুলি" ক্ষেত্রটি সেট করুন যা ই-মেল অ্যাড্রেসগুলিকে "রিড রাইটিং" এ সেট করে (উদাহরণস্বরূপ 'ফিল্ডনেম')।
  3. "স্ক্রিপ্ট" বিভাগে ফিরে যান এবং "স্ক্রিপ্ট সম্পাদনা করুন" এ ক্লিক করুন। তারপরে কোডটি খোলার পরে আপনাকে অপেক্ষা করতে হবে।
  4. এই কোডটি সঠিক পদ্ধতিতে রাখুন:

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        string email = Row.fieldName;
    
        try
        {
            System.Net.Mail.MailAddress addr = new System.Net.Mail.MailAddress(email);
            Row.fieldName= addr.Address.ToString();
        }
        catch
        {
            Row.fieldName = "WRONGADDRESS";
        }
    }

তারপরে আপনি সমস্ত অবৈধ রেকর্ডগুলি বা আপনি যা করতে চান তা ফিল্টার করতে আপনি শর্তাধীন স্প্লিট ব্যবহার করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.