amazon-web-services - Sendgrid बनाम पोस्टमार्क बनाम अमेज़ॅन एसईएस और अन्य ईमेल / एसएमटीपी एपीआई प्रदाताओं?





postmark (6)


SendGrid चैट के माध्यम से कार्यान्वित करने और तकनीकी सहायता के लिए वास्तव में आसान था, मेरे प्रश्न का उत्तर 3 मिनट में दिया गया था। वे जानते हैं कि वे अब सर्वश्रेष्ठ सेवा / समर्थन प्रदान करने पर लड़ रहे हैं और मुझे लगता है कि हर बार मैंने उनसे संपर्क किया है। मुझे लगता है कि वे इस श्रेणी में रैकस्पेस बनना चाहते हैं। सबसे सस्ता नहीं, लेकिन सबसे अच्छा समर्थन।

क्या आप Sendgrid, Postmark, Amazon SES, और अन्य ईमेल प्रदाताओं के लिए सापेक्ष योग्यता / दोषों पर टिप्पणी कर सकते हैं? आप किसकी सिफारिश करेंगे, और क्यों? क्या कोई और ईमेल सेवा है जिसके बदले आप इसकी सिफारिश करेंगे?

संलग्न: वर्तमान में जिन लोगों के बारे में बात की जा रही है उनकी एक सूची यहां दी गई है:




एसईएस सस्ता है और स्केलेबल होने का वादा करता है, लेकिन अन्यथा कोई फ्रिल्स नहीं है। यह अभी तक साबित नहीं हुआ है, अभी भी बीटा में है, और SocketLabs , SendGrid या Postmark द्वारा प्रदान की जाने वाली SocketLabs रूप में उपयोग करने में आसान नहीं है। और इन कंपनियों में निरंतर नवाचार इस अंतर को और भी आगे बढ़ाने जा रहा है।

तो आपके लिए इसका क्या मतलब है? सस्ते और स्केलेबल पर्याप्त नहीं है?

कुछ के लिए यह हो सकता है - विशेष रूप से सुपर क्लीन ईमेल के साथ अत्यधिक तकनीकी, गहरी मीट्रिक की थोड़ी आवश्यकता और ईमेल वितरण योग्यता समर्थन या सलाह की आवश्यकता नहीं है। ईमेल प्रेषकों का विशाल बहुमत थोड़ा अधिक हाथ पकड़ना चाहता है, एक साथी जो वे (बनाम उपयोग) के साथ काम कर सकते हैं, और विशेषज्ञ जो उनके सवालों का जवाब दे सकते हैं। इसके लिए लागत अंतर उनके लिए अधिक मूल्यवान है। और अधिकांश भाग के लिए, लागत किसी भी सभ्य ईमेल प्रदाता के साथ पर्याप्त कम है।

(मैं सॉकेटलैब्स में चीफ टेक्नोलॉजिस्ट हूं)




SocialCompare पर बड़ी तुलना जिसने मुझे MailJet के नेतृत्व में SocialCompare तुलना में बिक्री और विपणन ईमेल के लिए खुले और क्लिक की स्थिति के बेहतर प्रदर्शन के कारण प्रेरित किया। हालांकि, हम हमारी वेबसाइट लेनदेन संबंधी ईमेल के लिए उत्कृष्ट रबड़ मणि के साथ प्रेषण का उपयोग करते हैं, जहां हम खुले और क्लिक स्थिति की समीक्षा करने पर केंद्रित नहीं हैं।




मैंने प्रेषण की कोशिश की और वे मेरे मुफ़्त खाते का प्रावधान करने में असमर्थ थे इसलिए मैं उन्हें आज़माता हूं। ग्राहक सेवा भयानक है। इसके खिलाफ सलाह देंगे।




दिन के अंत में, जब अमेज़ॅन जैसे प्रतिद्वंद्वी बाजार में प्रवेश करता है, तो आप नीचे पहुंच जाते हैं। Postmark या SendGrid या MailJet या Postage या SocketLabs या सेंडलैब्स कीमत पर प्रतिस्पर्धा करने में सक्षम होने के लिए कोई रास्ता नहीं है।

और मुझे नहीं लगता कि बिंदु मूल्य पर प्रतिस्पर्धा करना है, लेकिन सुविधाओं और सेवाओं पर। पोस्टमार्क का रोडमैप भयानक है। जब बाजार में नवाचार और प्रतिस्पर्धा होती है तो दिन के अंत में ग्राहक जीतते हैं।

अपने प्रश्न का उत्तर देने के लिए, पोस्टमार्क और दूसरों को एसएमटीपी के लिए पहले से ही स्टॉक एसएमटीपी कार्यान्वयन का उपयोग कर कंपनियों के साथ एकीकरण को कम करने के लिए समर्थन है। ईमेल वितरण में अंतर्दृष्टि भी है, जो आपके लिए डीकेआईएम / एसपीएफ़ मुद्दों को संभालने में सक्षम है, इनबाउंड प्रोसेसिंग इत्यादि। यह आपके उपयोग के मामले में आता है, और सेवा की योग्यता (उदाहरण के लिए वास्तविक वितरण क्षमता)।

(मैं पोस्टमार्क में एक डेवलपर था)




इस स्थिति को संभालने का सबसे अच्छा तरीका एक कस्टम JsonConverter का उपयोग JsonConverter

कनवर्टर तक पहुंचने से पहले, हमें डेटा को deserialize करने के लिए एक कक्षा को परिभाषित करने की आवश्यकता होगी। Categories संपत्ति के लिए जो एक आइटम और सरणी के बीच भिन्न हो सकता है, इसे एक List<string> रूप में परिभाषित करें और इसे [JsonConverter] विशेषता के साथ चिह्नित करें ताकि JSON.Net उस संपत्ति के लिए कस्टम कनवर्टर का उपयोग करने के बारे में जान सके। मैं [JsonProperty] विशेषताओं का उपयोग करने की भी सिफारिश करता हूं ताकि सदस्य गुणों को JSON में परिभाषित किए गए [JsonProperty] स्वतंत्र अर्थपूर्ण नाम दिए जा सकें।

class Item
{
    [JsonProperty("email")]
    public string Email { get; set; }

    [JsonProperty("timestamp")]
    public int Timestamp { get; set; }

    [JsonProperty("event")]
    public string Event { get; set; }

    [JsonProperty("category")]
    [JsonConverter(typeof(SingleOrArrayConverter<string>))]
    public List<string> Categories { get; set; }
}

यहां बताया गया है कि मैं कनवर्टर को कैसे कार्यान्वित करूंगा। ध्यान दें कि मैंने कनवर्टर जेनेरिक बनाया है ताकि इसे स्ट्रिंग या अन्य प्रकार की ऑब्जेक्ट्स के साथ इस्तेमाल किया जा सके।

class SingleOrArrayConverter<T> : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return (objectType == typeof(List<T>));
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        JToken token = JToken.Load(reader);
        if (token.Type == JTokenType.Array)
        {
            return token.ToObject<List<T>>();
        }
        return new List<T> { token.ToObject<T>() };
    }

    public override bool CanWrite
    {
        get { return false; }
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}

यहां एक संक्षिप्त कार्यक्रम है जो आपके नमूना डेटा के साथ कार्रवाई में कनवर्टर का प्रदर्शन करता है:

class Program
{
    static void Main(string[] args)
    {
        string json = @"
        [
          {
            ""email"": ""[email protected]"",
            ""timestamp"": 1337966815,
            ""category"": [
              ""newuser"",
              ""transactional""
            ],
            ""event"": ""open""
          },
          {
            ""email"": ""[email protected]"",
            ""timestamp"": 1337966815,
            ""category"": ""olduser"",
            ""event"": ""open""
          }
        ]";

        List<Item> list = JsonConvert.DeserializeObject<List<Item>>(json);

        foreach (Item obj in list)
        {
            Console.WriteLine("email: " + obj.Email);
            Console.WriteLine("timestamp: " + obj.Timestamp);
            Console.WriteLine("event: " + obj.Event);
            Console.WriteLine("categories: " + string.Join(", ", obj.Categories));
            Console.WriteLine();
        }
    }
}

और अंत में, उपरोक्त का आउटपुट यहां है:

email: [email protected]
timestamp: 1337966815
event: open
categories: newuser, transactional

email: [email protected]
timestamp: 1337966815
event: open
categories: olduser

पहेली: https://dotnetfiddle.net/lERrmu

संपादित करें

यदि आपको एक ही प्रारूप को रखते हुए, दूसरी तरफ जाने की आवश्यकता है, यानी धारावाहिक, आप नीचे दिखाए गए कनवर्टर की WriteJson() विधि को कार्यान्वित कर सकते हैं। ( CanWrite ओवरराइड को हटाने या इसे true करने के लिए इसे बदलने के लिए सुनिश्चित करें, या फिर WriteJson() कभी नहीं कहा जाएगा।)

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        List<T> list = (List<T>)value;
        if (list.Count == 1)
        {
            value = list[0];
        }
        serializer.Serialize(writer, value);
    }

पहेली: https://dotnetfiddle.net/XG3eRy





amazon-web-services sendgrid postmark